Jac*_*cob 5 java google-app-engine jdo
我正在尝试设计一个可以容纳大量数据的数据模型,任何有大量数据经验的人都会对此有任何反馈,即:
// example only, not meant to compile
public class TransactionAccount {
private long balance;
private List<Transaction> transactions = new ArrayList<Transaction>();
....
public long getBalance() { return balance; }
}
private class Transaction {
public Date date;
public long amount;
}
Run Code Online (Sandbox Code Playgroud)
根据我所读到的,在插入Transaction和更新时获得事务完整性的唯一方法balance是使其成为一个实体组.
然而,随着时间的推移,特定的交易将有数百万笔交易TransactionAccount.对此实体组的写入次数较少,但读取次数会更高.
我知道它可能是balance分片的,但是读取它是一个非常频繁的操作,并且分割它会使最常见的操作之一getBalance()成为最慢的操作.
您所描述的安排应该可以正常工作。如果您的实体组变得过大(在这成为问题之前我们谈论的是数百兆字节的事务),您可以编写一个过程来“汇总”旧事务:以事务方式将一组旧事务记录替换为单个事务记录这些交易的总和,以维持余额等于所有交易总和的不变性。如果您仍然需要存储这些旧的“汇总”事务记录,则可以在执行汇总之前在单独的实体组中创建它们的副本。