zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    use evolation+mapi with exhange mode
    python open file mode description
    5 reasons why you should learn python programming
    文本从尾到头输出
    安装部署lamp,来测试rediect
    python for ,loop ,else condition test
    python logging usage
    去除重复行
    [WTL]WTL for MFC Programming实践篇 一个自定义ComboBox的移植过程
    subsonic已死,db4o将死
  • 原文地址:https://www.cnblogs.com/biaogejiushibiao/p/12310999.html
Copyright © 2011-2022 走看看