CouchDB简介

CouchDB简介CouchDB 简介类型 开源数据库 Apache 项目存储格式 JSON 查询语言 JavaScriptAP MapReduce HTTP 特点 MVCC Multiversion CouchDB 一个支持多版本控制的系统 此类系统通常支持多个结点写 而系统会检测到多个系统的写操作之间的冲突并以一定的算法规则予以解决 水平扩展

CouchDB简介

类型:开源数据库,Apache项目 

存储格式:JSON 

查询语言:JavaScript 

API :MapReduce、HTTP

特点

  • MVCC(Multiversion concurrency control)

CouchDB一个支持多版本控制的系统,此类系统通常支持多个结点写, 而系统会检测到多个系统的写操作之间的冲突并以一定的算法规则予以解决。

  • 水平扩展性

在扩展性方面,CouchDB使用replication去做。 

CouchDB的设计基于支持双向的复制(同步)和离线操作。 这意味着多个复制能够对同一数据有其自己的拷贝,可以进行修改,之后将这些变更进行同步。

  • REST API(Representational State Transfer,简称REST,表述性状态转移)

所有的数据都有一个唯一的通过HTTP暴露出来的URI。 

REST使用HTTP方法 POST,GET,PUT和DELETE来操作对应的四个基本 CRUD(Create,Read,Update,Delete)操作来操作所有的资源。

  • 数据查询操作

CouchDB不支持动态查询,你必须为你的每一个查询模式建立相应的视图,并在此视图的基础上进行查询。 

视图是CouchDB中文档的呈现方式,在CouchDB 中保存的是视图的定义。 

CouchDB 中有两种视图:永久视图和临时视图。 永久视图保存在设计文档的views字段中。 如果需要修改永久视图的定义,只需要通过文档 REST API 来修改设计文档即可。 临时视图是通过发送 POST 请求到 URL/dbName/_temp_view 来执行的。在POST请求中需要包含视图的定义。 一般来说,临时视图只在开发测试中使用,因为它是即时生成的,性能比较差; 永久视图的运行结果可以被 CouchDB 缓存,因此一般用在生产环境中。

  • 原子性

支持针对行的原子性修改(concurrent modifications of single documents),但不支持更多的复杂事务操作。

  • 数据可靠性

CouchDB是一个”crash-only”的系统,你可以在任何时候停掉CouchDB并能保证数据的一致性。

  • 最终一致性

CouchDB保证最终一致性,使其能够同时提供可用性和分割容忍。

  • 离线支持

CoucbDB能够同步复制到可能会离线的终端设备(比如智能手机),同时当设置再次在线时处理数据同步。 CouchDB内置了一个的叫做Futon的通过web访问的管理接口。

与SQL语法比较

查询数据库列表

mysql

通过show查询,示例如下:

show databases; 返回结果: +——————–+ | Database | +——————–+ | information_schema | | mysql | | test | +——————–+

couchDB

通过GET请求访问URL/_all_dbs可以获取数据库列表。 

示例如下:

curl -X GET http://127.0.0.1:5984/_all_dbs 返回结果: [“_replicator”,”_users”,”db1″,”db2″]

创建数据库

mysql

通过create语句实现,示例如下:

create database testdb;

couchDB

通过PUT请求访问URL/dbName可以创建名称为dbName的数据库。 

示例如下:

curl -X PUT http://127.0.0.1:5984/testdb 返回结果: {“ok”:true}

添加表

mysql

通过create语句实现,示例如下:

create table tb1( id int, name varchar(20) );

couchDB

没有表的概念,数据直接以文档的形式存储在数据库中,每个数据库是一个独立的文档集合。

添加数据

mysql

通过insert语句实现,示例如下:

insert into tb1 (id,name) values (1,’mike’);

couchDB

通过PUT请求访问 URL/dbName/doc_id 可以在名称为dbName的数据库中创建ID为doc_id的文档。 

通过POST请求访问 URL/dbName/ 也可以创建新文档,不过是由 CouchDB 来生成文档的ID。

比如通过PUT方法添加uuid为1925a2adf9b55bca1文档到数据库:

