我正在开发一个使用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的名字?
- 8. 可以插入和删除混合操作中的数据吗?
- 9. Unix shell脚本可以用来操作数据库吗?
- 10. 数据转换和数据ajax可以在一起吗?
- 11. 我可以在mysql数据库中获得最高的值吗?
- 12. 我可以查询任何zookeeper节点以获取任何数据吗?
- 13. AssemblyFileVersionAttribute - 非版本数据可能吗?
- 14. 从数据库中获得和显示可变数据在PHP
- 15. stat缺少操作数
- 16. 我可以在Xcode中获得Unity3D引擎版本吗?以及如何根据版本进行条件编译?
- 17. 获取setInterval根据数组执行一定的操作次数
- 18. 可以在UI线程上执行数据库操作吗?
- 19. 我可以一次创建最大操作数的循环吗?
- 20. 版本的数据,以便用户可以把数据
- 21. 可可数据操作
- 22. 在SSRS中,您可以在同一个tablix中获得来自db2数据源的数据和来自SQL数据源的数据吗?
- 23. 我可以从数据库中获得解密的密码吗?
- 24. 使用PHP可以在Heroku中获得发行版本吗?
- 25. 使得数据库和数据访问版本等于
- 26. 在javascript函数中使用ajax可以获得easyui树的数据吗?
- 27. 安排操作数和操作符以获得编号
- 28. 您可以获得jQuery和Sizzle的精选版本吗?
- 29. 是否可以通过列名和数字操作数据框?
- 30. 我可以在openwhisk中安排一次性操作吗?
我使用的是Curator 2.8.0,这已被重构为 Stat stat = new Stat(); c.getData().storageStatIn(stat).forPath(“/ path”); – matsa