CouchDB —— 可以期待的美好未来
有关 CouchDB 的最新动向是: Damien Katz 已经离开了 IBM ,他和他的团队,在 200w $ 投资的帮助之下,开始创业。美国投资人的魄力与专业素养,让我这个中国软件人羡慕不已,什么时候我们中国也会出现这种“纯粹谈技术就能够决定是否投你”的投资人呢?新公司名叫 Couch IO (请注意,名字当中,没有出现 DB 这两个字母)。是的,开源软件界备受瞩目的新星 —— CouchDB 团队已经踏上了全新的旅程,他们正朝着下一个目标进发。我很愿意见到他们取得成功!

在 CouchDB 狐狸书 中,作者 Jan Lehnardt 描述了一种全新的 Web 开发模式,有这样一句话来形容这种新的开发方式。
CouchDB has changed the way I think about developing web applications
在有着 10+ 年 Web 开发经验的我看来,尤其是在确实理解了他们心目中的开发方式之后,我觉得,这并不是一句阿谀奉承的面子话。而是,实事求是地说 —— 完全没有夸张的成分。
我在这里极其“概略”的介绍一下这种匪夷所思开发方式的若干基本要素:
- CouchDB 是一个 NO-SQL 的“文档数据库”,以 B-Tree 提供 Powerful 的数据存储与访问能力
- CouchDB 是追加型数据库,其内部以 MVCC 机制管理每个文档的不同版本
- CouchDB 采用了一种没有中心节点的架构设计,数据可以以数据库为单位,在多个 CouchDB 节点之间互相同步,数据同步时,也用 MVCC 来保证数据同步的一致性
- CouchDB 以 Http Restful 的方式对其中存储的文档提供最基本的 CRUD 接口,也就是说能够直接以 Ajax 方式使用这些接口
- CouchDB 实现了服务端逻辑的扩展机制,即,可采用 JavaScript (也可以用其他语言)定义 View ,这个 View 会在 Server 端以 Map-Reduce 方式来运行,中间结果也被 B-Tree 保存,当数据变化时,只需重新 Map 此条数据即可保持同步。也就是说,一旦 View 定义好,查询结果就已经准备好了,取用之时,无须计算
- 上述逻辑扩展机制的“服务端代码”也被储存在一类特殊的文档之中,简而言之,这些“服务端代码”在绝大部分的情况下,都可以被当作“普通数据”来对待,尤其是,同样可以在节点之间同步
- 文档可以带附件,想带多少带多少,想带什么带什么,随便带,没限制。比方说,Browser 客户端会用到的 HTML、CSS、脚本、图片什么的
PS. 上面描述的这些正处在迅速的进化之中……包括身份验证,同步过滤,URL Mapping 等等,所有需要用到的一切,正在迅速被增加进来。
已经呼之欲出 —— CouchDB 将会进化成为一个 AppServer!虽然还处在非常早期的阶段,仍然缺少拼图的一些重要部分,但我们已经可以大致的窥见这头犀利 AppServer 的一些只鳞片爪。
- 服务端脚本 —— 纯 JavaScript 开发环境
- 特殊文档 —— Web 应用本身就是一个文档
- 程序同步 —— 一键安装 Web 应用
- 数据同步 —— 离线 Web 应用
- ……
基于前面提到要素,不难组合出更多妙不可言的特性来,对于日益得到重视的 JavaScript 程序员们而言(实际上,其他程序员也是一样,只是,稍微没有那么“显而易见”而已),未来是一件多么值得期待的事?
我最不能忍受的,即CouchDB仅支持HTTP REST接口,这对性能是个致命的约束
在我看来,对于 CouchDB 而言,HTTP REST 与其说是致命的约束,还不如说是成功的法宝。
相比 Binary 的协议,对于单一连接的通讯效率而言,HTTP 确有 Trade Off,但,HTTP 是无连接协议,因而更具可扩展性(Scalable)。而且,几乎所有的语言都已经内置对 HTTP 协议的支持,无需再做通讯层的包装(于推广有利)。基本上,这就是一个设计决策问题:用单连接通讯效率的相对低下换取支持连接数量上的增加。
实际上,从 CouchDB 所设想的应用场景来看。服务端是 CouchDB + App Code 而它所设计面对的客户端,在很大程度上,直接就是浏览器(或者是程序扮演的浏览器)。以这个“主要应用场景”的角度来说,在性能特性上,显然与 HTTP 要解决的问题完全一致。因而,“基于 HTTP”的设计决策,正是理所应当之事。
我们可以设想,如果 CouchDB 和另外的 Key-Value 存储机制一样,也采用 binary 协议,那么肯定会有一堆开发者来抱怨没有语言原生的接口可用。又或者,作为一个开源项目,因为这个对浏览器不友好的“缺点”,使它仅仅适用于一些特定场合(比如,被当做 MemoryCache 来用),湮灭在大量的同类项目之中,根本就无法达到现有的知名程度,这也亦未可知。
对于性能担忧的解决方案是:客户端的批量模式(One Request Multiple Documents)和服务端的水平扩容(加机器)。对无连接协议(单向通讯)不适的解决方案是,长连接(Comet)。两者都容易理解,无须再做解释。妙的是,这两者几乎都是标准的 HTTP 方式,仍然保持了对于浏览器最大程度上的兼容。
可以设想一幅这样的应用场景:
任何一台裸机(移动设备或者 PC),只需装上 OS + CouchDB + Browser 即可(CouchDB 和 Firefox 都已经是 Ubuntu 的预安装包),象上网本一样,硬件最小化预装。
当我们需要应用的时候,可以经 Browser 进入由 CouchDB 加持的 App Store 页面,选择所需应用,安装到本地的 CouchDB 上(程序以 Couch 文档同步的方式安装到本机),并且可以保持软件的同步升级。
此后,在本地的 localhost 上就可以使用这些应用,数据保存在本地的 CouchDB 之中,离线而且高速。
如果需要数据的同步和备份,通过一个账户系统,就可以将本地的数据(和程序)同步到“云端”的 CouchDB 服务器上,这个同步过程,既可以是随时的(比如 SNS应用),也可以是偶尔的(比如 PDA设备),既可以是显式同步(比如 协作场景),也可以是后台同步(比如 照片管理)。只要使用同一个同步账户,完全可以在另外一台机器上,随时恢复工作场景和数据,继续此前的工作。
相比 Java 描绘的 Write Once Run Anywhere 。CouchApp 集合了 Web 无所不在的亲切界面与 MVCC 无不同步的威力。在我看来,它所描绘的应用场景,更为诱人。
数据库替代app server?这个东西太强大了点吧,不不了解,只是我对试图一统江湖的东西都有点拒绝
这位 fan 兄弟的逻辑好奇怪哦 —— 不了解,您又是怎样知道它的意图是想要一统江湖呢?
虽说被称作 db 但 couchdb 绝对不是传统意义上的 db 。它几乎所有的特性都是建立在 http 之上的:restful 的文档和附件 api,server-side 的 javascript query engine,基于 http 的数据库同步……,作为一个 http-only 的 doc db 这些都是 couchdb 的基本配备。
而,从一个 web 开发者的角度来看,这样的特性组合,距离一个专门针对于 ajax web 应用的 app server 其实已经相差不远。所欠缺的大概只有这么几个部分:URL Mapping、用户认证与权限机制、Document Transform 机制、以及一个合乎潮流而且易于使用的 web 开发框架。这些对于 hacker 级的开发者而言,没有难度,而 couchdb 也是开源的,如果官方团队不做,相信会有很多第三方团队乐于填补这一空白。
couchdb 并未加持什么火箭科技,究其本质而言,它所带来的只是“建立在 http 基础之上的 mvcc 同步”而已,所谓的离线 web 我们也可以将其理解为 localhost web app + 远程同步的一个新称呼,技术本身并没有什么值得稀奇的地方。如果说一统江湖,一时之间,我还真是不知这是从何说起。
couchdb就是有点慢,在对性能要求高的场合就不好用了。
实际上,Flash的socket 已经很成熟,
未来的HTML5.0的socket 也即将出现,
思路应该改变下了,不能总想着客户端一尘不变的,而去适应它
中文部分内容 http://lainuo.info/blog/
和Intersystems公司的CacheDb数据库有点像,后关系型数据库,在医院和金融领域有些客户
Wondering how jonmoss is finding CouchDB.
Hello, blogger, your article very good, looking forward to sharing your latest
哎。。。。任何技术都有其应用的局限性。CouchDB 对于Web 而言,应该在某些应用而言有其优越性。但肯定不是全部。
不知道有没有在读这本书,我们可以一起探讨一下。比如我跑书中的例子老是碰到{“error”:”bad_request”,”reason”:”invalid UTF-8 JSON”} 这样的错误(window,mac都是)不知道该怎么解决。比如跑 couchapp clone就会。
中国对知识产权的保护力度不足,导致中国的知识分子一般都比较浮躁,不能安心的去钻研技术。
这个和Scalaris孰优孰劣,有啥区别呢?http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores这篇文章好像比较推崇Scalaris