CouchDB 简介


数据库管理系统为数据的存储和检索提供了机制。数据库管理系统主要分为三种类型,即 RDBMS(关系数据库管理系统)、OLAP(在线分析 处理系统)和 NoSQL。

RDBMS


RDBMS 代表关系数据库管理系统。 RDBMS 是 SQL 以及所有现代数据库系统(如 MS SQL Server、IBM DB2、Oracle、MySQL 和 Microsoft Access)的基础。

关系数据库管理系统 (RDBMS) 是基于 E. F. Codd 引入的关系模型的数据库管理系统 (DBMS)。

RDBMS 中的数据存储在名为 tables .该表是相关数据条目的集合,由列和行组成。它仅存储结构化数据。

OLAP


在线分析处理服务器 (OLAP) 基于多维数据模型。它允许管理人员和分析师通过快速、一致和交互式的信息访问来深入了解信息。

NoSQL 数据库


NoSQL 数据库(有时称为 Not Only SQL)是一种数据库,它提供了一种机制来存储和检索数据,而不是关系数据库中使用的表格关系。这些数据库是无模式的,支持简单的复制,具有简单的 API,最终一致,并且可以处理大量数据(大数据)。

NoSQL 数据库的主要目标是:

  • 设计简洁,
  • 水平缩放,以及
  • 更好地控制可用性。

与关系数据库相比,NoSQL 数据库使用不同的数据结构。它使 NoSQL 中的一些操作更快。给定 NoSQL 数据库的适用性取决于它必须解决的问题。这些数据库存储结构化数据和非结构化数据,如音频文件、视频文件、文档等。这些 NoSQL 数据库分为三种类型,如下所述。

键值存储 :这些数据库设计用于以键值对的形式存储数据,这些数据库不会有任何模式。在这些数据库中,每个数据值都由一个索引键和该键的值组成。

示例: BerkeleyDB、Cassandra、DynamoDB、Riak。

列商店 : 在这些数据库中,数据存储在按数据列分组的单元格中,这些列进一步分组为列族。这些列族可以包含任意数量的列。

示例:BigTable、HBase 和 HyperTable。

文档存储 : 这些是基于键值存储的基本思想开发的数据库,其中“文档”包含更复杂的数据。在这里,每个文档都被分配了一个唯一的键,用于检索文档。这些设计用于存储、检索和管理面向文档的信息,也称为半结构化数据。

示例:CouchDB 和 MongoDB。

什么是 CouchDB?


CouchDB 是 Apache 软件基金会开发的开源数据库。重点是易用性,拥抱网络。它是一个 NoSQL 文档存储数据库。

它使用 JSON 存储数据(文档),使用 java 脚本作为查询语言来转换文档,使用 http 协议供 api 访问文档,使用 Web 浏览器查询索引。它是 2005 年发布的多主应用程序,并于 2008 年成为 apache 项目。

为什么选择 CouchDB?


  • CouchDB 有一个基于 HTTP 的 REST API,它有助于轻松地与数据库进行通信。 HTTP 资源和方法(GET、PUT、DELETE)的简单结构易于理解和使用。

  • 由于我们以灵活的基于文档的结构存储数据,因此无需担心数据的结构。

  • 为用户提供强大的数据映射,允许查询、组合和过滤信息。

  • CouchDB 提供易于使用的复制,你可以使用它在数据库和机器之间复制、共享和同步数据。

数据模型


  • 数据库是 CouchDB 中最外层的数据结构/容器。

  • 每个数据库都是独立文档的集合。

  • 每个文档都维护自己的数据和自包含模式。

  • 文档元数据包含修订信息,这使得可以合并数据库断开时发生的差异。

  • CouchDB 实现了多版本并发控制,避免了写入时需要锁定数据库字段。

CouchDB的特点:减少内容


文件存储

CouchDB 是一个文档存储 NoSQL 数据库。它提供了存储具有唯一名称的文档的功能,还提供了一个称为 RESTful HTTP API 的 API,用于读取和更新(添加、编辑、删除)数据库文档。

在 CouchDB 中,文档是主要的数据单元,它们还包括元数据。文档字段是唯一命名的,并且包含不同类型的值(文本、数字、布尔值、列表等),并且对文本大小或元素计数没有设置限制。

文档更新(添加、编辑、删除)遵循原子性,即它们将被完全保存或根本不保存。数据库不会有任何部分保存或编辑的文档。

Json 文档结构

{
    "field" : "value",
    "field" : "value",
    "field" : "value",
}

酸性质

CouchDB 包含 ACID 属性作为其功能之一。

一致性:当 CouchDB 中的数据一旦提交后,该数据将不会被修改或覆盖。因此,CouchDB 确保数据库文件始终处于一致状态。

CouchDB 读取使用多版本并发控制 (MVCC) 模型,因此客户端将看到从读取操作开始到结束的数据库的一致快照。

每当文档更新时,CouchDB 将数据刷新到磁盘中,更新后的数据库头被写入两个连续且相同的块中,构成文件的前 4k,然后同步刷新到磁盘。刷新期间的部分更新将被丢弃。

如果在提交标头时发生故障,则将保留先前相同标头的幸存副本,以确保所有先前提交的数据的一致性。除了标题区域之外,在崩溃或电源故障后的一致性检查或修复都不是必需的。

压实

每当数据库文件中的空间浪费超过一定程度时,所有活动数据都会被复制(克隆)到一个新文件中。当复制过程完全完成后,旧文件将被丢弃。所有这些都是通过压缩过程完成的。数据库在压缩期间保持在线,并且允许所有更新和读取成功完成。

Views

CouchDB 中的数据存储在半结构化文档中,这些文档可以灵活地使用单独的隐式结构,但它是一种用于数据存储和共享的简单文档模型。如果我们想以多种不同的方式查看我们的数据,我们需要一种方法来过滤、组织和报告尚未分解为表格的数据。

为了解决这个问题,CouchDB 提供了一个视图模型。视图是对数据库中的文档进行聚合和报告的方法,并且是按需构建的,用于对数据库文档进行聚合、连接和报告。由于视图是动态构建的,并且不会影响底层文档,因此你可以根据需要拥有相同数据的多个不同视图表示。

History


  • CouchDB 是用 Erlang 编程语言编写的。
  • 它由 Damien Katz 于 2005 年创立。
  • CouchDB 于 2008 年成为 Apache 项目。

CouchDB 的当前版本是 1.61。