如果您是位典型的 PHP 开发人员,就不难通过以往的项目得到这样一个结论:在多数(如果不是全部)情况下,为了进行动态数据处理,您都会让 PHP 与数据库后端进行对话;而在这些实例中,99% 的情况下使用的都是 MySQL。
如今,使用关系型数据库无可厚非。如果所处理的数据结构复杂,并具有多种关系,那么这么做是很合理的。您可以顺利地(或是不太顺利地,取决于您对 SQL 的熟悉程度)进行对模式、数据关系、表等等的处理。
不过,您所从事的项目有时也会让您不经意间心生疑问:“为什么我要做所有这些工作?” 您所从事的这个项目包含了一些简单的或难以预测的数据 — 在不同的日子获得的数据字段可能不同甚至事务之间的数据字段都不尽相同。若是创建一个模式来预测将会出现什么数据字段,结果很可能会得到内含大量空字段的表或大量的映射表。
常用缩略语对于这些项目,您需要采用一种不同的方式 — 不涉及关系型数据库。在这些情况下,您需要的是一个基于文档的、没有模式的、具有扁平地址空间的特别数据库。简言之,您需要 Apache CouchDB。
什么是 CouchDB?
CouchDB 是(根据 Apache CouchDB 网站):
这意味着,您可以创建一个能够接受 JSON 文档的 CouchDB 数据库。每个文档均有一个惟一的修订 ID 和自身结构,而且所有文档均存储于同一个扁平的集合内。例如,假设您设置了一个简历集。第一个简历具有的字段包括:名、姓、电话号码、电子邮件地址、Twitter 帐户、特长以及详细的工作经历。而第二个简历则只有名、姓、电子邮件地址以及一个简短的工作经历。这种差异足以使关系型数据库变得非常不适合,但对于 CouchDB,这点差异稀松平常。
简言之,一个 CouchDB 文档就是一个由多个命名字段组成的对象。这些字段的值可以是字符串、布尔值、数字、日期、顺序列表或关联映射。清单 1 展示了一个示例简历文档。
清单 1. 一个简单的 CouchDB 文档
到目前为止,如果您习惯了使用 JSON,那么不会觉得有太大出入。即便您不习惯,您仍然可以将此文档对应成您所熟悉的东西,比如一个 PHP 数组。实际上,您可以将这些内置的 JSON encode/decode 函数用于 CouchDB,或者您也可以选择一种更为面向对象的方式。
为了从一个集合查询信息,您可以通过 RESTful JSON API 使用各种便利的查询方法。使用 JSON 简化了很多问题。还有一点,作为一个熟悉 JavaScript、Ajax 和 JSON 的 Web 开发人员,您无需掌握 SQL 也能完成任务。
在继续之前,最好暂停一下,先来着重强调几点。CouchDB 不是一个关系型数据库。这一点我可能早就说过了,但是它需要反复强调。不要试图以关系型数据库的方式使用 CouchDB,比如插入 ID 字段来帮助理清文档间的关系。与创建关系不同,您需要将想要的内容塞入到文档,然后继续。
此外,CouchDB 亦不是一个面向对象的数据库。它不是什么本地对象、持久数据层供您用作面向对象结构的基础。千万不要这么认为。
安装 CouchDB
如果您使用的是 Mac OS X,CouchDB 的安装过程十分简单:
在 Linux 内安装您的 developerWorks 编辑能够在他的 Ubuntu Linux 笔记本上以如下两个步骤安装 CouchDB:
sudo apt-get install couchDB sudo /etc/init.d/couchdb start
此软件已经处于存储库内并会自然加载。
为了查看 CouchDB 的实际效果,在您的浏览器内键入 :5984/_utils/index.html。Futon 实用工具就会出现,如图 1 所示。
图 1. Futon 实用工具

在 Windows® 系统上,过程将会有些复杂,因为您将需要先安装 Microsoft® C 编译器 Cygwin、其他的一些前提条件(比如 cURL、ICU 和 SeaMonkey)、下载并安装 Erlang 和 Couch 源代码、根据 README 文件对其进行配置,然后才能进行一次完整的安装。这一过程在 CouchDB wiki(参见 )内有详细的描述。您还将能够找到针对 Linux®、Berkeley Software Distribution (BSD) 和其他环境的指导。
使用 CouchDB API
在进入 PHP 之前,最好是先对 CouchDB API 有些了解,此 API 可通过 HTTP GET 和 PUT 请求访问并返回 JSON 格式的数据。不管您使用的是何种语言 — PHP、Microsoft Active Server Pages (ASP)、Ruby、Python 或更为简单的 jQuery Ajax 函数,这种设置都会使从 Web 应用程序存储和检索数据得到简化。
本节展示如何使用这个 cURL 命令行工具向 CouchDB 发出 GET、POST、PUT 和 DELETE 请求。掌握了这个 API 之后,就可以借助一个特别的 PHP 包装器简化开发任务。
您首先需要运行的(仍然是从 Terminal 窗口)是这个命令:curl :5984/。随后,应该会得到类似于 {"couchdb":"Welcome","version":"0.10.0"} 的一个响应。这只是为了告诉您 CouchDB 已经启动并运行以及所使用的是何版本。如果您没有看到这个消息,那么就请重新进行安装和配置直至 CouchDB 启动并运行。
现在,尝试列出在 CouchDB 内设置的所有集合。运行 curl -X GET :5984/_all_dbs。
如果 CouchDB 是初次安装,应该会看到响应 [],这意味着没有任何集合或数据库(方括号代表的是一个空的 JavaScript 数组)。请注意在这个 cURL 命令中,使用了 -X 选项来显式指定一个 GET 操作。
现在,让我们通过创建一个数据库来解决该问题:
curl -X PUT :5984/songs