我正在開發一個使用ZooKeeper作爲數據存儲的應用程序。對於應用程序中的其中一種方法,我需要使用樂觀併發控制。例如,我需要實現一個獲取znode數據的get方法,並且我使用znode數據版本進行樂觀併發控制檢查。據我所知,在單一操作中無法獲得znode數據和znode數據版本。如果更新znode數據的爭用較高,則get方法將不起作用,因爲znode數據可能在獲取znode數據後發生變化。所以我問 - 是否有一種方法,我可以在一個單一的操作znode數據和znode數據版本(或znode stat)沒有任何鎖定嘗試之間?ZooKeeper可以在一次操作中獲得znode數據和znode數據版本(stat)嗎?
1
A
回答
5
在Java中,你可以可以實現你想要什麼輕鬆:
Stat stat = new Stat();
byte[] data = zk.getData("/path", null, stat));
這確實在一次操作中讀取數據和版本信息(在stat
對象)。當你寫回的數據,你通過你得到的版本號,當你閱讀:
zk.setData("/path", data, stat.getVersion());
如果有一個版本不匹配,該方法將拋出KeeperException.BadVersionException
,它給你一個樂觀鎖。
0
在使用Kazoo的Python中,獲取兩個統計信息並實現一些optmistic鎖定也是微不足道的。這裏草圖:
while True:
data, stat = zk.get("/path")
# do something with the data and then:
try:
zk.set("/path", new_data, stat.version)
break
except BadVersionError:
continue # or pass
而且,你什麼時候可以使用預先製作的食譜,因爲它們已經廣泛debuged,而且應該把所有角落的情況。
相關問題
- 1. Zookeeper Znode
- 2. Zookeeper znode手錶計數器
- 3. 錯誤:無法從zookeeper獲取主地址; znode數據== null值
- 4. 如何獲得znode ip
- 5. 在ZooKeeper中,我可以在不存在的znode上使用async getData()嗎?
- 6. Zookeeper CLI - 用空格讀取Znode
- 7. zookeeper的znode的客戶端身份驗證和ACL權限?
- 8. 爲什麼ZooKeeper改變我的znode的名字?
- 9. 可以插入和刪除混合操作中的數據嗎?
- 10. Unix shell腳本可以用來操作數據庫嗎?
- 11. 數據轉換和數據ajax可以在一起嗎?
- 12. 我可以在mysql數據庫中獲得最高的值嗎?
- 13. 我可以查詢任何zookeeper節點以獲取任何數據嗎?
- 14. AssemblyFileVersionAttribute - 非版本數據可能嗎?
- 15. 從數據庫中獲得和顯示可變數據在PHP
- 16. 我可以在Xcode中獲得Unity3D引擎版本嗎?以及如何根據版本進行條件編譯?
- 17. stat缺少操作數
- 18. 可以在UI線程上執行數據庫操作嗎?
- 19. 我可以一次創建最大操作數的循環嗎?
- 20. 獲取setInterval根據數組執行一定的操作次數
- 21. 版本的數據,以便用戶可以把數據
- 22. 在SSRS中,您可以在同一個tablix中獲得來自db2數據源的數據和來自SQL數據源的數據嗎?
- 23. 可可數據操作
- 24. 我可以從數據庫中獲得解密的密碼嗎?
- 25. 使用PHP可以在Heroku中獲得發行版本嗎?
- 26. 您可以獲得jQuery和Sizzle的精選版本嗎?
- 27. 在javascript函數中使用ajax可以獲得easyui樹的數據嗎?
- 28. 安排操作數和操作符以獲得編號
- 29. 使得數據庫和數據訪問版本等於
- 30. 我可以在openwhisk中安排一次性操作嗎?
我使用的是Curator 2.8.0,這已被重構爲 Stat stat = new Stat(); c.getData().storageStatIn(stat).forPath(「/ path」); – matsa