Transactions Aerospike酸澄清

Transactions Aerospike酸澄清,transactions,acid,aerospike,Transactions,Acid,Aerospike,Aerospike数据库说 […]架构有三个关键目标: 创建一个灵活、可扩展的平台,以满足当今web规模应用程序的需求 提供传统数据库所期望的健壮性和可靠性(即ACID)。 提供运营效率(尽量减少人工参与) 以及: Aerospike经过优化,可与最新的存储和数据库一起使用 尽可能压缩事务吞吐量的技术,同时 仍然保证强稠度(酸) 首先,我在Aerospike中没有找到任何事务定义。通常我将其作为数据库上的一系列操作来获取。但是,在稍后阅读时,我看不到事务是酸性的: 当阅读一篇详细的文章时,我发现

Aerospike数据库说

[…]架构有三个关键目标:
创建一个灵活、可扩展的平台,以满足当今web规模应用程序的需求
提供传统数据库所期望的健壮性和可靠性(即ACID)。
提供运营效率(尽量减少人工参与)

以及:

Aerospike经过优化,可与最新的存储和数据库一起使用 尽可能压缩事务吞吐量的技术,同时 仍然保证强稠度(酸)

首先,我在Aerospike中没有找到任何事务定义。通常我将其作为数据库上的一系列操作来获取。但是,在稍后阅读时,我看不到事务是酸性的:

当阅读一篇详细的文章时,我发现它只是假装酸的保证

示例:
  • 我想在事务中进行一系列操作(a、b、c)。每个操作都是一个独立的数据库查询。如果c失败,那么我希望a和b被DB系统回滚。我在Aerospike中没有发现此功能
  • 让我们考虑两个并发事务修改文档A和B,开始时A=0,B=0:

    • T1将1添加到
      A
      B
    • T2将A和B乘以2
    我希望我们总是以
    A==B
    结束-结果将是:

    • A=1&B=1
      当T2将首先锁定/取得文档A和B的所有权时
    • A=2&B=2
      当T2将首先锁定/取得文档A和B的所有权时
    这一结果的保证是什么

1。您能确认我的示例结果吗?

2。这有什么帮助吗?

附言
说清楚一点,我不想说Aerospike是坏的。我在那里看到了一件很棒的作品。我只是错过了一个很好的澄清,当酸保证失效时。

如您引用的文档第2页底部所述:

在我们网站上的文档中,您指出:

对于单个记录上的读/写操作,Aerospike严格保证这些操作的原子性:

如果您继续阅读任何一个来源,它们将解决应用于单个记录的原子性、一致性、隔离性和耐久性等所有酸性特性

对于NoSQL数据库,术语ACID通常用于指单个分布式(群集)服务器环境中记录的多个副本,并且同一记录的所有副本都是以ACID方式写入的。记录的多个副本保存在分布式数据库中,以提供高可用性和故障切换。由于我们数据库的健壮性,我们的大多数生产客户对2份拷贝感到满意

Aerospike在数据库的单个集群实例中提交该请求。如果您选择在不同的位置/数据中心拥有多个群集实例(用于地理位置策略或灾难恢复),则我们承诺仅对单个数据库实例遵守ACID法规

我们的XDR(跨数据中心复制)将自动将记录复制到其他位置的Aerospike远程实例,因此我们将记录发送到其他位置的过程将显示为Aerospike客户端发送到远程实例,然后再次发送,ACID合规性用于将单个记录发送到远程实例。这种情况以秒为单位发生,以说明网络延迟和其他不在Aerospike控制范围内的因素。我们不支持跨多个实例/地理位置的ACID


Aerospike目前没有事务管理API,因此即使使用用户定义函数(UDF),如果其中一个步骤失败,您也无法回滚示例中描述的一系列步骤。Aerospike从未提出过这种说法,但正如科技行业中经常发生的那样,词语在多种语境中使用,很容易混淆情况。

可以找到更多的讨论:谢谢。我感谢你的解释。我知道单记录部分,但是在链接文档中有一个常用的事务,没有定义。每一个数据库都有它的设计规范,它带来了很好的功能/速度/安全性。。。我提出这个问题的目的是避免混淆,并对ACID合规性有一个清晰的轮廓(以common-SQLDBS的方式)。