【问题标题】:How to design a transaction management system for a custom key-value store如何为自定义键值存储设计事务管理系统
【发布时间】:2014-09-03 05:35:31
【问题描述】:

我的应用程序使用自定义键值存储作为数据持久层。这个键值存储是内部开发的,有一些 API 可以使用,但是,它不提供有关事务管理或锁定(尤其是分布式锁定)的任何内容。

现在,我们作为这个键值存储的用户需要开发这样一个锁定/事务管理系统。有人可以帮助展示如何实现这种分布式锁定吗? Apache Zookeeper 值得一看吗?

我们使用 Java 7。

谢谢, NN

【问题讨论】:

  • 所以您要... 在您的自定义、无事务存储引擎之上分层 Zookeeper?我不知道该说什么,除了这似乎是基于意见的,不适合 SO。
  • @markspace 正如你所说,这是非常基于意见的,很多人不喜欢在数据库级别锁定/任何东西,因为数据库应该很快,并且有一种趋势是在更高的层。此外,他不是在问这是否是个好主意,而是在问可以使用什么/如何完成。
  • @MateuszDymczyk:这真的很有趣。顺便说一句,我没有标记 OP,我只是指出他的问题可能不合适。就我个人而言,我希望 SO 对基于意见的问题和答案更加宽容。

标签: java distributed-lock


【解决方案1】:

有很多选择,其中许多甚至会告诉您如何操作:

任何分布式和内存中的东西都可能是一个很好的候选者(并且它确实有效)是一个很好的候选者。就个人而言,我们正在使用 ZK(更准确地说是Curator 使其更容易)并且效果很好。我们正在使用的一些库与 Hazelcast 一起使用,而且似乎没有更糟

【讨论】:

  • 感谢您的回复;一个快速的问题:使用其中任何一种实现分布式锁都需要一个运行这些的集群......我的理解是否正确?如果我开始编写自己的分布式锁实现(仅从这些中获取想法),那将需要更多时间,并且我必须处理很多内部事情。不是吗?
  • @Niranjan 嗯,是的,通常当你想自己写东西时,它会比使用现有库花费更多时间:-))但我不完全理解 - 如果你想要一个分布式锁意味着你已经有了某种分布式环境,对吧?您只需在其中使用上述技术即可。例如,您的应用程序中有您的数据库访问层,在对表执行操作之前,您通过获取锁来检查其他人是否正在使用它,就是这样。
  • 让我解释一下我的场景并请提供一些指导。我们的数据模型有点复杂(例如,我们在创建 Book 时存储了 4 个独立实体 BookAuthorBookAuthorsAuthorBooks)。我们的 WAR 文件部署在多个独立的 JVM(即非集群模式)上,从中我们为这 4 个实体调用单独的 putObject() 方法。现在,如果我想使用 HazelCast,我应该在哪里实现我的锁定和管理事务?
  • 在您进行数据库保存的地方。将应用程序部署在不同的 JVM 中并不重要,HazelCast 集群不关心它是同一台机器上的不同 JVM 还是不同的机器上,它会尝试通过 TCP/IP(或其他一些协议)创建集群,不要引用我的话)。因此,当您进行保存时,您首先要戳榛树并获得锁。每个 JVM 都有自己的 HazelCast 对象实例,但最终它们都会相互通信。
猜你喜欢
  • 2015-10-30
  • 2019-10-03
  • 2016-11-15
  • 2010-11-29
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
相关资源
最近更新 更多