Couchdb 简明教程

CouchDB - Introduction

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

RDBMS

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

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

RDBMS 中的数据存储在名为 tables 的数据库对象中。表是相关数据项的集合,并且由列和行组成。它只存储结构化数据。

OLAP

联机分析处理服务器 (OLAP) 以多维数据模型为基础。它允许经理和分析师通过快速、一致且交互方式访问信息来深入了解该信息。

NoSQL Databases

NoSQL 数据库(有时称为非 SQL)是除关系数据库中使用的表格关系以外提供存储和检索数据的机制的数据库。这些数据库没有架构,支持简单的复制,拥有简单的 API,最终一致,并且能处理大量数据(大数据)。

NoSQL 数据库的主要目标是拥有以下内容 −

  1. Simplicity of design,

  2. Horizontal scaling, and

  3. Finer control over availability.

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

Key-value Store − 这些数据库旨在将数据存储在键值对中,并且这些数据库没有任何架构。在这些数据库中,每个数据值都包含一个已编制索引的键和该键的一个值。

示例 − BerkeleyDB、Cassandra、DynamoDB、Riak。

Column Store − 在这些数据库中,数据存储在分组为数据列的单元格中,并且这些列进一步分组到列族中。这些列族可以包含任意数量的列。

示例 − BigTable、HBase 和 HyperTable。

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

示例 − CouchDB 和 MongoDB。

What is CouchDB?

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

它使用 JSON 来存储数据(文档),使用 JavaScript 作为查询语言来转换文档,使用 http 协议,通过 api 访问文档,使用 web 浏览器查询索引。它是一个多主应用,发布的时间是 2005 年,并且在 2008 年成为了一个 Apache 项目。

Why CouchDB?

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

  2. 当我们在灵活的基于文档的结构中存储数据时,无需担心数据的结构。

  3. 向用户提供功能强大的数据映射,该映射允许查询、组合和筛选信息。

  4. CouchDB 提供易于使用的复制功能,你可以使用该功能复制、共享和同步数据库和机器之间的的数据。

Data Model

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

  2. 每个数据库都是一个独立文档的集合。

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

  4. 文档元数据包含修订信息,这使得在数据库断开连接时合并出现的差异成为可能。

  5. CouchDB 实施多版本并发控制,以避免在写入期间锁定数据库字段。

Features of CouchDB:Reduce the Content

Document Storage

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

在 CouchDB 中,文档是数据的基本单位,它们也包括元数据。文档字段具有唯一名称,并且包含各种类型的属性值(文本、数字、布尔值、列表等);文本大小或元素数量没有固定的限制。

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

Json Document Structure

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

ACID Properties

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

一致性 − 当 CouchDB 中的数据被提交一次时,就不允许修改或覆盖该数据。因此,CouchDB 确保数据库文件将始终处于一致的状态。

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

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

如果写入标头时出现故障,先前相同的标头副本将继续保留,从而保证所有先前提交数据的一致性。除了标头区域之外,在崩溃或断电后永远不需要执行一致性检查或修复。

Compaction

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

Views

CouchDB 中的数据存储在半结构化文档中,这些文档以各个隐式结构为基础非常灵活,但它是一个用于数据存储和共享的简单文档模型。如果我们希望以多种不同的方式查看数据,我们需要一种方法来筛选、组织和报告尚未分解为表的数据。

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

History

  1. CouchDB 用 Erlang 编程语言编写。

  2. 它由 Damien Katz 于 2005 年启动。

  3. CouchDB 于 2008 年成为一个 Apache 项目。

CouchDB 的当前版本是 1.61。