非常大的实体组的交易

我正在尝试设计一个可以容纳大量数据的数据模型,有大量数据经验的人对此有任何反馈,即:

// example only, not meant to compile public class TransactionAccount { private long balance; private List transactions = new ArrayList(); .... public long getBalance() { return balance; } } private class Transaction { public Date date; public long amount; } 

根据我所读到的内容,在插入Transaction和更新balance获得事务完整性的唯一方法是使其成为一个实体组。

但是,随着时间的推移,特定TransactionAccount将有数百万笔TransactionAccount 。 对此实体组的写入次数较少,但读取次数会更高。

我知道它可能是分片的,但是读取balance是一个非常频繁的操作,并且分割它会使最常见的操作之一getBalance()成为最慢的操作。

你描述的安排应该可以正常工作。 如果你的实体组变得过大(在这成为一个问题之前我们正在讨论数百兆的事务),你可以编写一个程序来“汇总”旧的事务:用一个事务处理来替换一组旧的事务记录。这些交易的总和,以保持余额等于所有交易总和的不变量。 如果您仍需要存储这些旧的“累计”事务的记录,则可以在执行汇总之前在单独的实体组中复制它们。

您是正确的, TransactionTransactionAccount必须位于同一实体组中才能执行事务插入和更新操作。

分片的原因是减少写入争用但你说这将是一个低写入实体,因此这里不需要分片。

要保持实体组的大小不变,您可以设置某种类型的归档过程。 例如,如果这是针对银行帐户的,那么当生成月结单时,您可以存档该月的交易价值。