分布式nosql数据库

NoSQL的现代意义可以追溯到2009年,它指的是不基于关系表构建的数据库,这与SQL数据库不同。 通常, NoSQL数据库比传统SQL 数据库拥有更好的设计灵活性,水平可伸缩性和更高的可用性,有时以牺牲一致性为代价。

NoSQL数据库可以采用多种形式。 它们可以是云服务,也可以是本地安装。 它们可以支持一个或多个数据模型:键值,文档,列,图,有时甚至是关系模型,这是NoSQL有时被解析为“不仅仅是SQL”的原因之一。 它们还可以支持从强一致性到最终一致性的一系列一致性模型。

[SQL数据库正在获得NoSQL功能。 发现旧数据库可以做的10个新技巧 | 不要错过MySQL和MariaDB中的7个强大功能 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

键值是四种非关系数据模型中最基本的。 有时,其他数据库模型是在键值基础层之上实现的。

列数据库具有键,值和时间戳。 时间戳用于确定有效内容。 Cassandra是列数据库的突出示例。

[同样在InfoWorld上: 最佳分布式关系数据库 ]

文档存储区(例如MongoDB )具有查询语言或API,用于按内容查找文档。 它们还具有键查找,例如键值存储。

图形数据库(例如Neo4j )明确表示节点之间的连接。 这使它们在分析网络(计算机,人,地理或其他方面)时比关系数据库更有效 。 (我将在以后的文章中介绍图形数据库。)




[ 单击此处注册免费的三个小时的Kubernetes入门课程,该课程由Pluralsight和InfoWorld提供。 ]

一些数据库公开了多个数据模型。 诸如Azure Cosmos DB之类的工具将数据模型彼此隔离。 其他的,如FaunaDB,则合并了数据模型。

其中一些数据库支持全局分布的数据,并可能支持自动分片。 例如,Amazon DocumentDB在三个AWS可用区中复制您的数据的六个副本,并最多允许15个只读副本。 Amazon DynamoDB支持多个区域和全局表。

Azure Cosmos DB是全局分布和水平分区的。 YugaByte DB不仅是为星球级应用程序设计的,而且还支持多云集群,自动分片和重新平衡以及分布式ACID事务。

气钉

Aerospike是一个分布式的,可伸缩的,高度一致的,无模式的键值数据库,用于实时大数据操作。 数据由名称空间(相当于RDBMS数据库)和容器(相当于RDBMS列)构成。 每个bin支持某些数据类型:整数,字符串,浮点数,列表,地图,geojson,二进制对象或语言序列化的对象。

Aerospike将其主索引和二级索引保留在RAM中,并将其数据保留在RAM或SSD中。 您可以将Aerospike数据库备份到硬盘。 Aerospike提供社区版和企业版。

Aerospike的“无共享”架构旨在通过自动故障转移,复制和(在企业版中)跨数据中心同步来可靠地存储TB级数据。 该层线性缩放。

Aerospike使用基于Paxos的算法来确定哪些节点被视为群集的一部分。 每当添加或删除节点时,群集都会重新形成。 每个节点使用分布式哈希算法将主索引空间划分为数据切片并分配所有者。 Aerospike数据迁移模块平衡了群集中所有节点之间的数据分布。

Aerospike查询语言(AQL)是具有类似SQL语法的命令行实用程序。 您还可以使用其API从10多种编程语言中查询Aerospike。

阅读InfoWorld 对Aerospike评论

亚马逊文件数据库

Amazon DocumentDB是一种快速,可扩展,高度可用且受完全管理的文档数据库服务,支持MongoDB工作负载。 Amazon DocumentDB是从头开始设计的,可为您提供大规模操作关键任务的MongoDB工作负载时所需的性能,可伸缩性和可用性。

Amazon DocumentDB通过模拟MongoDB客户端期望来自MongoDB服务器的响应来实现Apache 2.0开源MongoDB 3.6 API,从而允许您将现有的MongoDB驱动程序和工具与DocumentDB一起使用。 Amazon云中的数据库服务还使用分布式的,容错的,自我修复的存储系统,该系统可以自动扩展到每个数据库集群最大64 TB。

在Amazon DocumentDB中,存储和计算是分离的,从而允许各自独立扩展。 无论数据大小如何,开发人员都可以在几分钟内增加多达15个低延迟读取副本,从而将读取容量提高到每秒数百万个请求。 Amazon DocumentDB旨在实现99.99%的可用性,并在三个AWS可用区中复制数据的六个副本。

亚马逊DynamoDB

Amazon DynamoDB是一个键值和文档数据库,可在任何规模上提供单位毫秒的性能。 它是一个完全托管的,多区域,多主数据库,具有针对Internet规模的应用程序的内置安全性,备份和还原以及内存缓存。 DynamoDB每天可以处理超过10万亿个请求,并支持每秒超过2000万个请求的高峰。

DynamoDB全局表跨多个AWS区域复制您的数据,以使您可以快速,本地访问全局分布式应用程序的数据。 对于需要具有微秒级延迟的更快访问的用例,DynamoDB Accelerator(DAX)提供了一个完全托管的内存中缓存。

DynamoDB会自动上下缩放表以调整容量并保持性能。 可用性和容错性是内置的。

Azure Cosmos数据库

Azure Cosmos DB是一种全局分布的,水平分区的多模型数据库服务。 它提供了四个数据模型(键值,列族,文档和图形)和五个可调的一致性级别(强,有界的陈旧性,会话,一致的前缀和最终的一致性)。

低于的一致性级别可提供更高的性能,但可以换来较弱的一致性。 大约70%的Cosmos DB租户选择会话一致性,这仅会产生每次读取一致性的成本的一半。

Cosmos DB提供了五种API集:SQL(方言),MongoDB兼容,Azure表兼容,图形(Gremlin)和Apache Cassandra兼容。 Cosmos DB会自动为所有数据建立索引,而无需您处理架构和索引管理。

Cosmos DB的设计目标包括弹性的全局可伸缩性,低成本的操作,较低的读写延迟,99.99%的可用性,可预测和可调的数据一致性,严格的财务支持的全面SLA,自动模式/索引管理和版本控制,对多个本地支持数据模型,以及用于访问数据的常用API。

在最低级别上,Cosmos DB具有在Azure Service Fabric之上实现的与架构无关的基于原子记录序列(ARS)的数据库引擎。 四个应用程序数据模型都投影到基于ARS的核心模型上。

如您所料,五个数据库API集并不会全部映射到每个数据模型。 SQL API以前称为DocumentDB API。 它适用于JSON文档数据库。 MongoDB API也适用于文档数据库。 请注意,MongoDB API和SQL API的有线协议有所不同,因此即使可以在两者之间迁移文档数据,也不能将一个帐户同时用于这两个API。 Gremlin API用于属性图数据库,Azure Table API用于键值表,而Cassandra API用于宽列(列族)数据库。

Microsoft将Cosmos DB用于内部应用程序已有一段时间了。 例如,Azure门户将Cosmos DB用作其全球事务存储,Xbox和Skype也是如此。

阅读我对Azure Cosmos DB的评论

Cassandra和DataStax

Apache Cassandra是一个高度可用的分布式数据存储,通过一致性来评估可用性和分区容忍度。 Cassandra的设计将Amazon Dynamo键值存储的分区和复制与Google Bigtable的日志结构化ColumnFamily数据模型结合在一起。 当您添加节点时,Cassandra会线性缩放。

在Cassandra中一致性并没有完全丧失; 这是对延迟的权衡。 用户可以指定每个读取和写入的一致性级别,范围从仅要求一个节点到要求群集仲裁,再到要求所有节点。 另一个中间选择是需要本地仲裁,这是一种在不等待远程节点更新的情况下在数据中心内保持一致性的方法。

DataStax为Cassandra增加了功能和性能。 在其他改进中,DataStax消除了运行修复脚本的需要,并消除了在手动修复失败时可能发生的群集中断。 自动防止DataStax Enterprise节点过载客户端或副本请求; 并使用了每核线程体系结构,将读写操作的吞吐量提高了两倍。

阅读我对DataStax Enterprise的评论

CouchDB

Apache CouchDB是一个开放源代码文档模型数据库,具有查询引擎,复制和冲突解决方案。 它使用RESTful HTTP API进行查询和更新。 CouchDB在Erlang中实现。

CouchDB文件布局和承诺系统具有所有ACID属性。 在磁盘上,CouchDB永远不会覆盖已提交的数据或关联的结构,从而确保数据库文件始终处于一致状态。 这是一种“仅崩溃”设计,其中CouchDB服务器不执行关闭过程; 相反,它只是终止了。

CouchDB读取操作使用多版本并发控制(MVCC)模型,其中每个客户端从读取操作的开始到结束都可以看到一致的数据库快照。 文档在B树中按其名称(DocID)和序列ID进行索引。

CouchDB是基于对等的分布式数据库系统。 它允许用户和服务器在断开连接时访问和更新相同的共享数据。 这些更改随后可以双向复制。

CouchDB允许在数据库中同时存在任何数量的冲突文档,每个数据库实例确定性地确定哪个文档是“赢家”,哪些是冲突。 当发生分布式编辑冲突时,每个数据库副本都会看到相同的胜出版本,并且每个都有解决冲突的机会。

动物数据库

FaunaDB是一个分布式的,高度一致的OLTP NoSQL数据库,它符合ACID并提供了多模型接口。 它具有主动-主动式体系结构,可以跨越云以及大陆。

FaunaDB通过单个查询支持文档,关系,图形和时间数据集。 除了自己的FQL查询语言外,该公司还宣布了对GraphQL的支持,以及将来对CQL和SQL的支持。

Google Cloud Bigtable

Cloud Bigtable是一个公开的,高度可扩展的(最多PB),面向列的NoSQL数据库,该服务使用与Google内部版本相同的代码,该内部版本是Google在2000年代初发明的,并于2006年发表了一篇论文。Bigtable是和是许多Google服务(包括Google搜索,Google Analytics(分析),Google Maps和Gmail)的基础数据库。

Bigtable论文启发了多个开源NoSQL数据库,包括Apache HBase,Apache Cassandra和Apache Accumulo。 Bigtable使用高度可伸缩的,稀疏填充的表结构,其中每个表都是已排序的键值映射。 Bigtable行描述单个实体,并由单个行键索引; 列包含每一行的各个值。 列族将相关列分组。 每个行/列的交集可以包含不同时间戳的多个像元,并且没有数据的像元不占用空间。

与其他NoSQL服务相比,Cloud Bigtable在高负载下仍可提供非常高的性能。 其中一部分来自固有的高效设计,另一部分来自快速,可扩展的基础架构。 除高性能外,Bigtable还具有非常低的延迟。

阅读我对Google Cloud Bigtable的评论。

MongoDB

MongoDB是高度可扩展的可操作文档数据库,可在开源版本和商业企业版本中使用,它可以在本地运行或作为托管云服务运行。 托管云服务称为MongoDB Atlas。

MongoDB无疑是NoSQL数据库中最受欢迎的数据库。 它的文档数据模型为开发人员提供了极大的灵活性,而其分布式体系结构则提供了很好的可伸缩性。 因此,通常选择MongoDB用于必须管理大量数据,得益于水平可伸缩性并处理不适合关系模型的数据结构的应用程序。

MongoDB是一个基于文档的存储,在其之上还具有一个基于图形的存储。 MongoDB实际上并不存储JSON:它存储BSON(二进制JSON),该扩展了JSON表示(字符串)以包括其他类型,例如int,long,date,浮点,decimal128和地理空间坐标。

翻译自: https://www.infoworld.com/article/3411564/the-best-distributed-nosql-databases.html

分布式nosql数据库