9

Aerospike 数据库说,它是

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

其他地方

Aerospike 经过优化,可与最新的存储和数据库技术配合使用,以尽可能多地压缩事务吞吐量,同时仍保证强一致性 (ACID)。

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

在阅读详细的Aerospike ACID 描述时,我发现它只是假装ACID 保证。

例子:

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

    • T1 加 1AB
    • T2 将 A 和 B 乘以 2。

    我希望我们最终A==B会得到 - 结果将是:

    • A=1 & B=1当 T2 将首先锁定/取得文件 A 和 B 的所有权时
    • A=2 & B=2当 T2 将首先锁定/取得文件 A 和 B 的所有权时

    这个结果的保证是什么?

1. 你能确认我的例子的结果吗?

2.用户定义的函数在这里有帮助吗?

附言

说清楚 - 我不想说 Aerospike 不好。我在那里看到了一件很棒的好作品。当 ACID 保证在那里失败时,我只是错过了一个很好的说明。

4

1 回答 1

11

如您引用的文档第 2 页底部所述: http ://www.aerospike.com/docs/architecture/assets/AerospikeACIDSupport.pdf

并在您指向的网站上的文档中: http ://www.aerospike.com/acid

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

如果您继续阅读任一来源,它们会解决应用于单个记录的原子性、一致性、隔离性和持久性的所有 ACID 属性。

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

Aerospike 在数据库的单个集群实例中对此进行了承诺。如果您选择在不同的位置/数据中心拥有多个集群实例(用于地理位置策略或灾难恢复),那么我们承诺仅对单个数据库实例进行 ACID 合规性。

我们的 XDR(跨数据中心复制)会自动为您将记录复制到其他位置的 Aerospike 远程实例,因此我们将记录发送到其他位置的流程将显示为远程实例的 Aerospike 客户端,ACID 合规性是用于发送到远程实例的单个记录。考虑到网络延迟和 Aerospike 无法控制的其他因素,这种情况会在几秒钟内发生。我们不支持跨多个实例/地区的 ACID。

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

于 2014-09-18T22:59:16.357 回答