NuoDB
by NuoDB

谷歌云扳手&NOODB:符合酸性兼容数据库的比较

发布论文几年 扳手 F1,谷歌上周宣布了他们所谓的赌注的可用性 云扳手 。从本质上讲,这是在Google云平台上的内部使用内部使用的核心事务性关系服务。我的同事 写了一块很棒的作品 关于这意味着什么,所以我不会详细介绍历史以及为什么这是令人兴奋的消息。但是,你知道,这是一个非常重要的消息。

本公告的一个更有趣的方面之一就是他们正在为他们多年用作核心基础架构的东西。扳手是谷歌的大部分基础。对于这个复杂的用户,分布式系统的用户来说,这很好,因为这意味着扳手已经进行了战斗测试。但是,它也意味着该服务是为特定应用需求而设计的。与任何分布式系统一样,了解他们在设计中所做的权衡对理解,在最有效地使用这种新数据库的情况下至关重要。

在许多方面,云扳手类似于Nuodb。两者都是设计用于比例和云采用的弹性SQL数据库。两者都提供一致性和酸事务。然而,也存在一些实质性的差异,这突出了我们方法的不同目标以及对我们各自的软件将如何使用的期望。

诺德布和云扳手之间是类似的或相同的?

弹性刻度

就像我上面说的那样,最明显的相似之处是两种服务都是弹性的。本质上讲,这意味着它们可以根据应用逻辑对不影响进行调整。更具体地,两个数据库通过从存储位置分开按需进行计算容量来实现这一目标&副本:使用NOODB,具有专用于复制耐用性的单独对等过程,而云扳手构建在复制的存储服务(称为CLOSOS)上。弹性也意味着两个数据库都可以维持节点故障或升级,而不会影响作为整个服务的服务的可用性。

交易一致性

下一个常见元素是Nuodb和云扳手都是事务性的。它们提供酸语义并支持标准SQL隔离级别。在这两种情况下,依赖某种形式的版本控制:云扳手通过TrueTime使用全局时间戳,而Nuodb构建逻辑排序和 多版本并发控制(MVCC)。这两个系统都通过选定的领导者调解更新冲突,尽管我们将在下面看到,机制是不同的。具有事务性一致性的弹性刻度对于从单个实例数据库迁移到分布式虚拟化部署的任何现有应用程序都是至关重要的。

结构化数据

诺福德和云扳手都构建了SQL Schema和DDL命令,用于定义结构。这反过来支持索引,丰富的查询能力,加入等。这两个数据库都直接从SQL标准实现了语法和功能,使得支持框中的标准查询工具更简单。然而,正如我们在下面看到的那样,DML选择存在显着差异。在这两种情况下,DBA都可以使用架构结构来优化查询和存储模式:在NOODB中,这是支持的 标准表分区 在云扳手中,一个名为的新概念 交错 is introduced.

全球经营

对于传统RDBMSS的许多用户,从单个实例中有一个所需的进展将故障转移到主动活动部署。分布式数据管理系统倾向于有这种进展,以及支持全球规模部署的逻辑下一步,以便分散用户可以体验到他们的数据的低延迟访问。在该规模,延迟,故障语义和恢复模型中获得复杂。云扳手和诺福德都为这些部署设计了,给用户选择了 如何对失败做出反应 如果数据应该存储以优化给定的应用程序的需求,以便在延迟,可恢复性或一致性周围优化。谷歌将在今年晚些时候揭示他们的方法的更多细节,因此我们必须重新审视这个主题。

持续可用性

当然,在没有讨论的情况下很难谈论全球部署 帽定理 。实际上,这是一个非常热门的话题与云扳手发布,以及埃里克啤酒,定理和当前谷歌员工的发起人,有 关于他的观点 关于为什么云扳手处于新类别的东西。在没有进入细节的情况下,他的论点是谷歌的基础架构的高可用性和可靠性意味着分区不太可能,即使它们发生,即使在特定的查询可能具有,也将继续为运行客户端提供服务。重新运行。翻译,我会说这意味着帽是在系统现实中的观察,以及您应该关注的是 了解权衡 这对你失败的重要性,这与我们看看Nuodb的设计完全相同。

存储抽象

最后,值得研究在两个系统中如何管理存储的相似之处。除了我上面所说的关于分离存储和服务,两个数据库都将数据映射到影响不仅仅是存储而且协调效率的集合的方法。表在NOODB或交织中分区 存储指数 在云扳手中有效地将可能一起使用的数据进行组数据。两种情况下的分组可用于优化局部性,高速缓存和争用管理。在NOODB中,这种数据群集被映射到一个名为a的概念 存储组 ;在云扳手中,类似的概念被称为a 分裂 。结构和存储之间的这些类似的抽象在弹性系统中产生了很多意义。正如我们看到的那样,这两个概念的应用方式也存在一些实质性差异。

企业焦点

舍入一下,两个系统实现标准身份机制,默认加密电线上的数据,提供逻辑备份&恢复模型并执行企业环境中基线要求的许多其他内容。那么所有这些相似之处都可以吸引谁?我相信它是传统的SQL用户迁移到现代体系结构,需要分发的启动&在易于管理的内容中开箱的强大操作,以及移动到托管或SaaS产品的软件供应商。

这是一个非常广泛的团体,所以下一步让我们看看设计目标的一些关键差异,以更好地了解应该应用这两个数据库的位置。

什么是不同的?

自定义基础架构与商品部署

