2010-07-27 24 views
1

這在BigTables/JDO中的我的previous question on handling large numbers of objects更進一步。如何正確添加/操作實體組中的數千個孩子?

假設TransactionAccounttransactions列表中最多可能包含10,000個對象,那麼這對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

嘗試標誌着交易性質@NotPersistent,所以它沒有存儲在數據存儲中的。你可以得到給定Transa的交易實體ction帳戶與ancestor query(更多在this thread)。因此,您應該能夠爲給定賬戶存儲任意數量的交易,因爲它們並非全部存儲在賬戶實體中。

不太極端的措施是爲了紀念交易屬性未索引與此註釋:

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

帳戶的交易仍然會被存儲在列表中,但他們不會被編入索引,這將使它更可行一點。但是,如果您使用@NotPersistent,那麼您將在10-100k筆交易中達到1MB的實體尺寸限制,這不會成爲問題。

相關問題