CouchDB 简介
CouchDB 是一个 Apache 的开源项目,它是一个面向文档的数据库系统。CouchDB 提供 REST 形式的 API 的访问,并以 JSON 作为数据交换格式。这一点使得 CouchDB 很容易被使用。事实上,支持 HTTP 的编程语言都可以作为 CouchDB 的客户端。它使用 MapReduce 方式来进行数据的访问和索引,在这一点上,函数式编程无疑更加合适:因为 map/reduce 本身就是函数式编程中的概念。
CouchDB 并无意取代关系数据库系统,而是作为一种支持方案呈现。使用关系型数据库,可以进行规整而复杂的关系运算。而在 CouchDB 中,并不存在模式(schema)的概念。比 如一些消息系统,内容管理等,如果使用关系型数据库,当表结构变动时,可能会非常复杂,而且容易出错。但是采用 CouchDB 的松散的 key/value 对来存放,则处理起来会容易的多。一般来说,在 CouchDB 中,文档之间是不应该存在关系的,每个文档都是独立的实体, 但是可能具有某些共性,这些共性可以通过 map/reduce 来抽取。 CouchDB 的工作方式大致如下:
云朵表示一个数据库,其中蓝色的块表示文档,这些文档之间并无直接关联。通过 map 函数,将其中的某些项抽取为一些 key/value 对,然后根据 query 找到用户需要的结果集。 由于 key/value 都可以是复杂的 JSON,因此它的表现力十分强大。 CouchDB 的文档采用 JSON 来表示,一个典型的文档示例如下;
{
"_id": "46efa16cc220f6548696a6e6fc004463",
"_rev": "1-37802625d560be4af0dc18155422fd2b",
"language": [
"Chinese",
"English"
],
"name": "Juntao"
}
每个文档都会带有两个隐式的属性”_id”和”_rev”。”_id”如果在创建文档时不显式的指定,则系统会分配一个 GUID 作为其值。”_rev”是一个内部的版本号,CouchDB 中包含一个 版本控制系统,关于版本控制系统的细节,此处不做讨论。
{$ activeFileHint $}