这进一步到我的previous question on handling large numbers of objects在 BigTables/JDO 中。
假设 TransactionAccount
最终在其 transactions
列表中可能有多达 10,000 个对象,这如何与 Goodle 应用引擎配合使用?
如何将对象添加到如此大的列表中而不将整个列表加载到内存中? (假设不应该将 10,000 个对象加载到内存中?)
我并不是想问你如何做我的作业,我只是不知道从哪里开始解决这个问题,应用程序引擎文档和谷歌搜索没有帮助:(
// example only, not meant to compile
@PersistenceCapable
public class TransactionAccount {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
public Key key;
private long balance;
private long transactionCount;
@Element(dependent = "true")
private List<Transaction> transactions = new ArrayList<Transaction>();
....
public long getBalance() { return balance; }
}
@PersistenceCapable
private class Transaction {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
public Key key;
public Date date;
public long amount;
}
此问题已提出但未解决 in the following google groups post .
最佳答案
尝试标记事务属性@NotPercient
,以便它根本不存储在数据存储中。您可以使用 ancestor query 获取给定 TransactionAccount 的交易实体(更多信息请参见this thread)。这样,您应该能够存储给定帐户的任意多笔交易,因为它们并不全部存储在帐户实体中。
一个不太激烈的措施是使用此注释将交易属性标记为未索引:
@Extension(vendorName = "datanucleus", key = "gae.unindexed", value="true")
帐户的交易仍将存储在列表中,但不会被索引,这将使其更加可行。尽管如此,您仍会在 10-100k 事务中达到 1MB 实体大小限制,如果您使用 @NotPercient
,这不会成为问题。
关于java - 如何正确添加/操作实体组中的数千个子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3342603/