CouchDB和Couchbase有什么区别?

304

62
对这些名称感到困惑吗?我也是,所以我开始将 这个最佳答案 中的命名信息重新混合,制作成一个 命名历史可视化图,这有助于理解任何这些答案。 - Jeroen
@Jeroen 那是一个很棒的可视化。应该将其编辑到顶部答案中吗? - shoover
@shoover 谢谢,很高兴能帮到你。我无法完全判断它是否足够准确,但如果 rsp(那个答案的主要作者)/社区认为它值得,则可以随意在 SO 许可下包含它。 - Jeroen
3个回答

627
我认为需要指出CouchDB和Couchbase Server之间的一些本质差异。我不会写关于从CouchDB转换到Couchbase Server的优点,因为这些优点几乎无处不在(请参见Damien Katz的The Future of CouchDB或Couchbase的Couchbase vs. Apache CouchDB)。相反,我将尝试列举CouchDB中您在Couchbase Server中找不到的功能。所有与CouchDB和Couchbase相关的名称可能会令人困惑,因此我更新了这个答案,首先对最重要的名称进行简要解释。有CouchDB、CouchIO、CouchOne、Couchbase、Couchbase Server、Couchbase Mobile、Couchbase Lite、CouchApps、BigCouch、Touchbase、Membase、Memcached、MemcacheDB……所有这些都不同,但又以一种名字无法明显表达的方式相关联。
首先,有一个由前IBM开发人员Damien Katz创建的数据库,叫做CouchDB。它在成为Apache项目之后正式更名为Apache CouchDB。
成立了一家名为CouchIO的公司来处理Apache CouchDB,并将其后改名为CouchOne(“其名称”指的是公司名称-而不是数据库名称)。
CouchOne(以前是CouchIO)与Membase(以前是NorthScale)合并,组成了一个名为Couchbase的新公司。Membase(公司)开发了Membase(同名产品)。 Membase由Memcached项目的几位领导者创建,并使用了Memcached协议。在CouchOne和Membase合并后,Couchbase继续开发Membase软件,并将其名称改为Couchbase Server。
今天,我认为大多数人认为Couchbase Server是CouchDB的新版本,但实际上它是Membase的新版本。它仍然使用Memcached协议而不是CouchDB的RESTful API。同时,CouchDB作为Apache项目仍然被积极维护和增强。
现在来谈谈相关的差异:

许可证

Couchbase Server并非完全开源/免费软件。它有两个版本:社区版(免费但没有最新的错误修复)和企业版(有使用限制、保密条款、Couchbase公司进行审核,“将在执照持有者的设施内在常规工作时间进行”以及其他专有软件的典型条款,许多人可能无法接受)。

CouchDB是Apache软件基金会的开源/自由软件(没有任何附加条件),并且根据Apache许可证2.0版发布(DFSG兼容,FSF批准,OSI批准,GPL兼容,非版权,商业友好)。

哲学

我从未直接指出过,但这可能实际上是这两个数据库之间最重要的区别,因为它深刻关乎分布式计算模型的基础哲学,而不仅仅是某些特性、API或许可证。CouchDB和Couchbase Server在构建分布式系统和数据库的哲学上有很大区别。

根据CAP定理,一个分布式数据库同时提供一致性、可用性和分区容错性是不可能的。

CouchDB 是一个 AP 类型系统(提供可用性分区容错性)。

Couchbase Server 要么是一个CP类型系统(根据 维基百科),要么是一个CA类型系统(根据 Couchbase技术更新)- 哪种是正确的?请留言评论。

特点

以下是我发现的CouchDB功能列表,这些功能不受Couchbase Server支持:
  • 没有RESTful API(仅限于视图,不适用于CRUD操作)
  • 没有_changes feed
  • 没有peer-to-peer replication
  • 没有CouchApps
  • 没有Futon(有一个不同的管理界面可用)
  • 没有document IDs
  • 没有数据库概念(只有存储桶)
  • 没有CouchDB数据库和Couchbase Server之间的复制
  • 没有显式附件(您必须将其他文件存储为新的键/值对)
  • 没有针对所有内容的HTTP API(您需要使用Couchbase Server SDK或Couchbase Develop中的实验性客户端库,因此不能使用curlwget进行实验)
  • 没有CouchDB API(它使用Memcached API)
  • 无法从浏览器执行所有操作(您必须编写服务器端应用程序)
  • 不可能进行Web应用程序的两层架构(您必须编写服务器端应用程序以位于浏览器和数据库之间,就像关系数据库一样)
  • 没有eventual consistency
  • 不完全是open-source/free software
  • 不是CouchDB的即插即用替代品(似乎是Memcached的即插即用替代品)

这些CouchDB的功能对你是否重要取决于主观因素,所以它们的缺失是否是一个劣势严格来说是主观的,但我认为,从CouchDB切换到Couchbase Server或不应该基于这些差异以及你在当前CouchDB部署中对这些功能的依赖。

例如,如果你在看了Mikeal Rogers的The CouchDB changes feed NodeCamp演讲或J. Chris Anderson的一些很棒的CouchApp教程后对CouchDB产生了兴趣,那么你必须意识到,如果你想切换到Couchbase Server,那么你将不得不忘掉他们所谈论的几乎所有内容。

