Oracle、NoSQL和NewSQL 数据库技术对比(一)

本文作者:约翰·瑞恩 - 瑞银集团数据仓库解决方案架构师

目录

世界已经变了 . 1

哪些变了? . 2

问题是什么? . 3

性能与可用性和耐久性 . . . . . . . . . . . . . . . . 3

一致性与可用性 . . . . . . . . . . . . . . . . . . . 4

灵活性与可扩展性 . . . . . . . . . . . . . . . . . . 5

ACID与最终一致性 . . . . . . . . . . . . . . . . 6

重新设想OLTP数据库 . 7

世上无难事! . 8

NewSQL 数据库技术 . 9

VoltDB . 10

MemSQL . 11

哪些应用需要NewSQL技术? . 12

结论 . 13

作者简介 . 13

哪些变了?

由上可得出下列几个结论:

  • 可扩展性 — 流量可能出现爆炸性的增长,IT系统需要迅速扩大规模,以处理指数化增长的事务
  • 高可用性 — IT系统必须每周7天、每天24小时运行,并且必须具有故障容错性。(美国银行2011年发生一次故障,对2900万客户造成持续六天的影响)。
  • 高性能 — 随着可扩展性的不断增强,性能也必须跟上,保持稳定和快速。据亚马逊估算,在极端情况下,页面加载时间每增加一秒,该公司每年要损失16亿美元。
  • 速度 — 设备自带的联网传感器越来越多(远的不说,智能电话就自带联网传感器),每秒可能会有数以百万计的事务需要处理。
  • 实时分析 — 夜间进行批处理和业务智能化已经过时。分析与操作处理之间的界限变得模糊,对实时决策的需求越来越多。
  • 物联网( Internet of Things )让速度急剧加快! — Stonebraker博士(MIT ).

上述需求催生极为精彩的营销术语Translytical数据库,意思是采用混合解决方案,即同一个解决方案既可处理海量事务,也可完成实时分析。

问题是什么?

在降低成本的同时提供高性能(可能还要使用廉价服务器),是所有数据库厂商都面对的挑战。但是,需求之间相互冲突:

  • 性能 — 最大限度地缩短延迟,在毫秒级时间内完成事务处理。
  • 可用性 — 即使系统的一个或多个节点发生故障或与网络断开,也能保持运行的能力。
  • 可扩展性 — 能够不断地扩大规模,以满足海量数据和事务速度的要求。
  • 一致性 — 提供一致、准确的结果 — 特别是在发生网络故障时。
  • 耐久性 — 确保修改一旦实施后不会丢失。
  • 灵活性 — 提供通用的数据库解决方案,以支撑事务及分析方面的工作负荷。

要具备海量渐进扩展能力,唯一现实的办法就是部署横向扩展的分布式系统。通常情况下,为最大地限度提高可用性,对某个节点实施的修改会被立即复制至两个或更多个其他节点。但是,一旦将数据分配给多个服务器,则面临利弊权衡。

例如:

性能与可用性和耐久性

许多NoSQL数据库将数据复制至集群内的其他节点,以提高可用性。如果数据库节点在在写入操作后立即崩溃,则数据在其他机器上有备份,因此修改是持久的。但是,也可放松这个要求,不备份就立即返回。这可实现性能的最大化,但有丢失修改的风险。修改可能根本无法持久。

地理分散式系统
在这里插入图片描述

一致性与可用性

NoSQL数据库支持最终一致性。例如,在上图中,如果与纽约之间的网络连接临时断掉,则有两个选择:

  • 停止处理 — 但是纽约的可用性就受到了影响
  • 接受读取/写入操作 — 在恢复网络连接后消除差异。但是这么做的风险是提供过期或错误的结果,可能需要解决写入操作的冲突。

显然,NoSQL数据库是用一致性来换取可用性方面的能力。

灵活性与可扩展性

与Oracle和DB2等通用型关系数据库相比,NoSQL数据库的灵活性相对较差,(例如)不支持Join(连接)操作。除了许多不支持SQL语言的数据库,有些数据库(例如Neo4J和MongoDB)是专为支持特定问题而设计的—图处理和JSON数据结构。即使像HBase、Cassandra和Redis这样的数据库,也放弃关系连接操作,但许多还限制访问单一主键,并且不支持辅助索引。

许多数据库都声称100%支持ACID事务。
实际上提供正式ACID保证者寥寥无几。
— Peter Bailis 博士(斯坦福大学)

ACID与最终一致性

数据库解决方案的扩展方面,主要挑战之一就是维持ACID一致性。亚马逊采用DynamoDB数据库,放松一致性约束,以换取速度,从而解决了性能问题,由此催生了大量NoSQL数据库。

另外,最成功的数据库(包括Oracle)也无法提供真正的ACID隔离性。本文研究了18个数据库,默认支持SerializabilITy(可串行性)的数据库只有三个(VoltDB、Ingres和Berkeley DB)。主要原因是难以在保持性能的同时支持可串行性。

最终一致性是特别弱的一种模式。
系统可返回任何数据,依然可以做到最终一致。
— Peter Bailis 博士(斯坦福)

另一方面,最终一致性几乎不提供一致性保证。下图说明了最终一致性所存在的问题。一个用户从银行账户上扣款100万美元,但是在账户修改得到复制之前,又有一个别的用户检查这个账户的余额。唯一的保证是,只要没有进一步的写入操作,系统最终会提供一致的结果。这又有什么用处呢?让人接受就更谈不上了。

Cassandra — 最终一致性
在这里插入图片描述

(待续)

猜你喜欢

转载自blog.csdn.net/weixin_43965756/article/details/88643531