curl -X PUT http://127.0.0.1:5984/testdb/1925a2adf9b55bca1 -d ‘{“id”:1,”name”:”mike”}’ 返回结果: {“ok”:true,”id”:”1925a2adf9b55bca1″,”rev”:”1-0c1f72feabb29905ed205d25fbcbf3b3″}

查询数据

mysql

1、单条数据查询

通过select语句实现,示例代码:

select * from tb1 where id =1; 查询结果: +——+——+ | id | name | +——+——+ | 1 | Mike | +——+——+

2、多条数据查询 

通过select语句实现,示例代码:

select * from tb1 where id > 1; 查询结果: +——+——+ | id | name | +——+——+ | 2 | mike | | 3 | mike | +——+——+

3、查询该表所有数据

通过select语句实现,示例代码: 

select * from tb1;

查询结果: +——+——+ | id | name | +——+——+ | 1 | Mike | | 2 | mike | | 3 | mike | +——+——+

couchDB

1、单条数据查询

通过GET请求访问 URL/dbName/doc_id 可以获取名称为dbName的数据库中ID为doc_id文档的内容。 

文档的内容是一个JSON对象,其中以“ _ ”作为前缀的顶层字段是由CouchDB保留使用的,如_id和_rev。

示例如下:

curl -X GET http://127.0.0.1:5984/testdb/1925a2adf9b55bca1 返回结果: {“_id”:”1925a2adf9b55bca1″,”_rev”:”2-1b70c2faffc36cde06f29f16580ae668″,”name”:”Mike”}

2、多条数据查询

couchDB通过视图进行查询。 

示例如下:

创建视图: { “_id”: “_design/example”, “language”: “javascript”, “views”: { “getdata”: { “map”: “function(doc){ if(doc.id>1){emit(doc.id, doc.name)}}” } } } 执行查询: curl -X GET http://127.0.0.1:5984/testdb/_design/example/_view/getdata 返回结果: {“total_rows”:2,”offset”:0,”rows”:[ {“id”:”25e1a898eeb209d8e9036a73″,”key”:2,”value”:”mike”}, {“id”:”25e1a898eeb209d8e9037a05″,”key”:3,”value”:”mike”} ]}

3、查询所有文档

方法一:

通过视图进行查询。 

示例如下:

创建视图: { “_id”: “_design/example”, “language”: “javascript”, “views”: { “getall”: { “map”: “function(doc){ emit(doc.id, doc.name)}” } } } 执行查询: curl -X GET http://127.0.0.1:5984/testdb/_design/example/_view/getall 返回结果: {“total_rows”:3,”offset”:0,”rows”:[ {“id”:”1925a2adf9b55bca1″,”key”:1,”value”:”mike”}, {“id”:”25e1a898eeb209d8e9036a73″,”key”:2,”value”:”mike”}, {“id”:”25e1a898eeb209d8e9037a05″,”key”:3,”value”:”mike”} ]}

方法二:

couchDB没有表的概念,可以通过GET请求访问 URL/dbName/_all_docs 查询某个库中的所有文档。 

该命令也只能列出该数据库中所有的key列表,具体数据的查询需要重新进行GET操作。

示例如下:

curl -X GET http://172.16.10.2:5984/testdb/_all_docs 返回结果: {“total_rows”:2,”offset”:0,”rows”:[ {“id”:”1925a2adf9b55bca1″,”key”:”1925a2adf9b55bca1″,”value”:{“rev”:”2-1b70c2faffc36cde06f29f16580ae668″}}, {“id”:”dae18eb4f907f706dd003c94″,”key”:”dae18eb4f907f706dd003c94″,”value”:{“rev”:”1-967a00dff5e02addabb3284d”}} ]} curl -X GET http://127.0.0.1:5984/testdb/1925a2adf9b55bca1 curl -X GET http://127.0.0.1:5984/testdb/dae18eb4f907f706dd003c94

修改数据

mysql

通过update语句实现,示例如下:

update tb1 set name=’Mike’ where id = 1;

couchDB

通过PUT请求访问 URL/dbName/doc_id 可以更新已有的文档。 

在PUT请求内容的文档中需要包含_rev字段,表示文档的修订版本号。 

CouchDB使用该字段来做更新时的冲突检测。 

如果该字段的值与 CouchDB 中保存的该文档的修订版本号一致,则表明没有冲突,可以进行更新。 

