Apache CouchDB是一个开源数据库,侧重于易用性。它是一个面向文档的NoSQL数据库,使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API。其中一个显著的功能是多主机复制。
Apache CouchDB是一个开源数据库,专注于易用性,成为“完全拥抱web的数据库”。它是一个面向文档的NoSQL数据库,使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API。其中一个显著的功能是多主机复制。
CouchDB的第一个版本发布于2005年,2008年成为Apache项目。
与关系数据库不同,CouchDB不在表中存储数据和关系。相反,每个数据库都是一个独立的文档集合。每个文档都维护自己独立的数据和独立的模式。一个应用程序可以访问多个数据库,比如一个在用户的移动电话上,另一个在远程服务器上。文档的元数据包含版本信息,这使它能够包含数据库链接丢失可能导致的任何差异。
CouchDB实现了一个多版本并发控制(MVCC)表单,用于避免在数据库写操作期间锁定文件。将冲突留给应用程序来解决。解决冲突的常见操作是首先将数据合并到一个文档中,然后删除旧数据。
其他功能包括文档级ACID语义和最终一致性、MapReduce和复制。它还通过一个内置的web应用程序来支持数据库管理。
历史
CouchDB(Couch是不可靠商品硬件集群的首字母缩写)是由IBM的前Lotus Notes开发人员Damien Katz在2005年创建的一个项目。Damien Katz将其定义为“大规模可扩展对象数据库的存储系统”。他对这个数据库的目标是让它成为一个互联网数据库,它的底层设计支持web应用的部署。他在将近两年的时间里自己创建了这个项目,并在GNU通用公共许可证下作为开源项目发布。
2008年2月成为Apache孵化器项目,其许可协议变更为Apache License。几个月后,它被升级为顶级项目。这促使其第一个稳定版本于2010年7月发布。
2012年初,Damien Katz离开了这个项目,专注于Couchbase服务器。然而,该项目仍在进行中,2012年4月发布了1.2版本,2013年4月发布了1.3版本。
CouchDB将数据存储为“文档”,这些文档是由JSON表示的一个或多个字段/值的对。字段的值可以很简单,比如字符串、数字或时间;但是数组和字典也可以使用。CouchDB中的每个文档都有一个惟一的id,但是没有必要的文档模式。
CouchDB提供了ACID语义,以多版本并发控制的形式实现,这意味着CouchDB可以无冲突地处理大量并发读写。
映射/减少视图和索引
存储的数据通过视图组装。在CouchDB中,每个视图都由JavaScript函数组成,作为map/reduce操作的Map部分。这个函数获取一个文档,并将其转换成一个值返回。CouchDB可以索引视图,并在添加、修改或删除文档时更新这些索引。
复制支持的分布式体系结构
CouchDB旨在支持双向复制(同步)和离线操作。这意味着多个副本可以拥有相同数据的自己的拷贝,修改它们,然后同步这些更改。
所有数据都有一个通过HTTP公开的唯一URI。使用REST HTTP方法POST、GET、PUT和DELETE操作对应的四个基本CRUD(创建、读取、更新、删除)操作来操作所有资源。
最终一致性
CouchDB保证了最终的一致性,使它能够同时提供可用性和分段容差。
离线支持
CoucbDB可以同步复制到可能离线的终端设备(如智能手机),在设置再次在线时处理数据同步。
CouchDB有一个名为Futon的内置管理界面,可以通过web访问。
用例,产品部署
CouchDB强大的复制和同步能力使其能够在无法保证网络链接的移动设备上使用,但应用程序必须继续在离线模式下工作。