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。
What is CouchDB?
CouchDB是Apache软件基金会开发的开源数据库。 重点是易用性,拥抱网络。 它是一个 NoSQL 文档存储数据库。
它使用JSON来存储数据(文档),使用java脚本作为其查询语言来转换文档,使用http协议作为api来访问文档,使用网络浏览器查询索引。 它是一个多主应用程序,于 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。