Java Aerospike集群中多个集合(表)上的多个操作
当前系统状态: 目前,我在由RESTful服务支持的aerospike名称空间(数据库,在RDBMS中等效)中维护三个集合(表,在RDBMS中等效) 用例: 我希望至少在一个集合上执行CRUD操作,有时最多在所有集合上执行CRUD操作,这是基于系统中的一些批量输入 期望值: 我希望以原子方式执行所有这些CRUD操作(意味着要么全部发生,要么不发生。这还包含一种边缘情况,即某些集合使用其各自的最新更新成功更新,之后甚至有一个集合未成功更新。我希望将数据回滚到每个集合中的前一个状态。) 我的解决方法:Java Aerospike集群中多个集合(表)上的多个操作,java,workflow,crud,pseudocode,aerospike,Java,Workflow,Crud,Pseudocode,Aerospike,当前系统状态: 目前,我在由RESTful服务支持的aerospike名称空间(数据库,在RDBMS中等效)中维护三个集合(表,在RDBMS中等效) 用例: 我希望至少在一个集合上执行CRUD操作,有时最多在所有集合上执行CRUD操作,这是基于系统中的一些批量输入 期望值: 我希望以原子方式执行所有这些CRUD操作(意味着要么全部发生,要么不发生。这还包含一种边缘情况,即某些集合使用其各自的最新更新成功更新,之后甚至有一个集合未成功更新。我希望将数据回滚到每个集合中的前一个状态。) 我的解决方法
InsertOnSubmit
行为李>
1-不。Aerospike仅在一个记录级别提供原子性。在Aerospike的强一致性(SC)模式下,插入主记录并将其副本复制到另一个节点时,确实遵循真正的2阶段提交语义,但任何多记录事务都必须在应用程序级别实现
2-任何实现多记录事务的方案(如您正在考虑的方案)通常涉及-在您设置的记录中创建某种“锁定”箱,执行多记录更新,构建数据的前后状态,有一些最长的时间来完成,这样您就可以回滚和清除放弃的操作,并通过客户端应用程序进行锁定。这些方案中的任何一个都只能在Aerospike的强一致性模式下可靠地工作 谢谢,@pgupta对您的见解。我有几个简短的问题:1。你说的“主记录”是什么意思?2.我认为aerospike上已经存在“锁定”垃圾箱功能。基于此讨论:。谢谢1) 在Aerospike中,记录分布在4096个分区上。在一个稳定的集群中,每个分区都有
replication factor
拷贝。每个分区都有一个“主”副本,负责接收其包含的记录的所有插入/更新。通过“主记录”,pgupta表示主分区(即非只读分区)上存在的记录副本。注意:分区主控形状不是静态的,如果当前主控形状消失,可以升级新的主控形状。但是,根据集群中的节点ID,排序是确定性随机的。2)您提到的锁在单个事务期间锁定单个记录。目前,没有任何用于多记录事务的内置机制,不管是通用的还是其他的。通常,对多记录事务的需求可以建模,但也有一些用法无法建模。在分布式系统中,集群节点之间的协调会带来巨大的性能负担——一般的多记录事务解决方案需要协调。对于扩展,最好是评估您是否可以对此类需求进行建模。所谓锁定bin,我的意思是在多记录事务实现中,您在模型中获取一条记录,并在其中指定一个bin-将其命名为“lockBin”-当某个客户在执行多记录事务时,您输入1,从该记录开始并涉及多个其他记录,然后客户端将其设置回0,释放该记录供其他客户端使用。您正在实现所有这些锁定/释放/释放,如果锁定客户端死亡-所有这些都在应用程序中。Aerospike本机不支持多记录事务。如果不使用强一致性模式,则无法可靠地执行此操作。