gpt4 book ai didi

java - Aerospike 集群中多个集合(表)的多次操作

转载 作者:行者123 更新时间:2023-11-30 01:45:14 26 4
gpt4 key购买 nike

当前系统状态:

目前,我在 aerospike 命名空间(数据库,RDBMS 中的等效项)中维护由 RESTful 服务支持的三组(表,RDBMS 中的等效项)。

用例:

我想根据系统中的一些批量输入对至少一组执行 CRUD 操作,有时最多对所有组执行 CRUD 操作。

期望:

我想以原子方式执行所有这些 CRUD 操作(意味着要么全部发生,要么全部不发生。这还包含一个边缘情况,其中某些集已成功更新为其各自的最新更新,甚至稍后单组不成功。我想将每组数据回滚到之前的状态。)

我的解决方法:

  1. 首先我试图找到 InsertOnSubmit 的等价物。在 aerospike 中使用此 answer of StackOverflow 中解释的方法,但似乎不存在。
  2. 其次,我想到创建一个中间回滚工作流模块。伪代码如下所示:

    1. 暂时将新数据保存在按集合隔离的某些数据类型中。
    2. 循环遍历按集合的数据,并从中选择主键,并从 aerospike 获取旧数据,并将其保存到再次按集合隔离的其他数据类型中。
    3. 从第一个数据类型开始逐一循环所有集合,并开始相应地执行 CRUD 操作。 IF[一切运行到最后]:转到第 6 步;否则:转到第 4 步
    4. 通过从第二个数据类型开始逐一循环所有集合来开始回滚,并开始执行 CRUD 操作。 IF[一切运行到最后]:转到第 7 步;否则:转到第 5 步
    5. 记录错误(包括所有详细信息)并向警报系统报告此错误。有人会被传呼来查看。 转到步骤 7;
    6. 终止,操作成功。
    7. 终止,操作失败。

需要帮助:

  1. 是否有机会在 Aerospike 集群上结合 InsertOnSubmit 行为,而无需创建自己的回滚工作流程?
  2. 如果没有,那么有没有更好的方法来优化我的第二种方法?

最佳答案

1 - 不。Aerospike 仅在单个记录级别提供原子性。虽然插入主记录然后将其副本复制到另一个节点确实遵循 Aerospike 强一致性 (SC) 模式中真正的两阶段提交语义,但任何多记录事务都必须在应用程序级别实现。

2 - 任何实现多记录事务的方案(例如您正在考虑的方案)通常涉及 - 在您设置的记录中创建某种“锁定”容器,执行多记录更新,构建之前和之后的记录在数据状态之后,有某种最大完成时间,以便您可以回滚并清除放弃的操作并由客户端应用程序锁定。这些方案中的任何一个都只能在 Aerospike 的强一致性模式下可靠地工作。

关于java - Aerospike 集群中多个集合(表)的多次操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58285904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com