CouchDB 简介



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

RDBMS

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

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

RDBMS 中的数据存储在称为的数据库对象中。表是相关数据条目的集合,它由列和行组成。它只存储结构化数据。

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 存储数据(文档),使用 JavaScript 作为其查询语言来转换文档,使用 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",
}

ACID 属性

CouchDB 将 ACID 属性作为其特性之一。

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

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

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

如果在提交头文件时发生故障,则先前相同的头文件的生存副本将保留,确保所有先前提交的数据的一致性。除了头文件区域之外,崩溃或断电后无需进行一致性检查或修复。

压缩

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

视图

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

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

历史

  • CouchDB 使用 Erlang 编程语言编写。
  • 它由 Damien Katz 于 2005 年启动。
  • CouchDB 于 2008 年成为 Apache 项目。

CouchDB 的当前版本是 1.61。

广告
© . All rights reserved.