Couchio公司于2010年7月14日宣布,NoSQL(非关系型数据库)的代表之一CouchDB 1.0正式发布。
这个正式版本除了稳定性大大提高之外,还有两大重要改进:
1. 内部测试表明,1.0版本的读写速度比之前的版本(0.11.2)提高300%。
2. 支持Windows。
此外,提供了鉴别系统(authentication system),无需创建用户模型,即可编写CouchApp(一种保存在数据库中的应用),大大简化了开发;还有复制选项(Replicator option),可以灵活地通过复制来编写自定义系统。
需要注意的是,CouchDB的核心存储引擎早已非常稳定,此次改进主要在改善一些API和外围功能。
CouchDB的核心开发人员Chris Anderson(也是Couchio公司创始人之一,CFO)专门撰写了一篇博客“Reflections on CouchDB 1.0”,深情地回忆往昔:2007年他的创业公司使用CouchDB,网页抓取速度提高了3个数量级;2008年他提出了CouchApp的概念;2009年成立Couchio公司;而过去的18个月,CouchDB的性能、安全性和易用性有了长足提高。
--------------------------------------------------------------------------------
CouchDB是一个Apache旗下的开源项目,由主要开发者组成的商业公司Couchio维护,是一种用 Erlang语言开发的分布式文档数据库,以RESTful JSON API提供服务,适合从任何支持HTTP请求的环境进行访问,可以使用JavaScript以及其他各种语言以MapReduce的形式查询和索引。它属于NoSQL的一种,底层是一个B+树引擎,与MongoDB和Lotus Notes的数据库系统(以及微软的SharePoint)类似。
目前在产品中成功应用CouchDB的案例有BBC的CMS系统、知名IM Meebo等。更多应用参见这里。
Erlang专家赵东炜在博客中对CouchDB做过这样的介绍:
1. CouchDB 是一个 NO-SQL 的“文档数据库”,以 B-Tree 提供 Powerful 的数据存储与访问能力
2. CouchDB 是追加型数据库,其内部以 MVCC 机制管理每个文档的不同版本
3. CouchDB 采用了一种没有中心节点的架构设计,数据可以以数据库为单位,在多个 CouchDB 节点之间互相同步,数据同步时,也用 MVCC 来保证数据同步的一致性
4. CouchDB 以 Http Restful 的方式对其中存储的文档提供最基本的 CRUD 接口,也就是说能够直接以 Ajax 方式使用这些接口
5. CouchDB 实现了服务端逻辑的扩展机制,即,可采用 JavaScript (也可以用其他语言)定义 View ,这个 View 会在 Server 端以 Map-Reduce 方式来运行,中间结果也被 B-Tree 保存,当数据变化时,只需重新 Map 此条数据即可保持同步。也就是说,一旦 View 定义好,查询结果就已经准备好了,取用之时,无须计算
6. 上述逻辑扩展机制的“服务端代码”也被储存在一类特殊的文档之中,简而言之,这些“服务端代码”在绝大部分的情况下,都可以被当作“普通数据”来对待,尤其是,同样可以在节点之间同步
7. 文档可以带附件,想带多少带多少,想带什么带什么,随便带,没限制。比方说,Browser 客户端会用到的 HTML、CSS、脚本、图片什么的
可以看到,CouchDB是完全针对Web量身定制的,它本身就是一个HTTP服务器,可以直接存放应用程序(即所谓CouchApp),无需中间层,这一点具有巨大的潜力。Couchio公司本身也基于这一特性开始提供云计算服务。提供类似服务的还有Cloudant公司。
同时,安装在本地的CouchDB,Web应用的离线体验可以大大改善,非常适合各种移动设备,这使CouchDB有潜力成为云端数据库。事实上,Mozilla已经基于CouchDB开发了一个名为Raindrop的实验项目。Android和Palm上的CouchDB也已经开发出来。这方面的更多想法可以参考这篇Katz访谈和这篇文章。
CouchDB的优点
易用,不仅开发方便,也减少了运维的工作量。
特别适合CMS等某些Web开发场景,有移动设备应用潜力。
有商业公司支持。
CouchDB的缺点
占用空间大。
性能相比同类产品较差。
缺乏企业级应用所需要的低成本分区/分片支持。(MongoDB即将支持shards)
开发人员需要切换原有关系数据库中形成的思维模式(当然,这是NoSQL的共同问题)。
(以上优缺点欢迎大家讨论。)
CouchDB的历史
项目启动于2005年4月,IBM Lotus Notes产品的开发人员Damien Katz(曾在MySQL工作,现在是Couchio公司的创始人和CEO)在同月12日的一篇博客(这篇博客中有一些有趣的感悟,推荐阅读)中说,自己在开发一个大型的对象数据库(目的是用来作为极大规模RSS聚合程序的后端),系统的最底层是一个存储系统,名字Couch,来自cluster of unreliable commodity hardware(不可靠廉价硬件群集)的缩写。CouchDB的最初代码是用C++编写的,当时Katz也考虑过Ruby和Python,但当时 Ruby不够成熟,Python总是出现他不知道的行为,所以放弃了。
在这篇访谈中,Katz谈到,CouchDB其实是将Lotus Notes的核心剥离出来,去芜存菁的产物。
出于容错考虑和并发问题(C++必须用传统方式处理线程、锁、消息等),CouchDB改为基于Erlang OTP平台,代码也全部改用Erlang编写。Katz在自费支持开发两年后,决定以GPL许可证形式开源。2008年2月,CouchDB成为 Apache的孵化项目,许可证也改为Apache。2008年11月,晋升Apache顶级项目。
IBM曾经资助CouchDB,允许Katz全职从事项目的开发。
2009年,Katz和Chris Anderson等一些同仁组建Relaxed公司,同年11月公司获得200万美元风险投资,改名为Couchio。