java - 如何正确添加/操作实体组中的数千个子项?

标签 java google-app-engine jdo

这进一步到我的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/

相关文章:

java - 原因和 java.lang.NullPointerException 错误修复

java - 当我的应用程序运行时,我需要禁用 Android 设备的触摸

java - 当试图用一个字符替换两个字符时,应用程序崩溃。它可以很好地替换一个字符

java - GAE JDO 中的奇数 id 序列

java - 在线部署 java web 应用程序

google-app-engine - 谷歌应用引擎 : Build Timed Out during Deployment

python - Google App Engine 应用程序是否可以交流或控制机器学习模型或任务?

python - Google App Engine,任务队列

Java App Engine 数据存储 : How to query fields of object's inherited classes?

java - 选择 GQLQueries (JDO) Google app Engine JAVA 中的特定行