NoSQL摊牌:MongoDB vs. Couchbase

MongoDB为Couchbase Server提供了更丰富的查询和索引选项,以及卓越的易用性

文档数据库可能是他们所有的最流行的NoSQL数据库变种。具有很大的灵活性 - 模式可以种植或显着缓解改变 - 使它们适用于广泛的应用,并在好自己的对象属性符合当今的编程实践。反过来,Couchbase服务器和MongoDB已成为两个开源文档数据库的比较流行的代表,虽然Couchbase Server是文档数据库的行列最近的到来。

[还:MySQL 5.6解决了NoSQL竞争对手

在这里,“文档”一词并不是指文字处理文件或PDF。相反,文档是定义为指定字段集合的数据结构。JSON (JavaScript对象表示法)是目前在面向文档的数据库中定义文档最广泛使用的表示法。JSON作为对象表示法的优势在于,一旦理解了它的语法(JSON非常容易掌握),就可以定义文档数据库的模式了。这是因为,在文档数据库中,每个文档都有自己的模式——不像RDBMS,在RDBMS中,给定表中的每一行都必须有相同的列。

[安德鲁·c·奥利弗回答了每个人心中的问题:我应该使用哪种吓坏数据库?|还有关于InfoWorld:对于NoSQL的标准,现在正是时候|要对每天的关键故事进行总结信息世界每日简报。]

Couchbase服务器和MongoDB的最新版本是新来的。在2012年12月,沙发派发布了Couchbase Server 2.0,该版本使Couchbase Server成为一个成熟的文档数据库。在该版本发布之前,用户可以将JSON数据存储到Couchbase中,但数据库将JSON数据写成blob。Couchbase实际上是一个键/值数据库。

10 gen就在本周发布的MongoDB 2.4。MongoDB中已经从一开始就是一个数据库文件。这个最新版本融入了许多性能和可用性增强功能。

这两个数据库都被设计为在普通硬件上运行,并通过分片进行水平扩展(在Couchbase中,分片的大致等效称为分区)。这两个数据库都使用JSON作为文档定义符号,但在MongoDB中,这种符号是BSON(二进制JSON),它是JSON的一个二进制编码超集,定义了JSON中没有的有用数据类型。虽然这两个数据库都使用JavaScript作为主要的数据操作语言,但它们都为所有最流行的编程语言提供了api,允许应用程序直接访问数据库操作。

关键的不同点当然存在差异。首先,MongoDB对文档的处理得到了更好的开发。这一点在mongo shell中表现得最为明显,它具有为MongoDB数据库提供管理和开发窗口的双重目的。数据库、集合和文档是shell中的一级实体。集合实际上是数据库对象上的属性。

这并不是说Couchbase举步维艰。您可以从Couchbase Management GUI轻松地管理您的Couchbase集群——添加、删除和获取文档,MongoDB没有对应的GUI。实际上,如果您更喜欢通过GUI控制台进行管理,那么Couchbase Server得一分。然而,如果你喜欢在命令行中生活,你将被提示在MongoDB的方向。

用于收集统计数据的基于云的MongoDB监控服务(MMS)并不是一个成熟的数据库管理接口。但是MongoDB的环境在mongo shell中抽象的数据对象和它们所建模的数据库实体之间提供了一个近乎无缝的连接。当您发现MongoDB允许您使用单个函数调用在特定的文档字段上创建索引时,这一点尤其明显,而Couchbase中的索引必须通过更复杂的mapreduce操作创建。

另外,Couchbase文档使用JSON描述,MongoDB文档使用BSON描述;后一种表示法包括更丰富的有用数据类型,如32位和64位整数类型、日期类型和字节数组。两者都支持地理空间数据和查询,但Couchbase中的这种支持目前还处于实验阶段,可能不会停留太久。在2.4新版中,MongoDB的全文搜索功能也集成到数据库中。Couchbase Server中也提供了类似的功能,但是需要一个插件elasticsearch工具。

无论Couchbase Server和MongoDB中通过复制来提供数据安全性,既集群和外部集群(其中活文档是由看不见的创作副本文件免受损失)(通过跨数据中心复制)之内。此外,通过两个分片提供访问并行。然而,在Couchbase和MongoDB支持哈希分片两种,MongoDB的支持范围,并分片“标签”分片。这是一把双刃剑。在一方面,它提出的具有很大的灵活性,在数据库管理员的指尖。在另一方面,它的滥用可能会导致不均衡的集群。

Mapreduce是Couchbase和MongoDB中都使用的关键工具,但用途不同。在MongoDB中,mapreduce是通用数据处理、信息聚合和分析的手段。在Couchbase中,它是为了查询数据库中的数据而创建索引的方法。(我们怀疑,这与较差的文档处理一样,是Couchbase最近才演变成文档数据库的结果。)因此,在MongoDB中更容易创建索引和执行临时查询。

Couchbase完全结合了Memcached,在MongoDB中没有对应的组件,而Memcached作为通用对象缓存系统是一个强大的辅助工具,适用于高吞吐量、数据密集型Internet和内部网应用程序。如果应用程序需要带数据库的Memcache服务器,那么只需查看Couchbase即可。

在一般情况下,这两个系统在提供的功能方面脖子和颈部,虽然这些功能实现方式可能会有所不同。此外,优点是一个可以容纳超过对方肯定会来来去去,开发收益。两者都提供了所有流行的编程语言的数据库驱动程序和客户端框架,两者都是开源的,既易于安装,并且都享有充足的在线文档和活跃的社区支持。由于是典型的这种旗鼓相当的系统,最好的建议任何人都可以给出确定一个比其他将是你安装他们两个并尝试出来。

Couchbase促进Couchbase Server作为实时访问,而不是数据仓库解决方案。也不是Couchbase服务器适合于面向批处理的分析处理 - 它被设计为操作数据存储。

虽然Couchbase Server是基于Apache CouchDB的,但它不仅仅是带有增量修改的CouchDB。对于初学者来说,Couchbase是CouchDB和Memcached(分布式的、内存中的键/值存储系统)的混合体。实际上,Couchbase可以用来直接替代Memcached。系统提供了一个单独的端口,未修改的遗留Memcached客户端可以使用,以及“智能SDK”和代理工具,以提高其作为Memcached服务器的性能。

例如,您可以使用“胖客户端”部署模型,它将不断更新的Memcached节点拓扑知识放在客户端层。这将加快响应速度,因为对特定Memcached对象的任何请求都将从客户端直接发送到该对象的缓存节点。这种胖客户端方法在Couchbase系统对节点崩溃的弹性(稍后将介绍)中也起着重要作用。

Couchbase包括基于Memcached的自己的对象级缓存系统,虽然有增强。例如,Couchbase轨道工作组利用自然失业率在其对象缓存(文件最常给定节点上访问)(最近没有使用)算法。所有的I / O操作作用于该内存缓存。更新缓存中的文件最终被保存在磁盘上。另外,对于更新,锁定采用在文档级别 - 而不是在节点,数据库或分区等级(这将妨碍吞吐量与众多I / O等待),也不在现场级(这将缠结的系统与存储器和CPU周期需要跟踪的锁)。

Couchbase通过使用“追加只有”持续加速访问。这是用来不仅与数据,但指标为好。更新的信息永远不会被覆写;相反,它被附加到任何数据结构正被修改的结束。此外,删除的空间被压缩回收,可安排在活动少的时间发生的操作。追加专用的储存速度更新,并允许读操作,同时写入正在发生发生。

Couchbase缩放和复制为了方便水平缩放,Couchbase使用散列分片,从而确保数据跨越所有节点均匀地分布。系统定义1024个分区(固定数目),并且一旦一个文件的密钥被散列到特定分区,这是在原稿的生活。在Couchbase服务器中,用于分片的关键是文档ID,自动生成并附着于每个文档的唯一标识符。每个分区被分配给集群中的特定节点。如果节点被添加或移除时,系统通过迁移分区从一个节点到另一个重新平衡本身。

Couchbase系统中不存在单点故障。Couchbase集群中的所有分区服务器都是相等的,每个分区服务器只负责分配给它的那部分数据。集群中的每个服务器运行两个主要进程:数据管理器和集群管理器。数据管理器处理分区中的实际数据,而集群管理器主要处理内部节点操作。

通过文档复制增强了系统的弹性。集群管理器进程协调复制数据与远程节点的通信,数据管理器进程负责管理集群分配给本地节点的任何复制数据。自然,复制分区分布在整个集群中,因此分区的复制副本永远不会与活动分区位于同一物理服务器上。

就像文档本身一样,复制也以桶为基础存在——桶是Couchbase中主要的容器单位。文档放在桶中,从索引和查询操作的角度来看,一个桶中的文档与其他桶中的文档是隔离的。当您创建一个新的桶时,将要求您指定要为该桶创建的副本数量(最多为3个)。如果服务器崩溃,系统将检测崩溃,定位崩溃系统上存在的文档副本,并将这些副本提升到活动状态。系统维护一个集群映射,该映射定义集群的拓扑,并在崩溃时进行更新。

请注意,该模式依赖于与服务器节点持续通信的胖客户端,胖客户端包含在应用程序用于与Couchbase通信的API库中。这些胖客户机将获取更新后的集群映射,然后根据更改的拓扑重新路由请求。此外,胖客户机参与对数据库的负载平衡请求。提供负载平衡的工作实际上分布在智能客户机中。

在拓扑变化是由一个协调器,这是当选为的群集配置更改单仲裁器的服务器节点协调。所有的拓扑变化被发送到集群中的所有节点;即使协调器节点出现故障时,一个新的节点,可以选到那个位置和系统操作可以继续不间断。

Couchbase支持跨数据中心复制(XDCR),它提供将一个Couchbase集群的数据库内容实时复制到地理上远程的集群。请注意,XDCR与集群内复制同时进行操作(将活动文档复制到其他集群成员上的非活动副本),XDCR安排中的所有系统都不可见地彼此同步。但是,Couchbase并不为XDCR安排提供自动故障转移,而是依赖于一些技术,比如使用负载平衡机制在网络层重路由流量,在这种情况下,XDCR组将在主-主配置中设置。

Couchbase索引和查询Couchbase Server上的查询是通过“视图”执行的,“视图”是Couchbase用于索引的术语。换句话说,在创建索引时,会提供一个视图,作为查询Couchbase数据的机制。视图对于Couchbase 2.0来说是新的,增量mapreduce引擎为实际创建视图提供了动力。注意,在Couchbase Server 2.0之前,查询实际上并不存在。直到这个最新版本,数据库还是一个键/值存储系统,它根本不理解多字段文档的概念。

123. 第1页
第1页共3页
工资调查:结果在