CouchDB
简介
Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的面向文档的NoSQL数据库。其中一个显著的功能就是多主复制。CouchDB的第一个版本发布在2005年,在2008年成为了Apache的项目。
不同于关系型数据库,CouchDB没有将数据和关系存储在表格里。替代的,每个数据库是一个独立的文档集合。每一个文档维护其自己独立的数据和自包涵的schema。一个应用程序可能会访问多个数据库,比如其中一个位于用户的手机上,另一个位于在远程的服务器上。文档的元数据包含版本信息,让其能够合并可能因为数据库链接丢失导致的任何差异。
CouchDB实现了一个多版本并发控制(MVCC)形式,用来避免在数据库写操作的时候对文件进行加锁。冲突留给应用程序去解决。解决一个冲突的通用操作的是首先合并数据到其中一个文档,然后删除旧的数据。
其他功能包括文档级别的ACID语义和最终一致性,MapReduce,复制(Replication)。它还支持通过一个做Futon的内置web应用程序来进行数据库管理。
特点
- 文档存储
- CouchDB将数据存储为“文档”,其为用JSON表示的有一个或者多个字段/值的对。字段的值可以是简单的东西比如字符串,数字,或者时间;但是数组和字典同样也可以使用。CouchDB中的每一个文档有一个唯一的id但是没有必须的文档schema。
- ACID语义
- CouchDB提供了ACID语义,其通过多版本并发控制的形式来实现,意味着CouchDB能够处理大量的并发读写而不会产生冲突。
- Map/Reduce 视图 和 索引
- 存储的数据通过视图进行组装。在CouchDB中,每一个视图都是由作为map/reduce操作中的Map部分的Javascript函数构成。该函数接受一个文档并且将其转换为一个单独的值来返回。CouchDB能够对视图进行索引,同时在文档新增,修改,删除的时候对这些索引进行更新。
- 支持复制的分布式架构
- CouchDB的设计基于支持双向的复制(同步)和离线操作。这意味着多个复制能够对同一数据有其自己的拷贝,可以进行修改,之后将这些变更进行同步。
- REST API
- 所有的数据都有一个唯一的通过HTTP暴露出来的URI。REST使用HTTP方法 POST,GET,PUT和DELETE来操作对应的四个基本CRUD(Create,Read,Update,Delete)操作来操作所有的资源。
- 最终一致性
- CouchDB保证最终一致性,使其能够同时提供可用性和分割容忍。
- 离线支持
- CoucbDB能够同步复制到可能会离线的终端设备(比如智能手机),同时当设置再次在线时处理数据同步。CouchDB内置了一个的叫做Futon的通过web访问的管理接口。
安装
- Ubuntu 18.04 (Bionic): Run the following commands:
sudo apt-get install -y apt-transport-https gnupg ca-certificates echo "deb https://apache.bintray.com/couchdb-deb bionic main" \ | sudo tee -a /etc/apt/sources.list.d/couchdb.list
- CentOS: Place the following text into
/etc/yum.repos.d/bintray-apache-couchdb-rpm.repo
:
[bintray--apache-couchdb-rpm]
name=bintray--apache-couchdb-rpm baseurl=http://apache.bintray.com/couchdb-rpm/el$releasever/$basearch/ gpgcheck=0 repo_gpgcheck=0 enabled=1
安装二进制文件
Debian/Ubuntu: First, install the CouchDB repository key:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys \ 8756C4F765C9AC3CB6B85D62379CE192D401AB61
Then update the repository cache and install the package:
sudo apt update sudo apt install -y couchdb
RedHat/CentOS: Run the command:
sudo yum -y install epel-release && sudo yum -y install couchdb
添加到PATH路径
echo /opt/couchdb/bin >> /etc/profile
使用
Action | Request | Response |
---|---|---|
获取服务器基本信息 |
curl http://127.0.0.1:5984/
|
|
创建一个名为mikey的数据库 |
curl -X PUT http://127.0.0.1:5984/mikey
|
{"ok": true}
|
尝试创建第一个名为 mikey的数据库 |
curl -X PUT http://127.0.0.1:5984/mikey
|
{
"error":"file_exists",
"reason":"The database could not be created, the file already exists."
}
|
获取关于mikey数据库的信息 |
curl http://127.0.0.1:5984/mikey
|
{
|
删除数据库 mikey |
curl -X DELETE http://127.0.0.1:5984/mikey
|
{"ok": true}
|
创建一个文档,请求CoudbDB来生成一个document id |
curl -X POST -H "Content-Type: application/json" --data \
'{ "text" : "MIKEY on CouchDB", "rating": 5 }' \
http://127.0.0.1:5984/mikey
|
{"ok":true,"id":"dded5e5a4565766c13501f5b800003b4","rev":"1-614409ae05280743f84cf3dd8ad8f0ba"}
|
资料
文档:http://docs.couchdb.org/en/2.3.1/whatsnew/2.3.html#version-2.3.1
合群是堕落的开始 优秀的开始是孤行