Apache CouchDB是一个开源数据库,专注于易用性。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的面向文档的NoSQL数据库。其中一个显著的功能就是多主复制。
Apache CouchDB 是一个开源数据库,专注于易用性和成为”完全拥抱 web 的数据库”。它是一个使用 JSON 作为存储格式,JavaScript 作为查询语言,MapReduce 和 HTTP 作为 API 的面向文档的 NoSQL 数据库。其中一个显著的功能就是多主复制。
CouchDB 的第一个版本发布在 2005 年,在 2008 年成为了 Apache 的项目。
不同于关系型数据库,CouchDB 没有将数据和关系存储在表格里。替代的,每个数据库是一个独立的文档集合。每一个文档维护其自己独立的数据和自包涵的 schema。一个应用程序可能会访问多个数据库,比如其中一个位于用户的手机上,另一个位于在远程的服务器上。文档的元数据包含版本信息,让其能够合并可能因为数据库链接丢失导致的任何差异。
CouchDB 实现了一个多版本并发控制(MVCC)形式,用来避免在数据库写操作的时候对文件进行加锁。冲突留给应用程序去解决。解决一个冲突的通用操作的是首先合并数据到其中一个文档,然后删除旧的数据。
其他功能包括文档级别的 ACID 语义和最终一致性,MapReduce,复制(Replication)。它还支持通过一个做 Futon 的内置 web 应用程序来进行数据库管理。
历史
CouchDB(Couch 是 cluster of unreliable commodity hardware 的首字母缩写)是前 IBM 的 Lotus Notes 开发者 Damien Katz 创建于 2005 年的一个项目。Damien Katz 将其定义为“面向大规模可扩展对象数据库的存储系统”。他对该数据库的目标是让其成为互联网的数据库,其从底层的设计就支持部署 web 应用程序。他自己通过将近两年的时间创建了该项目同时将其作为开源项目在 GNU General Public License 下发布。
在 2008 年 2 月,其成为 Apache Incubator 项目,同时其许可协议变更为 Apache License。几个月后,其升级为顶级项目。这促使了其第一个稳定版在 2010 年 7 月发布。
在 2012 年初期,Damien Katz 离开了项目专注于 Couchbase Server。不过该项目还在继续进行中,在 2012 年 4 月发布了 1.2 版本,2013 年 4 月发布了 1.3 版本。
主要功能
文档存储
CouchDB 将数据存储为“文档”,其为用 JSON 表示的有一个或者多个字段/值的对。字段的值可以是简单的东西比如字符串,数字,或者时间;但是数组和字典同样也可以使用。CouchDB 中的每一个文档有一个唯一的 id 但是没有必须的文档 schema。
ACID 语义
CouchDB 提供了 ACID 语义,其通过多版本并发控制的形式来实现,意味着 CouchDB 能够处理大量的并发读写而不会产生冲突。
Map/Reduce 视图 和 索引
存储的数据通过视图进行组装。在 CouchDB 中,每一个视图都是由作为 map/reduce 操作中的 Map 部分的 JavaScript 函数构成。该函数接受一个文档并且将其转换为一个单独的值来返回。CouchDB 能够对视图进行索引,同时在文档新增,修改,删除的时候对这些索引进行更新。
支持复制的分布式架构
CouchDB 的设计基于支持双向的复制(同步)和离线操作。这意味着多个复制能够对同一数据有其自己的拷贝,可以进行修改,之后将这些变更进行同步。
REST API
所有的数据都有一个唯一的通过 HTTP 暴露出来的 URI。REST 使用 HTTP 方法 POST,GET,PUT 和 DELETE 来操作对应的四个基本 CRUD(Create,Read,Update,Delete)操作来操作所有的资源。
最终一致性
CouchDB 保证最终一致性,使其能够同时提供可用性和分割容忍。
离线支持
CoucbDB 能够同步复制到可能会离线的终端设备(比如智能手机),同时当设置再次在线时处理数据同步。
CouchDB 内置了一个的叫做 Futon 的通过 web 访问的管理接口。
使用案例、产品部署
CouchDB 的复制和同步强大功能让其能够使用在无法保证网络链接但是应用程序必须继续在离线模式工作的移动设备。
文章来自互联网,只做分享使用。发布者:外星人Ec,转转请注明出处:https://www.baoxiaoke.com/article/216180.html