MongoDB与CouchDB

当谈到NoSQL运动时,我是一个完整的noob。 我听说过很多关于MongoDB和CouchDB的信息。 我知道两者之间有区别。 你推荐学习哪些技术作为NoSQL世界的第一步?


请参阅以下链接

  • CouchDB与MongoDB
  • MongoDB,CouchDB,MySQL比较网格
  • MongoDB或CouchDB - 适合生产?
  • 更新 :我发现了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'(!)实时更新
  • 附件处理
  • 因此,CouchApps(独立的js应用程序)
  • 最佳使用 :用于累积,偶尔会更改数据,在其上运行预定义的查询。 版本控制很重要。

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


    如果你来自MySQL世界,MongoDB会因为其类似查询的语言支持而“感觉”更加自然。

    我认为这是对许多人来说如此友善的原因。

    如果您想要通过多节点安装程序(可能位于不同的数据中心或类似位置)利用卓越的主 - 主复制支持,CouchDB会非常棒。

    MongoDB的复制(副本集)是一个主 - 从 - 从 - 从 - 设置,您只能在副本集中写入主节点并从其中读取。

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

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

    尽管MongoDB具有可以使用的类似查询的语言,并且感觉非常直观,但CouchDB采用“map-reduce”方法和这些视图的概念。 起初感觉很奇怪,但是当你掌握它的时候,它真的开始感觉直观。

    这是一个快速的概述,所以它有一定的意义:

  • CouchDB将所有数据存储在B树中
  • 你不能用“SELECT * FROM user WHERE ...”来动态“查询”它。
  • 相反,您可以定义数据的离散“视图”......“这里是我所有用户的视图”,“这里是所有超过10岁的用户的视图”,“这里是所有年龄大于30岁的用户的视图”,以及等等。
  • 这些视图是使用map-reduce方法定义的,并被定义为JavaScript函数。
  • 当你定义一个视图时,数据库开始将你分配给视图的数据库的所有文档通过它记录下来,并记录你的函数的结果作为该数据的“索引”。
  • 您可以对视图执行一些基本查询,例如询问特定的键(ID)或ID范围,而不考虑您的地图/缩减功能的作用。
  • 通读这些幻灯片,这是我见过的沙发中的地图/缩小的最佳说明。
  • 因此,这两个源都使用JSON文档,但是CouchDB会更多地遵循这个“每个服务器都是主服务器并且可以与世界同步”的方法,如果您需要它,这是非常棒的,而MongoDB实际上是NoSQL世界的MySQL。

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

    像Mongo的二进制协议和CouchDB的RESTful接口的细微差别都是次要细节。

    如果您希望原始速度和数据的安全性,您可以让Mongo运行速度比CouchDB更快,因为您可以告诉它运行内存不足,并且除了稀疏间隔之外不向磁盘提交任何内容。

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

    请记住,如果服务器崩溃或磁盘故障损坏并将您的数据库遗忘,这样数据点并不像看起来那么神奇(除非您在Wall上执行实时交易系统街,在这种情况下看Redis)。

    希望所有的帮助!


    看看这些链接:

  • MongoDB与CouchDB(来自MongoDB端)

  • CouchDB与MongoDB:试图进行更多信息比较

  • CouchDB与MongoDB基准测试(性能对比)

  • 链接地址: http://www.djcxy.com/p/26863.html

    上一篇: MongoDB vs CouchDB

    下一篇: SQL (MySQL) vs NoSQL (CouchDB)