Live2d Test Env

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访问的管理接口。

安装

安装教程:http://docs.couchdb.org/en/latest/install/unix.html#installation-using-the-apache-couchdb-convenience-binary-packages

  •  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 

使用

ActionRequestResponse
获取服务器基本信息
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
{
"db_name":"mikey",
"purge_seq":"0-g1AAAAFTeJzLYWBg4MhgTmEQTM4vTc5ISXIwNDLXMwBCwxygFFMeC5BkeACk_gNBViIDQbUNELXz8atNSgCSSfUEzUxyAKmLJ6xOAaTOnkg3LoC4cT8xag9A1N7HrzaRIUkeYnkWADH8Xo4",
"update_seq":"0-g1AAAAFTeJzLYWBg4MhgTmEQTM4vTc5ISXIwNDLXMwBCwxygFFMiQ5L8____sxIZ8ChKUgCSSfaE1TmA1MUTVpcAUldPUF0eC5BkaABSQKXziVG7AKJ2PzFqD0DU3idG7QOIWpB7swBegl6O",
"sizes":{"file":33992,"external":0,"active":0    },
"other":{"data_size":0},
"doc_del_count":0,
"doc_count":0,
"disk_size":33992,
"disk_format_version":7,
"data_size":0,
"compact_running":false,
"cluster":{"q":8,"n":1,"w":1,"r":1},
"instance_start_time":"0"} }
删除数据库 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

文档:http://docs.couchdb.org/en/2.3.1/whatsnew/2.3.html#version-2.3.1

posted @ 2020-02-15 11:32  麦奇  阅读(1118)  评论(0编辑  收藏  举报