NoSQL - MongoDB与CouchDB

时间:2010-07-30 21:30:39

标签: mongodb couchdb nosql

对于NoSQL运动,我是一个完整的菜鸟。我听说过很多关于MongoDB和CouchDB的内容。我知道两者之间存在差异。你建议学习哪些作为进入NoSQL世界的第一步?

5 个答案:

答案 0 :(得分:146)

请参阅以下链接

更新:我找到了很棒的comparison of NoSQL数据库。

MongoDB(3.2)

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

最佳使用:如果您需要动态查询。如果您更喜欢定义索引,而不是map / reduce函数。如果你需要在大数据库上有良好的性能。如果您想要CouchDB,但是您的数据变化太大,请填满磁盘。

例如:对于大多数使用MySQL或PostgreSQL的事情,但是使用预定义的列确实会阻碍你。

CouchDB(1.2)

  • 撰写于:Erlang
  • 要点:数据库一致性,易用性
  • 许可证:Apache
  • 协议:HTTP / REST
  • 双向(!)复制,
  • 连续或临时,
  • 有冲突检测,
  • 因此,主 - 主复制。 (!)
  • MVCC - 写操作不会阻止读取
  • 以前的文档版本
  • 仅限碰撞(可靠)设计
  • 不时需要压缩
  • 观看次数:embedded map / reduce
  • 格式化视图:列表&显示
  • 可能的服务器端文档验证
  • 可能的身份验证
  • 通过'_changes'(!)
  • 进行实时更新
  • 附件处理

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

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

答案 1 :(得分:120)

如果您来自MySQL世界,MongoDB将会“感觉”更加自然,因为它具有类似查询的语言支持。

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

如果你想利用多节点设置(可能在不同的数据中心或类似的设备中)使用真正优秀的主 - 主复制支持,那么CouchDB非常棒。

MongoDB的复制(副本集)是主 - 从 - 从 - 奴 - *设置,您只能在副本集中写入主服务器并从其中任何一个读取。

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

但是,如果您正在尝试创建像CDN这样的全局服务,即使对所有节点进行读/写操作也需要保持所有全局节点同步,那么像CouchDB中的复制这样的事情对您来说将是一个巨大的好处。

虽然MongoDB具有类似查询的语言,您可以使用并且感觉非常直观,但CouchDB采用了“map-reduce”方法和视图概念。一开始感觉很奇怪,但是当你掌握它时,它真的开始变得直观了。

这是一个快速概述,所以它有一定道理:

  • CouchDB将您的所有数据存储在b-tree
  • 您无法使用“SELECT * FROM user WHERE ...”
  • 等动态“查询”它
  • 相反,您可以定义数据的离散“视图”...“这里是我所有用户的视图”,“这里是所有10岁以上用户的视图”,这里是所有早于用户的视图30“等等。
  • 这些视图使用map-reduce方法定义,并定义为JavaScript函数。
  • 当您定义视图时,数据库会开始将您分配视图的数据库的所有文档通过它提供,并将您的功能结果记录为该数据的“索引”。
  • 您可以对视图执行一些基本查询,例如询问特定键(ID)或ID范围,无论您的map / reduce函数是什么。
  • 阅读these slides,这是我见过的Couch中map / reduce的最佳说明。

所以这两个来源都使用JSON文档,但是CouchDB更多地遵循这个“每个服务器都是主服务器并且可以与世界同步”的方法,如果你需要它,这很棒,而MongoDB实际上是NoSQL世界的MySQL。

所以如果这听起来更像你需要/想要的东西,那就去吧。

Mongo的二进制协议与CouchDB的RESTful接口之间的细微差别都是细微的细节。

如果你想要原始速度和数据安全的地狱,你可以使Mongo运行得比CouchDB快,因为你可以告诉它操作内存不足并且不会将内容提交到磁盘,除了稀疏间隔

你可以对Couch做同样的事情,但它的基于HTTP的通信协议将比使用Mongo的原始二进制通信慢2-4倍,这是“速度超过一切!”场景。

请记住,如果服务器崩溃或磁盘故障破坏并将您的数据库遗忘,那么原始疯狂的疯狂速度是无用的,因此数据点并不像看起来那么惊人(除非您正在进行实时交易华尔街的系统,在这种情况下看Redis)。

希望一切都有所帮助!

答案 2 :(得分:5)

答案 3 :(得分:2)

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

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

我想向尚未尝试过的人推荐Couchbase,但不是基于报告(2.5.1)中显示的版本,因为它在今天的CB服务器上落后了近2个版本,2015年下半年接近4.0的释放。

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

关于Couchbase作为供应商/产品的另一部分是它是一种多用途类型的DB。它可以充当纯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

答案 4 :(得分:1)

关于NoSQL的关于NoSQL的Edureka视频是一些最好的视频教程。我已经开始使用MongoDb&看完这些视频后,卡珊德拉。

https://www.youtube.com/watch?v=gJFG04Sy6NY
https://www.youtube.com/watch?v=KSq6tMMXZ8s
https://www.youtube.com/watch?v=3z1KFA2qcSo

slideshare.net提供了很好的演示文稿

http://www.slideshare.net/quipo/nosql-databases-why-what-and-when?qid=3bb9f7f6-a53d-41b1-8403-cd6f181d0ca7&v=qf1&b=&from_search=1

http://www.slideshare.net/EdurekaIN/no-sql-databases-35591065?qid=f1b9c095-6d70-4d0a-91da-1df664c4f389&v=qf1&b=&from_search=3 
幻灯片中的Edureka演示文稿是youtube中视频的扩展。您可以将此演示文稿视为YouTube视频的摘要。