
CouchDB
Apache Software Foundation的诸多项目中,目前最让我关注的是“沙发”:CouchDB。
简单来说,CouchDB是一个文档数据库。最大的特色是其访问接口采用RESTful形式的API。
CouchDB现在发布的是0.9版,核心代码的开发还在进行中。虽然离实际使用还有一段距离,但其结构已基本成形,该有的功能也差不多都有了,已经可以拿来玩玩了。
下面是CouchDB的一些主要功能特性:
- 版本化的半结构化文档存储。
一般的txt文档,word文档都是非结构化文档。关系数据库的表是结构化的“文档”。半结构化文档当然是介于非结构化与结构化之间的文档。在CouchDB里,一个文档由很多字段或附件构成。不过,与数据库的表结构不同,文档的schema不用事先定义,可以在运行阶段随时定义。更准确一点说,CouchDB的文档不需要定义schema,爱放啥放啥。
CouchDB的每个文档都有一个唯一的文档ID。同时,对同一文档,还保留其更新的所有版本。
- 基于view的文档关联及检索
从文档存储的角度看,在CouchDB存储的各个文档都毫不相干。文档之间即不需要有共同的schema,文档之间也没有任何的外键关联。
对于每个文档,可以通过文档ID及版本号直接访问。
但在实际的应用中,文档总会分类别,文档之间也总会有关联。在CouchDB中,通过定义视图(view),来定义文档之间的关联。view是通过JavaScript定义的,与文档存储无关的,面向应用的文档集合规则。view动态创建,同时创建view的index以加速文档的检索。
- 文档的分布存储与同步
文档可以存储在不同的服务器中,甚至可以存储在client中。
通过双向复制实现文档的同步。
- 全文检索
基于Lucene实现文档的全文检索。现在的版本貌似还未完成。
- 文档访问权限控
CouchDB提供了文档级别的读写权限控制,并且可扩展。
- 基于RESTful的访问接口
对于文档的访问,完全基于RESTful形式的API,CouchDB内置HTTP服务器,接受标准HTTP请求,返回JSON格式结果。
怎样?这些功能有足够的吸引力吧!
除了RESTful,以上功能,如果加个工作流引擎,放在十几年前的话,活脱脱就是Lotus Domino。
想当年Domino在OA及公文管理领域打遍天下无敌手。
或许是以前太成功了,太需要考虑对现有系统的兼容及对现有客户的支持,在转向对Web支持时,其半调子的方案实在让人失望。到现在完全风光不在。
CouchDB与Domino也真的很有渊源。CouchDB项目的创建者Damien Katz本来就曾是Lotus的雇员。他为了开发CouchDB,卖房搬家,让人赞叹。CouchDB吸取了很多Domino的思想,但完全是个基于Web标准的开放的产品。
CouchDB吸引我还有一个原因,它的核心完全是用Erlang开发。
Erlang两年前一炮打红,可惜后来叫好不叫座。正儿八经用Erlang开发的项目并不多。可能是FP与大多数人的编程思路差别实在太大。期待CouchDB能成为一个好案例。
另,CouchDB自带的Web管理界面,叫Futon。名字起得有点意思。
One Comment
cooool
Post a Comment