NoSQL-MongoDB与CouchDB [关闭]


154

对于NoSQL运动,我是一个完全的菜鸟。我听说过很多有关MongoDB和CouchDB的信息。我知道两者之间存在差异。在进入NoSQL的第一步时,您建议学习哪些内容?


作为第一步,mongoDB更好,因为它更易于学习,但存在一些问题。使用特定的noSQL数据库不是最佳选择,这取决于您必须执行的操作。检出面向文档,键值,图形,列的文档。
克里斯(Chris)

Answers:


148

见以下链接

更新:我发现NoSQL数据库有很大的比较

MongoDB(3.2)

  • 撰写:C ++
  • 要点:JSON文档存储
  • 许可证:AGPL(驱动程序:Apache)
  • 协议:自定义,二进制(BSON)
  • 主/从复制(具有副本集的自动故障转移)
  • 内置分片
  • 查询是JavaScript表达式
  • 在服务器端运行任意JavaScript函数
  • 具有地理空间索引和查询
  • 具有不同性能特征的多个存储引擎
  • 性能胜过功能
  • 文件验证
  • 日志记录
  • 强大的聚合框架
  • 在32位系统上,限于〜2.5Gb
  • 整合文字搜寻
  • GridFS存储大数据+元数据(实际上不是FS)
  • 数据中心意识

最佳使用:如果您需要动态查询。如果您想定义索引,则不希望映射/归约函数。如果您需要大型DB上的良好性能。如果您想要CouchDB,但是您的数据变化太大,则填满磁盘。

例如:对于大多数使用MySQL或PostgreSQL进行的操作,但是具有预定义的列确实会使您退缩。

CouchDB(1.2)

  • 书面:Erlang
  • 要点:数据库一致性,易用性
  • 许可证:Apache
  • 通讯协定:HTTP / REST
  • 双向(!)复制,
  • 连续的或临时的
  • 使用冲突检测,
  • 因此,主-主复制。(!)
  • MVCC-写入操作不会阻止读取
  • 可以使用先前版本的文档
  • 仅崩溃(可靠)的设计
  • 需要不时压实
  • 视图:嵌入式地图/缩小
  • 格式化视图:列表和显示
  • 可以进行服务器端文档验证
  • 可以认证
  • 通过“ _changes”实时更新(!)
  • 附件处理

最佳使用:用于累积,偶尔更改的数据,并在这些数据上运行预定义的查询。版本控制很重要的地方。

例如:CRM,CMS系统。主-主复制是一项特别有趣的功能,可以轻松进行多站点部署。


1
对于任何与MongoDB的服务器许可证是AGPL有关的人,看看mongodb的许可证政策可能会有所帮助。
Patrick

@amra因此,您的意思是如果我保存数据并仅读取它,那么使用beddb是最佳选择?
verystrongjoe15年

@verystrongjoe这取决于数据和查询的复杂性。您通常无法说出哪一个是最好的。
amra 2015年

@amra好。但是..如果它将累积数据并选择数据,而我必须在mongo和沙发之间进行选择,哪个更好?
verystrongjoe15年

自2012年起,“不再推荐” CouchApps
Tim Sylvester

123

如果您来自MySQL世界,则MongoDB会因为对查询的支持而感到“自然”。

我认为这就是它对很多人如此友好的原因。

如果您想通过多节点设置(可能在不同的数据中心或类似的地方)使用真正出色的主-主复制支持,则CouchDB很棒。

MongoDB的复制(副本集)是master-slave-slave-slave- *设置,您只能在副本集中写入主数据库并从其中的任何一个读取。

对于标准站点配置,这很好。它很好地映射到MySQL的用法。

但是,如果您试图创建一个像CDN这样的全局服务,即使对所有全局节点进行读/写操作,也需要使所有全局节点保持同步,那么诸如CouchDB中的复制之类的东西对您来说将是一个巨大的福音。

尽管MongoDB拥有您可以使用且感觉非常直观的类查询语言,但CouchDB采取了“映射减少”方法以及这种视图概念。刚开始时感觉很奇怪,但是当您掌握它时,它真的开始变得直观了。

这是一个快速概述,因此很有意义:

  • CouchDB将所有数据存储在b树中
  • 您无法使用“ SELECT * FROM user WHERE ...”之类的内容动态地“查询”它。
  • 而是,为数据定义离散的“视图” ...“这是我所有用户的视图”,“这里是所有10岁以上的用户的视图”“这里是所有30岁以上的用户的视图”和以此类推。
  • 这些视图使用map-reduce方法定义,并定义为JavaScript函数。
  • 定义视图时,数据库开始通过该视图馈送分配给该视图的DB的所有文档,并将功能结果记录为该数据的“索引”。
  • 您可以在视图上执行一些基本查询,例如询问特定的键(ID)或ID范围,无论您的map / reduce函数做什么。
  • 阅读这些幻灯片,这是我所见过的Couch中关于地图/缩小的最佳说明。

因此,这两个资源都使用JSON文档,但是CouchDB遵循这种“每个服务器都是主服务器,并且可以与世界同步”的方法,如果您需要的话,这是很棒的,而MongoDB确实是NoSQL世界的MySQL。

因此,如果这听起来像您需要/想要的,那就去做吧。

诸如Mongo的二进制协议与CouchDB的RESTful接口之类的微小差异都是次要细节。

如果您想要原始速度并确保数据安全,可以使Mongo的运行速度比CouchDB快,因为它可以告诉它在内存不足的情况下运行,并且除了稀疏间隔外不将其提交到磁盘。

您可以使用Couch进行相同的操作,但是基于HTTP的通信协议将比与Mongo进行原始二进制通信的速度慢2到4倍,而这种“速度要快!” 场景。

请记住,如果服务器崩溃或磁盘故障损坏并将DB丢掉,原始的疯狂疯狂速度将毫无用处,因此数据点不会像看起来那样令人惊奇(除非您在Wall上进行实时交易系统街,在这种情况下,请查看Redis)。

希望所有的帮助!


“ MongoDB确实是NoSQL世界的MySQL”-我不知道情况是否有所变化,但2014年的这篇文章不同意:sarahmei.com/blog/2013/11/11/why-you-should-never-use- mongodb
OnurYıldırım2016年

虽然我从本质上说我认为该评论仍然有效,但是您是正确的,MUCH在过去的五年中已经发生了变化,我的评论应该很容易被驳回。
里亚德·卡拉


1

现在,市场上NoSQL数据库的数量比以往任何时候都要多。如果您正在寻找一个基于支持,可扩展性,管理和成本的企业应用程序数据库,我建议甚至看看Gartner Magic Quadrant。

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

我想向尚未使用Couchbase的人推荐Couchbase,但不要基于报告(2.5.1)中显示的版本,因为它比CB Server今天的版本落后了将近2个修订版,即将在2H15发行4.0版。

http://www.couchbase.com/coming-in-couchbase-server-4-0

关于Couchbase作为供应商/产品的另一部分是,它是一种多用途类型的数据库。它可以充当纯K / V存储,具有多维缩放的面向文档的数据库,Memcached,具有持久性的备用缓存,并支持具有自动连接的ANSI 92兼容SQL,通过按一下按钮复制到DR群集以及甚至在生态系统中内置了一个移动组件。

如果没有其他问题,那么值得一试最新的基准测试:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.