代码之家  ›  专栏  ›  技术社区  ›  Jay

如何在一个实体组中正确地添加/操作成千上万的子对象?

  •  1
  • Jay  · 技术社区  · 15 年前

    这对我来说更进一步 previous question on handling large numbers of objects 在BigTables/JDO中。

    假设 TransactionAccount transactions list,这是如何与Goodle应用程序引擎一起工作的?

    如何将对象添加到如此大的列表中,而不将整个列表加载到内存中(假设10000个对象不应该加载到内存中?)

    我不是想问你怎么做作业,我只是不知道从哪里开始解决这个问题,应用程序引擎文档和谷歌搜索没有帮助:(

    // 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 .

    1 回复  |  直到 8 年前
        1
  •  1
  •   ryan    14 年前

    @NotPersistent ,因此它根本不存储在数据存储中。您可以使用 ancestor query (更多信息) this thread

    一个不太激烈的措施是将transactions属性标记为未使用此注释编制索引:

    @Extension(vendorName = "datanucleus", key = "gae.unindexed", value="true") 
    

    账户的交易仍将存储在列表中,但它们不会被编入索引,这将使其更加可行。尽管如此,您还是达到了1MB实体大小的限制(大约10-10万个事务),如果您使用 @不持久 .

    推荐文章