NoSQL-MongoDB 对 CouchDB

说到 NoSQL 运动,我就是个彻头彻尾的菜鸟。我听说过很多 MongoDB 和 CouchDB 的事情。我知道这两者之间有区别。作为进入 NoSQL 世界的第一步,您推荐学习哪些内容?

66578 次浏览

请参阅以下链接

更新 : 我发现了很棒的 NoSQL 的比较数据库。

MongoDB (3.2)

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

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

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

CouchDB (1.2)

  • 写于: Erlang
  • 要点: 数据库一致性,易于使用
  • 执照: 阿帕奇
  • 协议: HTTP/REST
  • 双向(!)复制,
  • 连续的或临时的,
  • 通过冲突检测,
  • 因此,主-主复制。(!)
  • MVCC-写操作不阻止读操作
  • 可以获得以前的文档版本
  • 纯碰撞(可靠)设计
  • 需要不时地压实
  • 视图: 嵌入式 map/reduce
  • 格式化视图: 列表和显示
  • 可以进行服务器端文档验证
  • 可以进行身份验证
  • 通过’_ changes’(!)实时更新
  • 附件处理

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

例如 : CRM,CMS 系统。

如果您来自 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 函数执行什么操作。
  • 通读 这些幻灯片,这是我在 Couch 中看到的对 map/reduce 最好的澄清。

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

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

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

如果你想要原始速度,让数据安全见鬼去吧,你可以用 可以让 Mongo 比 CouchDB 运行得更快,因为你可以告诉它操作超出内存,除了稀疏的间隔,不要把东西提交到磁盘。

你可以对 Couch 做同样的事情,但是它的基于 HTTP 的通信协议将会比 Mongo 的原始二进制通信速度慢2-4倍场景。

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

希望能有所帮助!

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

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

我想向所有还没有尝试过 Couchbase 的人推荐它,但不是基于报告中所显示的版本(2.5.1) ,因为它比 CB Server 现在的版本晚了近两个版本,在2H15接近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