2011-08-16 29 views
1

我有一個非常簡單的代碼,我添加一些實體到數據存儲。實體沒有一致地保存與谷歌數據存儲放

public final class storageUtil { 

    private static DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 

    public static Iterable<Entity> getAllEntities(String kind) { 
     Query q = new Query(kind); 
     PreparedQuery pq = datastore.prepare(q); 
     return pq.asIterable(); 
    } 

    public static void putEntity(Entity entity) { 
     datastore.put(entity); 
    } 


} 

如果我打電話putEntity(myEntity所),然後getAllEntities(myKind),新放的實體,只在返回列表2顯示出3次。

如果我在放置後立即調用datastore.get(myKey),它將始終返回新放置的條目。

任何人都可以告訴我發生了什麼嗎?

+0

任何可能涉及多個線程(即賽車條件)的機會?我不知道Google DataStore,但可能添加的實體沒有被刷新,因此不會被查詢返回。 – Thomas

回答

0

你正在使用什麼樣的DataStore? 這是一個高複製(默認)數據存儲? 如果真的服務器(而不是開發者?) 如果是這樣的話,你測試這種行爲是有點期待,因爲「最終一致」的行爲。

Using the High Replication Datastore

是你應該開始尋找解決此

+0

這是高複製性,但在開發環境中 - 而不是在真正的服務器上。 –

+0

當我保存在應用程序中時,我可以忍受這種不一致性,因爲無論如何我都在維護一個本地列表,但是當重新啓動應用程序時,只有一些實體會被加載......其餘的只是消失了。 –

+0

我更新了我的應用程序以使用實體組,並且這似乎解決了不一致性(即,以包含所有預期實體的列表形式提取組),但仍然在重新啓動時,只加載了一小部分已保存的實體。這是本地開發數據存儲的問題,還是我可以期望在部署到真實服務器時問題持續存在? –

0

的方式把你的實體到使用交易數據存儲,here你會發現一個例子。