Aerospike 酸澄清
Posted
技术标签:
【中文标题】Aerospike 酸澄清【英文标题】:Aerospike ACID clarification 【发布时间】:2014-11-13 06:18:39 【问题描述】:Aerospike 数据库说,it is
[...] 架构具有三个关键目标: 创建一个灵活、可扩展的平台,以满足当今网络规模应用程序的需求 提供传统数据库所期望的稳健性和可靠性(即 ACID)。 提供运营效率(最少的人工参与)
在other place:
Aerospike 已针对最新的存储和数据库进行了优化 尽可能多地压缩交易吞吐量的技术,同时 仍然保证强一致性 (ACID)。
首先,我没有在 Aerospike 中找到任何关于交易的定义。通常,我将其作为数据库上的一系列操作来获取。但是稍后阅读我没有看到事务是 ACID:
阅读详细的Aerospike ACID description 时,我发现它只是假装 ACID 保证。
示例:
我想在事务中进行一系列操作(a、b、c)。每个操作都是一个独立的数据库查询。如果 c 失败,那么我希望数据库系统回滚 a 和 b。我没有在 Aerospike 中找到此功能。让我们考虑修改文档 A 和 B 的两个并发事务。开始时 A=0 和 B=0:
T1 给A
和B
加1
T2 将 A 和 B 乘以 2。
我希望我们总是以A==B
结束 - 结果将是:
A=1 & B=1
当 T2 将首先锁定/取得文档 A 和 B 的所有权时
A=2 & B=2
当 T2 将首先锁定/取得文档 A 和 B 的所有权时
这个结果的保证是什么?
1.你能确认我的例子的结果吗?
2。 User Defined Functions 在这里有什么帮助吗?
PS
说清楚 - 我不想说 Aerospike 不好。我在那里看到了一件很棒的好作品。当 ACID 保证在那里失败时,我只是错过了一个很好的说明。
【问题讨论】:
【参考方案1】:如您引用的文档第 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 从未提出过这种说法,但正如在技术行业中经常发生的那样,单词在多种情况下使用,很容易混淆情况。
【讨论】:
更多讨论可参见:discuss.aerospike.com/t/… 谢谢。我很欣赏你的解释。我知道 single record 部分,但是在链接的文档中有常用的事务没有定义。每个数据库都有它的设计规范,它带来了很好的特性/速度/安全性......我这个问题的目标是避免混淆并有一个清晰的 ACID 合规性轮廓(以常见的 - sql dbs 方式)。以上是关于Aerospike 酸澄清的主要内容,如果未能解决你的问题,请参考以下文章
使用Aerospike的 Spark 连接器(Spark Connect)
AeroSpike踩坑手记1:Architecture of a Real Time Operational DBMS论文导读