MongoDB与CouchDB 全方位对比

http://blog.nosqlfan.com/html/1519.html

本文见于MongoDB官方网站,MongoDBCouchDB 很相似,他们都是文档型存储,数据存储格式都是JSON型的,都使用JavaScript进行操作,都支持Map/Reduce。但是其实二者有着很多本质的区别,本文透过现象追寻本质,让你更好的理解mongodb 与CouchDB。nosqlfan 翻译如下:

原文链接:Comparing Mongo DB and Couch DB

1.MVCC(Multiversion concurrency control)

MongoDB 与 CouchDB 的一大区别就是CouchDB 是一个MVCC的系统,而MongoDB是一个update-in-place 的系统。这二者的区别就是,MongoDB 进行写操作时都是即时完成写操作,写操作成功则数据就写成功了,而CouchDB 一个支持多版本控制的系统,此类系统通常支持多个结点写,而系统会检测到多个系统的写操作之间的冲突并以一定的算法规则予以解决。

2.水平扩展性

在扩展性方面,CouchDB 使用replication 去做,而MongoDB 的replication 仅仅用来增强数据的可靠性,MongoDB 在实现水平扩展性方面使用的是Sharding。(据说CouchDB 也有开发分片功能的计划)

3.数据查询操作

这个区别在用户接口上了,MongoDB 与传统的数据库系统类似,支持动态查询,即使在没有建立索引的行上,也能进行任意的查询。而 CouchDB 不同,CouchDB 不支持动态查询,你必须为你的每一个查询模式建立相应的view,并在此view的基础上进行查询。

4.原子性

这一点上两者比较一致,都支持针对行的原子性修改(concurrent modifications of single documents),但不支持更多的复杂事务操作。

5.数据可靠性

CouchDB 是一个”crash-only” 的系统,你可以在任何时候停掉CouchDB 并能保证数据的一致性。而MongoDB 在不正常的停掉后需要运行 repairDatabase() 命令来修复数据文件,在1.7.5 版本后支持单机可靠的 –dur命令。

6.Map/Reduce

MongoDB 和 CouchDB 都支持Map/Reduce ,不同的是MongoDB 只有在数据统计操作中会用到,而CouchDB 在变通查询时也是使用 Map/Reduce。

7.使用 javascript

MongoDB 和CouchDB 都支持javascript,CouchDb 用javascript来创建view。MongoDB 使用JSON作为普通数据库操作的表达式。当然你也可以在操作中包含javascript语句。MongoDB还支持服务端的javascript脚本(running arbitrary javascript functions server-side),当然,MongoDB 的Map/Reduce 函数也是javascript 格式的。

8.REST

CouchDB 是一个RESTFul 的数据库,其操作完全走HTTP协议,而MongoDB是走的自己的二进制协议。MongoDB Server在启动时可以开放一个HTTP 的接口供状态监控。

9.性能

  • 此处主要列举了MongoDB 自己具有高性能的原因
  • 采用二进制协议,而非CouchDB REST的HTTP 协议
  • 使用Momary Map 内存映射的做法
  • collection-oriented,面向集合的存储,同一个collection的数据是连续存储的
  • update-in-place 直接修改,而非使用MVCC的机制
  • 使用C++ 编写

10.适用场景

  • 如果你在构建一个 Lotus Notes 型的应用,我们推荐使用CouchDB,主要是由于它的MVCC机制。另外如果我们需要master-master 的架构,需要基于地理位置的数据分布,或者在数据结点可能不在线的情况下,我们推荐使用CouchDB。
  • 如果你需要高性能的存储服务,那我们推荐 MongoDB,比如用于存储大型网站的用户个人信息,比如用于构建在其它存储层之上的Cache层。
  • 如果你的需求中有大量 update 操作,那么使用MongoDB吧。就像我们在例子updating real time analytics counters 中的一样,对于那种经常变化的数据,比如浏览量,访问数之类的数据存储。
时间: 2024-10-21 20:57:33