由此可以看出,我认为Couchbase Server看起来更像是Memcached和Membase的进化版本(而不是CouchDB的进化版本),因此如果您目前使用的是Memchached或Membase,则它看起来是一个很好的产品。如果您只是以最基本的方式使用CouchDB,那么您可以考虑使用Couchbase Server来完成相同的事情,也许它会表现得更好(如果您不介意许可证限制)。但是,如果您实际上正在使用CouchDB中独特的任何功能(例如更改提要、CouchApps、双层架构、点对点复制等),那么您可以忘记这些功能或继续使用CouchDB。 无论如何,在考虑切换之前,请务必阅读并理解迁移到Couchbase for CouchDB Users教程。
人们常常会产生错误的印象(可能是在阅读了像 "什么是CouchDB的未来?它是Couchbase。" 等内容之后),认为CouchDB已经被Couchbase服务器所淘汰,或者它是Couchbase的一个旧版遗留物。同时,CouchDB是一个积极维护的开源项目,Couchbase服务器是一个完全独立的项目(它是一个较新的项目,但并不是CouchDB的新版本 - 它们甚至不兼容),而且即使是用于创建CouchApps的新工具仍在不断开发中(例如看看 Kanso 项目),因此CouchDB还有很长的路要走。
我希望这能澄清您的困惑。如果我在任何地方说错了,请纠正我。
更新:
Couchbase Server实际上是Membase Server的新名称(Membase Server在1.8版本左右更名为Couchbase Server)。请参见Couchbase 2011 Year in Review
“不幸的是,我们让很多潜在用户感到困惑。除了Membase Server和我们的新移动产品之外,我们还提供了Couchbase Single Server,它是Apache CouchDB的打包“分发版”。此外,我们开始发布Couchbase Server 2.0的开发者预览版,将CouchDB技术整合到Membase Server中,但该产品与Couchbase Single Server(或CouchDB)不兼容。[...]下一个版本的Membase Server将在一月份更名为Couchbase Server 1.8——这只是缓解了“名称”混淆的微小步骤。正如从一开始就计划的那样,Couchbase Server 2.0版本(目前处于开发者预览版3)将添加索引和查询功能。虽然Couchbase Server 2.0将整合来自CouchDB项目的重要技术,但它不会向上兼容CouchDB,也不应被视为“CouchDB的版本” [强调添加]。”
另请参见:

79
太棒了。很高兴看到有些东西实际上解释了这方面的事情(所有现有的比较,如您所列,都有明显的Couchbase偏见)。 - Stuart P. Bentley
7
事实上,不使用CouchDB API、不符合RESTful标准和不使用HTTP并不完全相同。例如,Riak虽然不使用CouchDB API,但仍然使用RESTful API。此外,它可能不使用REST,但仍使用HTTP(例如SOAP或其他Web服务)。在这里,我想澄清的是,Couchbase服务器不仅不使用CouchDB API,而且其API不符合RESTful标准,甚至根本不使用HTTP。 - rsp
25
我认为这就是答案。谢谢。 - skift
11
关于您的“CP vs CA”问题:简而言之,除非您谈论单个机器,否则不可能拥有“CA”系统。 在网络中总是存在分区(http://aphyr.com/posts/288-the-network-is-reliable),因此在面对分区时,分布式系统将在任何给定时间做出权衡,以实现可用性或一致性(但永远不能两者兼备)。 因此,根据归纳法,Couchbase是CP型的。 实际上,这源于他们在vBuckets背后的复制策略,这要么是a)1:n主/从或b)1..n基于链式的,与Dynamo(AP)模型相比。 - Greg Burd
9
截至今日,这篇文章有一个非常重要的补充:Couchbase SyncGateway。这是一个将CouchDB复制功能与Couchbase在API兼容级别上结合起来的部分,使得CouchDB可以通过SyncGateway与Couchbase进行复制。从Couchbase Lite的角度来看,这是个巨大的进展,除了一些特殊情况外,它可以无缝地从与CouchDB同步切换到与SyncGateway同步。 - Leonid Usov
显示剩余7条评论

72

它们是不同但相似的软件。我将顶级答案的内容混合成一张图片,可能有助于澄清“差异”以及共同点:

上面链接的另一个答案是这张图片的详细描述

来自Matt Ingenthron的评论补充了这个内容:

为了增加一些上下文/修正:NorthScale的创始人是Steve Yen和Dustin Sallings。我在成立后不久加入了他们。此外,Damien并没有后来加入Couchbase,他之前是CouchIO/Couch One的一部分,在这里引用一个有趣的历史来源:https://youtube.com/watch?v=aZ_JOnU8tkI


7
这是一张非常有用的信息图表! - Zach Smith
6
为了补充一些背景和更正错误:NorthScale的创始人是Steve Yen和Dustin Sallings。我在公司成立后不久加入了他们。此外,Damien并没有后来加入Couchbase,他在合并之前就是CouchIO/Couch One的一部分。引用一个有趣的历史来源: https://www.youtube.com/watch?v=aZ_JOnU8tkI - Matt Ingenthron
1
@MattIngenthron 谢谢你的更新。我已将你的评论融入答案,如果有时间的话,我可能会相应地调整流程图。 - Jeroen

3

我认为CouchBase似乎被视为CouchDB的“企业”替代品,这在某种程度上似乎是正确的。 除了无法将文件附加到记录(文档)和与CouchDB相比缺少“即用型”REST端点之外,CouchBase具有类似于SQL的语言,即N1QL(有时发音为Nickel,在Couchbase 7.0中重命名为SQL ++)。 这是我不太喜欢/推荐使用“NoSQL”这个术语的原因之一。我个人更喜欢术语“非关系型”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接