当更新完成之后,返回 HTTP 状态代码 201 ; 

否则返回 HTTP 状态代码 409,表示有版本冲突。

比如更新uuid为1925a2adf9b55bca1文档:

curl -X PUT http://127.0.0.1:5984/testdb/1925a2adf9b55bca1 -d ‘{“_rev”:”1-0c1f72feabb29905ed205d25fbcbf3b3″,”id”:1,”name”:”Mike”}’ 返回结果: {“ok”:true,”id”:”1925a2adf9b55bca1″,”rev”:”2-dd2a105c56897b5b55cb1faa”}

删除数据

mysql

通过delete语句实现,示例如下:

delete from tb1 where id = 1;

couchDB

通过DELETE请求访问 URL/dbName/doc_id?rev=rev_id可以删除数据库databasename中 ID 为doc_id,并且修订版本号为rev_id的文档。

示例如下:

curl -X DELETE http://127.0.0.1:5984/testdb/1925a2adf9b55bca1?rev=2-dd2a105c56897b5b55cb1faa 返回结果: {“ok”:true,”id”:”1925a2adf9b55bca1″,”rev”:”3-aa8b9d239a4a42e78483dc1d6f424f71″}

E-Mail : Mike_Zhang@live.com

github :https://github.com/mike-zhang

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207220.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午2:18
下一篇 2026年3月19日 下午2:19


相关推荐

  • python基础-内置函数详解[通俗易懂]

    python基础-内置函数详解[通俗易懂]一、内置函数(python3.x)内置参数详解官方文档:https://docs.python.org/3/library/functions.html?highlight=built#ascii

    2022年7月5日
    25
  • plsql如何配置连接oracle数据库,PLSQL连接Oracle 数据库配置详解「建议收藏」

    plsql如何配置连接oracle数据库,PLSQL连接Oracle 数据库配置详解「建议收藏」(oracle官网下载地址:http://www.oracle.com/technetwork/topics/winsoft-085727.html,下载地址2:http://download.csdn.net/detail/czw2010/5732241)2.解压instantclient-basic-win32-11.2.0.1.0并放置在oracle安装目录的product下(放置位置…

    2025年8月7日
    5
  • Modelsim下载 安装 与 和谐教程

    Modelsim下载 安装 与 和谐教程一.下载ModelsimSE-642019.2-windows网盘分享:链接:https://pan.baidu.com/s/1BASOJ1DYZYrK9Ot_BRs7HA提取码:md4d二.安装下载完压缩包后解压,安装按下图所示步骤进行。注意,完全退出杀毒软件如360,否则可能安装/和谐失败。自此安装完成,下面进行和谐。三.和谐运行patch.dll会生成LICENSE.TXT文件,将此文件另存到modelsim安装路径下。建立用户环境变量:.

    2022年6月15日
    36
  • [Elasticsearch] 邻近匹配 (三) – 性能,关联单词查询以及Shingles

    [Elasticsearch] 邻近匹配 (三) – 性能,关联单词查询以及Shingles提高性能短语和邻近度查询比简单的match查询在性能上更昂贵。match查询只是查看词条是否存在于倒排索引(InvertedIndex)中,而match_phrase查询则需要计算和比较多个可能重复词条(Multiplepossiblyrepeated)的位置。在LuceneNightlyBenchmarks中,显示了一个简单的term查询比一个短语查询快大概10倍,比一

    2025年6月12日
    7
  • 网站和数据库分开放,可以实现吗

    网站和数据库分开放,可以实现吗

    2021年9月20日
    50
  • 主成分分析PCA详解及MATLAB实现

    主成分分析PCA详解及MATLAB实现1 读取外部文件数据 loadgj txt 把原始保存在纯文本文件 gj txt 中的数据 读到 MATLAB 变量 gj 中 2 数据标准化 gj1 zscore gj 将原始数据 gj 进行 z score 标准化 3 计算相关系数矩阵 协方差矩阵 r corrcoef gj1 计算相关系数矩阵 协方差矩阵 因为原始数据 gj 已经标准化成新的数据 gj1 所以 gj1 的协方差矩阵就是相关系数矩阵 相关系数矩阵主对角线上都是 1 因为一个变量和自己的相关系数是 1 相关系数矩阵 r 里大多数数据

    2026年3月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号