MongoDB与CouchDB 全方位对比的相关文章

MongoDB与CouchDB全方位对比(转)

出处:http://www.csdn.net/article/2011-03-21/294226 本文见于MongoDB官方网站,MongoDB与CouchDB很相似,他们都是文档型存储,数据存储格式都是JSON型的,都使用Javascript进行操作,都支持Map/Reduce.但是其实二者有着很多本质的区别,本文透过现象追寻本质,让你更好的理解MongoDB与CouchDB. 1.MVCC(Multiversion concurrency control) MongoDB与CouchDB的一

对比Cassandra、 Mongodb、CouchDB、Redis、Riak、 Membase、Neo4j、HBase

转自:http://www.cnblogs.com/alephsoul-alephsoul/archive/2013/04/26/3044630.html 导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型nosql数据库的文章.文章由敏捷翻译 – 唐尤华编译.如需转载,请参见文后声明. 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举. 但是NoSQL

mongoDB关系型数据库的对比

一.基本操作 1.mongoDB和关系型数据库对比 对比项 mongoDB mysql oracle 表 集合list 二维表 表的一行数据 文档document 一条记录 表字段 键key 字段field 字段值 值value 值value 主外键 无 PK,FK 灵活度扩展性 极高 差 (1)关系型数据表的record必须保证拥有每一个field (2)mongoDB的每一个document的key可以不一样 (3)关系型数据查询使用sql (4)mongoDB查询使用内置的find函数--

数据库管理哪家强?Devart VS Navicat 360°全方位对比解析

今天小编向大家推荐的是两个开发环节的主流数据库管理品牌,那么你知道这两款数据库管理软件品牌与数据库引擎配套的管理软件有什么区别吗?小编这就360°全方位为您解答: ★ 品牌介绍 Devart:拥有超过20年的经验,利用最新的技术创造创新的软件产品,专注于创建数据库工具.ALM解决方案.数据提供商.数据集成和备份解决方案以及Web和云服务.Devart是Microsoft银牌应用程序开发合作伙伴和Oracle合作伙伴网络(OPN)专业计划的银牌合作伙伴. Navicat( PremiumSoft)

mongodb与mysql命令对比

我们总是在对比中看到自己的优点和缺点,对于mongodb来说也是一样,对比学习让我们尽快的掌握关于mongodb的基础知识. 关系型数据库一般是由数据库(database).表(table).记录(record)三个层次概念组成.而非关系型数据库mongodb是由数据库(database).集合(collection).文档对象(document)三个层次组成.mongodb对于关系型数据库里的表,没有行和列的关系概念,这体现了模式的自由特点. 语法命令如下列表格所示 MySQL MongoDB

MongoDB step by step (二)mongodb 与SQL基本对比

SQL Terms/Concepts MongoDB Terms/Concepts database database table Collection(集合) row document(文档) column Key(键) Value Value(值) index index table joins embedded documents and linking primary key primary key Specify any unique column or column combinat

MongoDB常用查询(对比SQL)

SQL MongoDB Description select * from bills db.getCollection('bills').find({}) 查找表bill中的所有记录                         原文地址:https://www.cnblogs.com/katierong/p/8492068.html

全方位对比Strut2和SpringMVC

一,本质对比 分析web.xml,我们可以发现,一个Web应用程序主要由context-param.listener.filter.servlet四部分组成.一个前台http请求发到后台服务器时,Tomcat 等Web容器首先把请求转化成ServletRequest和ServletResponse两个对象,然后依次调用Web应用程序在web.xml文件中定义的如上4个环节. Filter实现filter接口,对ServletRequest对象进行一定的加工处理,然后把处理结果写入到Servlet

mongodb和mysql语法对比

MySQL: SELECT * FROM user Mongo: db.user.find() -------------- MySQl: SELECT * FROM user WHERE name = 'foobar' Mongo: db.user.find({ 'name' : 'foobar' }) -------------- MySql: INSERT INTO user ('name','age') VALUES ('foobar',25) Mongo: db.user.insert