- CouchDB 教程
- CouchDB - 首页
- CouchDB 简介
- CouchDB - 安装
- CouchDB - Curl & Futon
- CouchDB - HTTP API
- CouchDB - 创建数据库
- CouchDB - 删除数据库
- CouchDB - 创建文档
- CouchDB - 更新文档
- CouchDB - 删除文档
- CouchDB - 附加文件
- CouchDB 有用资源
- CouchDB - 快速指南
- CouchDB - 资源
- CouchDB - 讨论
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。