NoSQL - MongoDB与CouchDB

mpe*_*row 149 couchdb mongodb nosql

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

amr*_*mra 146

请参阅以下链接

更新:我发现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 - 写操作不会阻止读取
  • 可以使用以前版本的文档
  • 仅碰撞(可靠)设计
  • 需要不时压缩
  • 视图:嵌入式地图/缩小
  • 格式化视图:列表和节目
  • 可以进行服务器端文档验证
  • 认证可能
  • 通过'_changes'进行实时更新(!)
  • 附件处理

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

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


Riy*_*lla 120

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

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

如果你想利用多节点设置(可能在不同的数据中心或类似的东西)中使用真正伟大的主 - 主复制支持,CouchDB是非常棒的.

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

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

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

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

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

  • CouchDB将您的所有数据存储在b树中
  • 你不能用"SELECT*FROM user WHERE ..."之类的东西动态"查询"它.
  • 相反,您可以定义数据的离散"视图"......"这里是我所有用户的视图","这里是所有10岁以上用户的视图""这里是所有30岁以上用户的视图"等等.
  • 这些视图使用map-reduce方法定义,并定义为JavaScript函数.
  • 定义视图时,DB会开始通过它将所分配视图的DB的所有文档都提供给它,并将函数的结果记录为该数据的"索引".
  • 您可以对视图执行一些基本查询,例如询问特定键(ID)或ID范围,而不管map/reduce函数的作用如何.
  • 阅读这些幻灯片,这是我见过的Couch中map/reduce的最佳说明.

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

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

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

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

您可以使用Couch进行相同的操作,但基于HTTP的通信协议将比使用Mongo的原始二进制通信慢2-4倍,这是"速度超过一切!" 场景.

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

希望一切都有所帮助!