当前位置:编程学习 > php >>

针对PHP开发人员的CouchDB基础知识

  如果您是位典型的 PHP 开发人员,就不难通过以往的项目得到这样一个结论:在多数(如果不是全部)情况下,为了进行动态数据处理,您都会让 PHP 与数据库后端进行对话;而在这些实例中,99% 的情况下使用的都是 MySQL。

  如今,使用关系型数据库无可厚非。如果所处理的数据结构复杂,并具有多种关系,那么这么做是很合理的。您可以顺利地(或是不太顺利地,取决于您对 SQL 的熟悉程度)进行对模式、数据关系、表等等的处理。

  不过,您所从事的项目有时也会让您不经意间心生疑问:“为什么我要做所有这些工作?” 您所从事的这个项目包含了一些简单的或难以预测的数据 — 在不同的日子获得的数据字段可能不同甚至事务之间的数据字段都不尽相同。若是创建一个模式来预测将会出现什么数据字段,结果很可能会得到内含大量空字段的表或大量的映射表。

  对于这些项目,您需要采用一种不同的方式 — 不涉及关系型数据库。在这些情况下,您需要的是一个基于文档的、没有模式的、具有扁平地址空间的特别数据库。简言之,您需要 Apache CouchDB。

 什么是 CouchDB?

  CouchDB 是(根据 Apache CouchDB 网站):

  一个文档数据库服务器,可通过 RESTful JSON API 访问。
  为特殊目的而设计,无模式,具有扁平地址空间。
  分布式的、特性丰富、具备双向冲突检测及管理的增量复制。
  可查询、可索引、具有一个面向表的报表引擎,使用 JavaScript 作为引擎的查询语言。
  这意味着,您可以创建一个能够接受 JSON 文档的 CouchDB 数据库。每个文档均有一个惟一的修订 ID 和自身结构,而且所有文档均存储于同一个扁平的集合内。例如,假设您设置了一个简历集。第一个简历具有的字段包括:名、姓、电话号码、电子邮件地址、Twitter 帐户、特长以及详细的工作经历。而第二个简历则只有名、姓、电子邮件地址以及一个简短的工作经历。这种差异足以使关系型数据库变得非常不适合,但对于 CouchDB,这点差异稀松平常。

  简言之,一个 CouchDB 文档就是一个由多个命名字段组成的对象。这些字段的值可以是字符串、布尔值、数字、日期、顺序列表或关联映射。清单 1 展示了一个示例简历文档。

清单 1. 一个简单的 CouchDB 文档


 

  1. {  
  2. "Firstname": "Tom"  
  3. "Lastname": "Myer"  
  4. "Twitter": "@myerman"  
  5. "Email": "tom@example.com"  
  6. "Skills": ["php","couchdb","xml","json"]  
  7. "Work History": ....  
  8. }  

到目前为止,如果您习惯了使用 JSON,那么不会觉得有太大出入。即便您不习惯,您仍然可以将此文档对应成您所熟悉的东西,比如一个 PHP 数组。实际上,您可以将这些内置的 JSON encode/decode 函数用于 CouchDB,或者您也可以选择一种更为面向对象的方式。

为了从一个集合查询信息,您可以通过 RESTful JSON API 使用各种便利的查询方法。使用 JSON 简化了很多问题。还有一点,作为一个熟悉 JavaScript、Ajax 和 JSON 的 Web 开发人员,您无需掌握 SQL 也能完成任务。

在继续之前,最好暂停一下,先来着重强调几点。CouchDB 不是一个关系型数据库。这一点我可能早就说过了,但是它需要反复强调。不要试图以关系型数据库的方式使用 CouchDB,比如插入 ID 字段来帮助理清文档间的关系。与创建关系不同,您需要将想要的内容塞入到文档,然后继续。

此外,CouchDB 亦不是一个面向对象的数据库。它不是什么本地对象、持久数据层供您用作面向对象结构的基础。千万不要这么认为。

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,