我試圖用python實現與ndb的強一致性。 而且看起來像我缺少一些東西,因爲我的閱讀表現得像他們不一致。Ndb強一致性和頻繁寫入
查詢是:
links = Link.query(ancestor=lead_key).filter(Link.last_status ==
None).fetch(keys_only=True)
if links:
do_action()
的關鍵結構是:
Lead root (generic key) -> Lead -> Website (one per lead) -> Link
我有使用TaskQueue中同時執行多任務,這個查詢在每次任務結束時進行。有時我在更新last_status
字段時收到「太多爭用」異常,但我使用重試來處理它。它能破壞一致性嗎?
預期的行爲是當last_status
等於None
時沒有鏈接而調用do_action()
。實際行爲不一致:有時do_action()
被調用兩次,有時根本不會調用。
感謝您的回答!如果我經常更新實體會發生什麼情況? 'link.put()'需要更多時間,因爲它等待一段時間來保持每秒寫入1次的頻率?或者它立即返回並且隨後的祖先查詢可能會返回過期的結果? – subcoder
我的回憶是,如果你超過了費率限制,你會得到一個例外,但我不知道另一個確切的例外。不過,這是一個簡單的嘗試。正如Dan所說,這是你需要在部署的應用程序中測試的東西。 –