让我们从最明显的差异开始。云扳手深入绑定到谷歌的基础架构,依赖于TrueTime支持的原子钟和谷歌云平台服务进行存储,计算等。这是云扳手的扩展功能的这种紧致关系,但也意味着服务的用户必须他们自己在谷歌的云上运行。 NOODB必须在实现方面做得更多,以支持规模,一致性,恢复和快照,但通过这样做,可以实现商品基础架构的规模。这允许部署在云(包括谷歌)和广泛的异构基础架构中运行。

依赖谷歌的基础设施具有其他效果。例如,通过使用全局时间服务来订购和一致性,Google已选择 放置最小延迟 (通常只有几毫秒)所有交易。讨论了很好的讨论 Quizlet. 这量化了早期的经历。这种选择的强大优势是序列化,线性吞吐量缩放,以及时间点快照的简单模型。对于NOODB和我们的客户要求,我们通过利用围绕良好地点的假设优化的按需缓存和协议,首先采用该方法首先关注低延迟。这意味着系统在维护局部性时,系统会缩放吞吐量。参考的地方在云扳手中也很重要,但出于不同的原因。我们会在一分钟后回到那个。

主键API与标准SQL(DML)

另一个重要差异也是通过申请要求驱动(部分)。谷歌已经实现了一个系统,它使用标准SQL语法进行读取数据,但需要通过自定义API完成插入或更新,并与主键关联。这个API是他们在云中使用其他产品标准化的API。它是一个有道理的网络式应用程序的接口,用于kv或文档存储,但要么想要SQL进行分析和发现。实际上,可以宣布交易读写或只读,云扳手团队提供了 真的很好的文件 关于如何考虑对申请的权衡和影响。相比之下,Nuodb支持插入和更新的标准DML语法,并允许在事务中任意交互。对于SQL缺乏经验的开发人员,这似乎比简单的kV API更复杂,但它对于具有迁移到云模型的现有应用程序和工具的任何人来说是一种关键功能。

嵌入式结构的共同位置与缓存数据的共同位置

除了简单性之外,还有另一个原因选择谷歌选择写入系统更简单,主要关键关联。必须有一个 每个表上的主要键除其他原因之外,要定义分裂的关键范围。每个根表(以及其任何交错的子项)被丢进到连续的密钥范围跨度,该跨度定义每个拆分的内容。注意这意味着二级索引将跨度拆分,因此提供了如何提供直接建议 有效地使用二级指数。 NOODB还具有数据映射到内部结构,其中每行被映射到包含其他行集合的一个对象。该物体被称为原子,这与分裂不同往往很小(

通过物理布局与按需缓存协调

这是地方主题变得有趣的地方。对于云扳手中的每个拆分,都有一个领导者(通过paxoS选择)和几个追随者,所有这些都可以访问数据。如果给定交易的所有工作保持在给定分裂的数据集中,则协调由单个(可能本地)的领导者完成。如果事务跨度拆分,则必须运行协调协议以在领导者之间进行坐标。这就是为什么交织被提供为特征以及为什么有关于如何的谨慎建议 在实践中使用索引。在NOODB中,根据需要将数据带入缓存,因此您不会在架构中定义共同位置。在具有给定对象的Nuodb数据库进程中,协议是关于该对象的“领导者”是谁。当对象仅在一个位置处于缓存时,所有协调都保证为本地。由于给定的对象被复制到许多缓存时,协调更新中存在开销,因此Nuodb焦点是最小化高速缓存复制。

自动与手动数据分区

有趣的是,云扳手无法控制系统中的拆分的尺寸或数量,只能将数据共同定位为相同的拆分。作为工作量运行,有关如何分离,连接或以其他方式重新对齐分割的启发式决策。实质上,有一个应用于数据存储的优化器。 Nuodb采用相反的方法,施加很少的意义,其中原子用于存储数据,但是您可以完全控制表格如何划分,然后映射到存储组。这使得基于地点或资源分配思考存储非常简单,但需要更多努力,以自动扩展,因为数据集大小增长。鉴于云扳手被设计为摘要存储等资源的服务,这些权衡(在我看来)是有意义的,而Nuodb是旨在为运营商提供部署和资源管理要求的软件的软件。

什么是妙语?

通过打开云扳手给客户,谷歌正在验证很多我认为该行业正在趋势。看着上面的相似之处,诺德布和云扳手都集中在 弹性SQL. ,交易一致性, 可用性 , 和 混合交易。建筑相似之处,如 将服务从存储中分开,非常适合按需缩放和透明的故障处理。两者中的数据抽象都适合传统分区和现代全球操作模型。这些都是常见的动机 应用程序迁移到云中。

另一方面,激励这两个系统的应用表达了不同的观点。云扳手已选择优化其内云服务,专注于通过定义映射到本地化访问模式的架构来刻度的主要键应用模型。在实践中,这将很好地(例如)用于寻找需要一致性的逻辑管理模型或键值/文档用户的分叉应用程序。 NOODB假设没有特定的基础架构,因此在按需缓存模型上建立,以优化商品资源。对于可以基于活动访问模式缓存工作集和本地化冲突的应用程序,它缩放。这是设计用于在现代体系结构中需要标准SQL的传统OLTP应用的要求。

在任何一种情况下,这些都是在数据库空间中发生的转换的示例:具有强大性能和事务一致性的分布。我很高兴看到过去一周围绕云扳手发生的讨论和它使社区询问的所有问题。 我鼓励你尝试 两个系统都是为自己了解的选项,然后让我知道你在下面的评论中的想法!