couchdb

先说:从不知道哪里转载过来的,只能有一点基本的认识,了解一点特性。 项目里用的的时候,还是靠js、typescript 和go的couchdb库

Tags: apache,开源,NoSQL,json,JavaScript(查询语言),mapreduce+http(API),多主复制(wt)

  1. 每个数据库是一个独立的文档集合(而不是表)。每一个文档维护其自己独立的数据和自包涵的schema。
  2. CoucbDB实现了一个多版本并发控制(MVCC)形式,用来避免在数据库写操作的时候对文件进行加锁。冲突留给应用程序去解决。解决一个冲突的通用操作的是首先合并数据到其中一个文档,然后删除旧的数据。
  3. 每次将变动保存到数据库中时还会分配一个修订号(rev)。
  4. The combination of a map and a reduce function is called a view in CouchDB terminology.
  5. 其他功能包括文档级别的ACID语义和最终一致性,MapReduce,复制(Replication)。它还支持通过一个做Futon的内置web应用程序来进行数据库管理。

ACID,是指数据库管理系统(DBMS)在写入/更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。
在数据库系统中,一个事务是指:由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可拆分。这个过程被称为一个事务,具有ACID特性。
MapReduce,是Google提出的一个软件架构指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归纳)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
CouchDB的设计基于支持双向的复制(同步)和离线操作。这意味着多个复制能够对同一数据有其自己的拷贝,可以进行修改,之后将这些变更进行同步。

功能(wiki)

  1. 文档存储
    CouchDB将数据存储为“文档”,其为用JSON表示的有一个或者多个字段/值的对。字段的值可以是简单的东西比如字符串,数字,或者时间;但是数组和字典同样也可以使用。CouchDB中的每一个文档有一个唯一的id但是没有必须的文档schema。

  2. Map/Reduce 视图 和 索引
    存储的数据通过视图进行组装。在CouchDB中,每一个视图都是由作为map/reduce操作中的Map部分的JavaScript函数构成。该函数接受一个文档并且将其转换为一个单独的值来返回。CouchDB能够对视图进行索引,同时在文档新增,修改,删除的时候对这些索引进行更新。
    支持复制的分布式架构

  3. REST API
    所有的数据都有一个唯一的通过HTTP暴露出来的URI。REST使用HTTP方法 POST,GET,PUT和DELETE来操作对应的四个基本CRUD(Create,Read,Update,Delete)操作来操作所有的资源。

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

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

couchdb_第1张图片
亲测确实是,另外-vX加v这样可以出更多信息方便debug

view/design_view

couchdb有一个go库,但可能不够用,不过可以再包装一下

你可能感兴趣的:(couchdb)