2012-02-19 65 views
2

我正在使用HRD,因爲我想使用實體組對單個事務中的多個實體進行更改。GAE高交易複製數據存儲(HRD)

瞭解非事務性(非祖先)查詢可能會看到以前提交的事務的全部,部分或全部結果。

我現在面臨的問題是: 提交後的交易,增加新的記錄到數據庫

Transaction tx = pm.currentTransaction(); 
    tx.begin(); 
    pm.makePersistent(object); 
    tx.commit(); 
  • 遵循查詢犯下的記錄,有時它會返回結果,有些時候只是返回作爲空

    Query q = pm.newQuery(queryStatement);   
        CompanyProfile result = (CompanyProfile) q.execute(); 
    

p/S:當關閉HRD,它完美地工作。

任何解決方法?

感謝 RGDS SJ

回答

1

有沒有辦法解決它:HRD始終是最終一致:http://code.google.com/appengine/docs/python/datastore/queries.html#Setting_the_Read_Policy_and_Datastore_Call_Deadline

一種方式圍繞它是使用獲得的,而不是查詢。在HRD中,獲取/放入/刪除非常一致,而查詢最終一致:http://code.google.com/appengine/docs/java/datastore/hr/

如果這是一個用戶會話內的立即查詢後保存方案,則可以查詢數據並將保存的實體添加到手動列表。

0

如果您想使用關係數據庫模型,您可能需要查看Google Cloud SQL:https://developers.google.com/cloud-sql/我自己沒有嘗試過,但我沒有在我的應用中使用任何事務。

我肯定不會使用舊的非HR數據存儲。如果在未來一兩年內結束,我不會感到驚訝。它不像HR數據存儲那樣可靠。但正如你發現的那樣,如果你不習慣,最終的一致性可能會非常棘手。

0

如果以下查詢也在同一個事務中完成,它應該返回正確的結果。但是,所有其他查詢最終都是一致的,這不幸是數據存儲的本質。