Apache CouchDB 由 Apache 软件基金会开发,最初于 2005 年发布。CouchDB 是用 Erlang 编写的。它是一个开源数据库,使用各种不同的格式和协议来存储、传输和处理其数据。它使用 JSON 来存储数据,使用 MapReduce 作为查询语言,使用 JavaScript 作为 API。文档是 CouchDB 中的主要数据单元,它们还包括元数据。文档字段具有唯一的命名并包含不同类型的值,并且文本大小或元素数量没有限制。
历史
CouchDB 是用 Erlang 编程语言编写的。它由达米安·卡茨 (Damien Katz) 于 2005 年推出。 CouchDB于2008年成为Apache项目。CouchDB的当前版本是1.61。
建筑
CouchDB 的架构描述如下:
- CouchDB 引擎: 它基于 B 树,通过直接映射到底层 B 树操作的键或键范围来访问数据。它是系统的核心,管理内部数据、文档和视图的存储。
- HTTP 请求: 用于创建索引并从文档中提取数据。它是用 JavaScript 编写的,允许创建由 MapReduce 作业组成的临时视图。
- 文档:存储大量数据。
- 复制数据库:用于将数据复制到本地或远程数据库并同步设计文档。
CouchDB 的特点
CouchDB 功能包括:
- 复制:它提供了最简单的复制形式,没有其他数据库可以如此轻松地复制。
- 文档存储:是一个遵循文档存储的NoSQL数据库,每个字段都有唯一的名称,包含文本、数字、布尔值、列表等各种数据类型的值。
- ACID 属性: CouchDB 文件布局遵循 ACID 属性的所有功能。
- 安全性: 它还提供数据库级安全性。权限分为读者和管理员。读者可以读取和写入数据库。
- Map/Reduce: CouchDB 受欢迎的主要原因是 Map/Reduce 系统。
- 身份验证:CouchDB 可帮助您通过类似于 Web 应用程序的会话 cookie 保持身份验证打开。
- 专为离线而构建:CouchDB 可以复制到具有离线功能的设备(例如智能手机),并在设备恢复在线时为您处理数据同步。
- 最终一致性:CouchDB 保证最终一致性,以提供可用性和分区容错性。
- HTTP API:所有项目都有一个通过 HTTP 公开的唯一 URI(唯一资源标识符)。它使用 POST、GET、PUT 和 DELETE 等 HTTP 方法对所有资源进行四种基本 CRUD(创建、读取、更新、删除)操作。
CouchDB 的优点
CouchDB 的优势包括:
- HTTP API,方便通信。
- 它用于存储任何类型的数据。
- ReduceMap 允许优化数据组合。
- CouchDB的结构非常简单
- 快速索引和检索。
CouchDB 的缺点
CouchDB 的缺点包括:
- CouchDB 占用大量开销空间,这是它与其他数据库相比的主要缺点。
- 任意查询的成本很高。
与大多数替代方案相比,CouchDB 具有一些额外的空间开销。
- 对海量数据集的临时查看速度非常慢。
- 不支持交易
- 大型数据库的复制可能会失败。