NoSQL摊牌:MongoDB vs. Couchbase

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

文档数据库可能是它们的最受欢迎的NoSQL数据库变体。它们的巨大灵活性 - 模式可以增长或改变,以显着的缓解 - 使它们适用于各种应用,它们的物质与当前的编程实践相处得很好。反过来,Couchbase Server和MongoDB已成为开源文档数据库的两个更受欢迎的代表,尽管Couchbase Server是文档数据库级别的最近到达。

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

在此上下文中,“文档”单词并不意味着单词处理文件或PDF。相反,文档是定义为命名字段集合的数据结构。JSON(JavaScript对象符号)是目前最广泛使用的表示法,用于定义面向文档的数据库中的文档。JSON作为一个对象表示法的优势是,一旦您理解其语法 - 而JSON非常容易掌握 - 那么您拥有所有您需要定义到文档数据库模式的内容。也就是说,在文档数据库中,每个文档都携带自己的架构 - 与RDBM不同,给定表中的每一行必须具有相同的列。

[安德鲁C. Oliver回答了每个人的想法:我应该使用哪个怪异的数据库?|还有关于InfoWorld:NoSQL标准的时间现在|每天收到关键故事的摘要InfoWorld每日时事通讯。]

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

10Gen.本周释放Mongodb 2.4。MongoDB已成为Get-Go的文档数据库。此最新版本包含众多性能和可用性增强功能。

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

关键差异当然存在差异。首先,MongoDB的文件的处理更好。这在Mongo Shell中变得最明显,这提供了向MongoDB数据库提供管理和开发窗口的双重目的。数据库,集合和文档是shell中的一流实体。集合实际上是数据库对象的属性。

这并不是说Couchbase陷入了困境。您可以轻松地管理Couchbase集群——从Couchbase Management GUI中添加、删除和获取文档,MongoDB没有对应的GUI。实际上,如果您喜欢通过GUI控制台进行管理,那么Couchbase Server可以得1分。但是,如果您喜欢使用命令行,那么您将向MongoDB的方向倾斜。

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

此外,虽然通过JSON描述了COICBASE文件,但是BSON描述了MongoDB文件;后一表示包括更丰富的有用数据类型,例如32位和64位整数类型,日期类型和字节阵列。都支持地理空间数据和查询,但是在COUCBASE中的这种支持目前处于实验阶段,并且可能不会长时间留在那里。2.4版中的新功能,MongoDB的全文搜索功能也与数据库集成。COICBASE服务器提供了类似的功能,但需要插件Elasticsearch.工具。

COUCBASE SERVER和MONGODB都通过复制提供数据安全性,包括在群集中(如果通过副本文档的隐形创建保护免于丢失的实时文档)和群集(通过跨数据中心复制)。此外,两者都通过分片提供访问并行性。但是,在CouchBase和MongoDB支持哈希分配的情况下,MongoDB支持范围分片和“标签”分片。这是一个双刃剑。一方面,它在数据库管理员的指尖处施加了很大的灵活性。另一方面,它的误用可能导致群集不平衡。

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

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

通常,两种系统是在提供的特征方面的颈部和颈部,但这些特征的实现方式可能不同。此外,人们可能抓住另一个的优势肯定会随着开发的进入而转移。两者都提供数据库驱动程序和客户端框架,都是所有流行的编程语言,都是开源,都很容易安装,都享受大量的在线文档和活动社区支持。与这种良好的系统一样典型的,任何人都可以给予确定一个在另一个的最佳建议将是您安装它们并试用它们。

Couchbase将Couchbase Server推广为实时访问的解决方案,而不是数据仓库。也不适用于面向批处理的分析处理的CouchBase服务器 - 它被设计为作为运营数据存储。

虽然CouchBase服务器基于Apache CouchDB,但它不仅仅是CouchDB,upSdB具有增量修改。对于初学者,CouchBase是CouchDB和MEMCACHED的汞合金,分布式,内存,键/值存储系统。事实上,COUCBASE可以用作MEMCACHED的直接替代品。该系统提供了一个单独的端口,未修改,传统Memcached客户端可以使用,以及将其作为MEMCACHED服务器的性能提高的“智能SDK”和代理工具。

例如,您可以使用“厚客户端”部署模型,该模型将在客户端上放置不断更新的Memcached节点拓扑的知识。此速度响应,作为特定MEMCACHED对象的任何请求将从客户端直接发送到该对象的缓存节点。这种厚客户端的方法也在Couchbase系统的弹性方面发挥着重要作用,节点崩溃(稍后描述)。

Couchbase包括基于MEMCACHED的自身对象级缓存系统,但增强功能。例如,使用NRU(未使用的)算法,CouchBase跟踪其对象缓存中的工作集(最常访问给定节点上的文件)。所有I / O操作都在此内存中缓存。对缓存中的文档的更新最终持续到磁盘。另外,对于更新,在文档级别采用锁定 - 不在节点,数据库或分区级别(它将漏洞吞吐量与众多I / O等待),也不是字段级别(它将与系统置于系统跟踪锁定所需的内存和CPU周期)。

CouchBase通过使用“仅附加”持久性加速访问。这不仅使用数据,而且使用索引使用。更新的信息永远不会被覆盖;相反,它被附加到末尾正在修改任何数据结构。此外,通过压实回收删除的空间,可以调度在低活动期间进行的操作。仅附加存储速度更新并允许在写入时发生读取操作。

沙发缩放和复制为了促进水平缩放,CouchBase使用哈希分片,这确保数据均匀地分布在所有节点上。系统定义了1,024个分区(固定号码),一旦将文档的密钥散列到特定分区中,那就是文档生存的地方。在COICBASE服务器中,用于分片的键是文档ID,自动生成的唯一标识符并附加到每个文档。每个分区被分配给群集中的特定节点。如果添加或删除节点,系统通过将分区从一个节点迁移到另一个节点来重新平衡。

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

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

与文件本身一样,复制品存在于桶的基础上 - 作为Couchbase中的储物堆栈的主要单位。将文件放入桶中,并从索引和查询操作的角度,从一个桶中的文件隔离在其他桶中的文档。创建新存储桶时,将要求您指定为该桶创建的副本数(最多三个)。如果服务器崩溃,系统将检测到崩溃,找到雇用在崩溃的系统上的文档的副本,并将这些副本推广到活动状态。系统维护群集映射,该映射定义群集的拓扑,这是响应崩溃而更新的。

请注意,该方案依赖于厚客户端 - 体现在应用程序用于与COUCBASE通信的API库中 - 这与服务器节点恒定通信。这些厚客户端将获取更新的集群映射,然后响应更改的拓扑响应REROUTE请求。此外,厚客户端参与了数据库的负载平衡请求。为提供负载平衡的工作实际上是在智能客户端中分发。

Changes in topology are coordinated by an orchestrator, which is a server node elected to be the single arbiter of cluster configuration changes.所有拓扑更改都将发送到群集中的所有节点;even if the orchestrator node goes down, a new node can be elected to that position and system operation can continue uninterrupted.

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

Couchbase索引和查询Couchbase Server上的查询是通过“视图”(Couchbase索引术语)执行的。换句话说,当您创建索引时,将提供一个视图作为查询Couchbase数据的机制。视图是Couchbase 2.0的新功能,增量mapreduce引擎支持视图的实际创建。注意,在Couchbase Server 2.0之前,查询实际上并不存在。在此最新版本之前,数据库是一个键/值存储系统,它根本不理解多字段文档的概念。

123. 4.
第1页,共3页
工资调查:结果是