【CouchDB 】面向文档的数据库管理系统

2022-04-29 00:00:00 数据 数据库 操作 支持 是一个

CouchDB 是用 Erlang 开发的面向文档的数据库系统,其数据存储方式有点类似 lucene 的 index 文件格式,CouchDB 大的意义在于它是一个面向 web 应用的新一代存储系统,事实上,CouchDB 的口号就是:下一代的 Web 应用存储系统。

Couch 复制协议让数据在服务器集群与移动设备和 Web 浏览器之间无缝流动,在保持高性能和高可靠性的同时,实现引人入胜的离线优先用户体验。CouchDB 带有开发人员友好的查询语言,以及可选的 MapReduce,用于简单、高效和全面的数据检索。


 

特点

 

介绍

 

CouchDB 基于 Erlang 构建,在近几年,基于 Erlang 的应用得到蓬勃的发展,特别是在基于 Web 的大规模,分布式应用领域,几乎都是 Erlang 的优势项目。

得益于其直观性与可靠性并重的设计理念,CouchDB 具备以下特点:

  • CouchDB 是分布式的数据库,他可以把存储系统分布到多台物理节点上,并且很好的协调和同步节点之间的数据读写一致性。这当然也得靠 Erlang 无与伦比的并发特性才能做到。对于基于 web 的大规模文档应用,分布式可以让它不必像传统的关系数据库那样分库拆表,在应用代码层进行大量的改动。

  • CouchDB 是面向文档的数据库,存储半结构化的数据,比较类似 lucene 的 index 结构,特别适合存储文档,因此很适合 CMS 、电话本、地址本等应用,在这些应用场合,文档数据库要比关系数据库更加方便,性能更好。

  • CouchDB 支持 REST API ,可以让用户使用 JavaScript 来操作 CouchDB 数据库,也可以用 JavaScript 编写查询语句,我们可以想像一下,用 AJAX 技术结合 CouchDB 开发出来的 CMS 系统会是多么的简单和方便。


 

如何

 

使用

 

CouchDB 可以安装在大部分 POSIX 系统上,包括 Linux® 和 Mac OS X。Version 2.2.0开始正式支持Windows (x64)。CouchDB 可以从源文件安装,也可以使用包管理器安装(比如在 Mac OS X 上使用 MacPorts)。

在 Windows 中安装 CouchDB ,选择 Windows 系统的下载链接,并选择一个提供的镜像开始下载,得到一个windos可执行文件setup-couchdb-1.6.1_R16B02.exe 文件,运行安装文件并继续安装。

如果一切顺利,可以通过使用以下 URL 与 CouchDB Web 界面交互 :

http://127.0.0.1:5984/_utils/

这显示了 Futon 的索引页面,这是 CouchDB 的 Web 界面。

CouchDB 同时提供二进制包以供 Linux 系统安装,具体安装过程可以参考这里:

https://docs.couchdb.org/en/latest/install/unix.html#installation-using-the-apache-couchdb-convenience-binary-packages


 

MongoDB

 

区别

 

MongoDB 与 CouchDB 的一大区别就是CouchDB 是一个MVCC的系统,而MongoDB是一个update-in-place 的系统,这导致了一系列的不同:

1.MVCC(Multiversion concurrency control)

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 的机制

10.适用场景

如果你在构建一个 Lotus Notes 型的应用,我们推荐使用 CouchDB,主要是由于它的 MVCC 机制。另外如果我们需要 master-master 的架构,需要基于地理位置的数据分布,或者在数据结点可能不在线的情况下,我们推荐使用 CouchDB 。

如果你需要高性能的存储服务,那我们推荐 MongoDB,比如用于存储大型网站的用户个人信息,比如用于构建在其它存储层之上的 Cache 层。


CouchDB 比起数据库更的是其协议式的定义,可以很好的保证离线数据库的体验。

相关文章