CouchDB与Amazon的工具是相似的,但是它有一些特别之处。你仍旧以行的形式来存储key-value pairs,但是这些key-value pairs可以是任何标准的JSON(JavaScript Object Notation)数据类型,如布尔和数字类型。值的范围不局限于1024字节长度的字符串,有办法可以让其存储长数值,甚至是图形。所有的请求和响应格式化为JavaScript。没有基于XML的Web Services,只有JSON.
最大的不同在于写查询语句。CouchDB可以通过JavaScript单独写map functions和reduce functions。一个简单的查询或许仅仅就是一个map function,带有一个“If”子句来测试数据比某个数值大还是小。只有在你试图计算统计由map functions查询的数据时才会用到reduce functions。发现计算行的个数很容易办到,但是也有可能丢失了一些其它很酷的特性,因为map function只能由JavaScript来写。我除了发现计算出匹配的数目,至于其他的非学术的用途我还没有弄清楚。文档包括了一个给人印象很深刻的reduction function,用来归并统计的,但是我不知道CouchDB真的是否是处理这类事情的正确工具,如果你需要更复杂的统计,妥当的就是坚持使用传统的数据库,获得统计报表。
这个项目还有一些限制的。项目的首页称之为“一种分布式,容错,自由面向文档模式的数据库,”没有一些人工干预你是不会获得分布式和容错功能的。CouchDB有一个好看的AJAX用户界面,包含了一个form表单,能让你复制数据库。但是还不是自动的。
CouchDB计划会增加存取控制和安全模式,但是没有以文档的形式展示出来,在API中也没显示。他们设计的初衷就是使用纯JavaScript,取代SQL,或者其他的语言,这是一个好的主意,你不会获得或者失去权限阅读文档,你能写JavaScript函数来返回true或者false结果。
使用纯JavaScript也并非坏事。当我使用这些数据库的时候,我很快发现有人能够在客户端开发一个安全模型层,使用一些不错的加密技术。在客户端加强安全控制,就能减少服务器端的工作,我在《半透明数据库》一文中有一些介绍。
这个特点正在驱使一些极端用户使用CouchDB作为整个服务器栈。J. Chris Anderson,项目的委托人之一,写了一篇文章,证明CouchDB是一个应用程序服务器的全部所需。用于显示和与数据交互的业务逻辑是用JavaScript编写的,从CouchDB下载后是一个JSON数据包。
在Anderson的眼里,当所有的功能都能用JavaScript实现,在服务器上使用Ruby、Python、Java、 PHP没有什么大的意义。这种看法或许有些极端,因为总会遇到一些情况,客户机器不能保证能正确的实现一些功能,客户端的客户比我们知道的东西少。像CouchDB这种轻量级的工具使得人们开始考虑完成一项工作真正需要多少代码。