我正在開發GAE Web應用程序,我需要創建和移除兩個實體之間沒有祖先關係的實例之間的關聯(也考慮同一個實例可能有多個關聯,這些關聯可能會有所不同在祖先關係一旦創建的時候,不能被刪除)。 我經歷了「最終一致性」政策,這意味着我的網頁中的數據不會與我正在創建/刪除的關係一致地刷新。 但是我已經看到,通過執行put()方法兩次,一致性似乎是強制的。Google App Engine Datastore:處理最終一致性
這符合「最終一致性」定義,該定義聲明「......未提供新更新......」數據最終將保持一致,並且由於我正在進行另一次更新(實際上兩次更新)我想系統會強制一致性。
對嗎?還有其他更優雅的方式嗎?
更新:我的目標
考慮我有A型的實體名單,它並不重要,他們實際上代表,讓我們說,他們代表了我的生意 的主要實體我有一個列表類型B的另一個實體表示類型A的實體可以依賴的服務。 它是一個多對多的關係,以便 服務B可以通過許多實體使用的A型 的實體可以通過B B型的許多服務送達的
我有一個網頁,讓我創造這樣的關係(一個Jinja2模板,帶有來自客戶端的Jquery Ajax回調和一個依賴於服務器端數據存儲的webapp2 python請求處理程序)。 從數據存儲中刪除關係時,我通過對實體進行另一個查詢並描述它與其相關的b鍵列表來刷新數據。在這種情況下,我仍然可以在與a相關的b鍵列表中看到刪除的b.key。這不是我所期望的。
UPDATE:一些代碼
這裏是模型
class A(ndb.Model):
name = ndb.StringProperty()
services = ndb.KeyProperty(repeated=True)
class B(ndb.Model):
name = ndb.StringProperty()
servedEntities = ndb.KeyProperty(repeated=True)
這裏我用它來創建的關係
a.services.append(b.key);
b.servedEntities.append(a.key);
a.put()
b.put()
這裏的代碼是我使用的刪除代碼關係
a.services.remove(b.key);
b.servedEntities.remove(a.key);
a.put()
b.put()
還有就是我如果從數據存儲我仍然可以看到b.key在a.services
你不能強迫它做兩次,它沒用。你能描述爲什麼你需要他們一致? –
已更新,我希望我已經清楚 – lowcoupling
如果您將包含代表問題的最小可能代碼示例 - 將更容易幫助您。 –