couchdb:面向 PHP 开发人员的 CouchDB 基础知识来源: 发布时间:星期二, 2010年5月18日 浏览:1次 评论:0
如果您是位典型 PHP 开发人员就不难通过以往项目得到这样个结论:在多数(如果不是全部)情况下为了进行动态数据处理您都会让 PHP 和数据库后端进行对话;而在这些例子中99% 情况下使用都是 MySQL
如今使用关系型数据库无可厚非如果所处理数据结构复杂并具有多种关系那么这么做是很合理您可以顺利地(或是不太顺利地取决于您对 SQL 熟悉程度)进行对模式、数据关系、表等等处理 不过您所从事项目有时也会让您不经意间心生疑问:“为什么我要做所有这些工作?” 您所从事这个项目包含了些简单或难以预测数据 — 在区别日子获得数据字段可能区别甚至事务的间数据字段都不尽相同若是创建个模式来预测将会出现什么数据字段结果很可能会得到内含大量空字段表或大量映射表 常用缩略语 Ajax:异步 JavaScript + XML API:应用编程接口 GUID:全局惟标示符 HTTP:超文本标记语言 JSON:JavaScript 对象注释 REST:具象状态传输 SQL:结构化查询语言 UUID:通用惟标识符 对于这些项目您需要采用种区别方式 — 不涉及关系型数据库在这些情况下您需要是个基于文档、没有模式、具有扁平地址空间特别数据库简言的您需要 Apache CouchDB 什么是 CouchDB? CouchDB 是(根据 Apache CouchDB 网站WebSite): 个文档数据库服务器可通过 RESTful JSON API 访问 为特殊目而设计无模式具有扁平地址空间 分布式、特性丰富、具备双向冲突检测及管理增量复制 可查询、可索引、具有个面向表报表引擎使用 JavaScript 作为引擎查询语言 这意味着您可以创建个能够接受 JSON 文档 CouchDB 数据库每个文档均有个惟修订 ID 和自身结构而且所有文档均存储于同个扁平集合内例如假设您设置了个简历集第个简历具有字段包括:名、姓、电话号码、电子邮件地址、 Twitter 帐户、特长以及详细工作经历而第 2个简历则只有名、姓、电子邮件地址以及个简短工作经历这种差异足以使关系型数据库变得非常不适合但对于 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 XCouchDB 安装过程十分简单: 在 Linux 内安装 您 developerWorks 编辑能够在他 Ubuntu Linux 笔记本上以如下两个步骤安装 CouchDB: sudo apt-get couchDB 此软件Software已经处于存储库内并会自然加载 打开个 Terminal 窗口并键入 sudo port couchdb 在系统提示后键入您根密码 启动 MacPorts 来安装所需 CouchDB 包 从 Terminal 窗口运行如下命令来检索最后分钟所做任何更改或依赖项:sudo port upgrade couchdb 要使 CouchDB 启动起来并运行在 Terminal 键入如下命令: sudo launchctl load -w /opt/local/Library/LaunchDaemons/org.apache.couchdb.plist 这会启动 CouchDB 服务器并保持它持续运行所以只要重启 Mac它就会随的启动 为了查看 CouchDB 实际效果在您浏览器内键入 http://127.0.0.1:5984/_utils/index.htmlFuton 实用工具就会出现如图 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 http://127.0.0.1:5984/随后应该会得到类似于 {"couchdb":"Welcome","version":"0.10.0"} 个响应这只是为了告诉您 CouchDB 已经启动并运行以及所使用是何版本如果您没有看到这个消息那么就请重新进行安装和配置直至 CouchDB 启动并运行 现在尝试列出在 CouchDB 内设置所有集合运行 curl -X GET http://127.0.0.1:5984/_all_dbs 如果 CouchDB 是初次安装应该会看到响应 这意味着没有任何集合或数据库(方括号代表是个空 JavaScript )请注意在这个 cURL 命令中使用了 -X 选项来显式指定个 GET 操作 现在让我们通过创建个数据库来解决该问题: curl -X PUT http://127.0.0.1:5984/songs 在运行上述命令后会得到响应 {"ok":true}现在您知道您可以查看 ok 属性来确认成功和否再次运行 curl -X GET http://127.0.0.1:5984/_all_dbs结果会得到个非空:["songs"]并且您 CouchDB 例子内具有这样个数据库:songs 现在尝试创建另个名为 songs 数据库如果您再次运行 curl -X PUT http://127.0.0.1:5984/songs 将会获得个如下所示消息: {"error":"file_exists","reason":"The database could not be created, 所以您可以很容易地查看 error 属性来确认问题发生和否 创建第 2个名为 foobar 数据库: curl -X PUT http://127.0.0.1:5984/foobar 如果运行 curl -X GET http://127.0.0.1:5984/_all_dbs结果会获得响应 ["songs","foobar"]为了去掉第 2个数据库可以向它传递个 DELETE : curl -X DELETE http://127.0.0.1:5984/foobar 运行 curl -X GET http://127.0.0.1:5984/_all_dbs 表示您已经回至 ["songs"] 现在继续在 songs 数据库内创建些文档毋庸置疑您想要在这个数据库内存储些歌曲这些歌曲具有曲名、艺人名称和专辑名称字段要创建个文档遵循如下这个模式: curl -X PUT http://127.0.0.1:5984/songs/*id* -d '{ *json_data* }' 注意到先是数据库名称随后是 ID(要求 ID 不仅要在这个 CouchDB 例子中惟而且还要尽量在所有例子中惟)再后来是 JSON 数据 如何获得惟 ID?可以使用个 UUID(或个 GUID)作为惟 ID或者也可以创建某种综合了各种小块数据自然键(比如歌曲名中用下划线代替空格再加上时间戳)或者是让 CouchDB 为您创建个惟 ID (这个过程很慢)上述方式都不错只是不要像在 MySQL 环境内那样使用自动增量值 现在向您数据库内输入首歌曲: curl -X PUT http://localhost:5984/songs/whatever_you_like -d \ 请注意我对这个惟 ID 采用了个十分简单方式(使用了个简化了歌曲名称用下划线代替了空格)这种简单方式对于目前需要还能满足幸运是在 PHP 内将要使用包装器会帮助您创建更好 ID也请注意我立即收到了个 “ok” 响应并且其中文档 ID 和 rev 属性还告知了所设置修订版本 要查看刚刚添加这个文档可以尝试: curl -X GET http://localhost:5984/songs/whatever_you_like 如果您直在 Futon 内尝试应该能够单击这个歌曲数据库名并在文档列表内看到个 whatever_you_like 项单击该链接会显示所感兴趣这个文档详细信息如图 2 所示 图 2. 文档详细信息 查看原图(大图) 您逐渐发觉 — 用 JSON 做出 RESTful 请求后就会有事情发生 现在所有这些看上去都很好但是如果您是名 PHP 开发人员可能会疑惑如何将这些综合在起形成自己熟悉东西呢下节会向您介绍面向 CouchDB PHP 包装器 使用 PHP 对于下个步骤您需要从 Github 下载 PHP-on-Couch将解压缩了 /lib 文件夹内容放入您开发区域在设置好工作区域后创建个简单 PHP 应用来和已经设置好这个 CouchDB 数据库(您歌曲集)对话创建个新文件然后将其命名为 index.php并在其内放入清单 2 内代码 清单 2. CouchDB 连接设置 <?php 上述代码充当是到 CouchDB 连接代码并且包含使用此数据库所需所有相关类接着列出和数据库相关全部信息如清单 3 所示 清单 3. 获得数据库信息 try { 得到结果应该类似于清单 4 清单 4. 数据库信息 stdClass Object 接下来从歌曲数据库中检索个文档清单 5 给出了所需代码 清单 5. 从数据库中检索首歌 try { 清单 6 给出了响应 清单 6. 检索到歌曲 stdClass Object 很不错但是如何对个文档进行更新呢?可以做更新有两种:更改现有字段值;添加新字段和新值对于后者可以使用箭头表示法(比如 $doc->_field)然后通过 storeDoc 保存更改清单 7 显示了更新个文档所需代码 清单 7. 更新个文档 $doc->genre = 'hip-hop'; 运行此代码然后就可以检索这个文档 ID 并获得清单 8 内所示结果 清单 8. 更新后文档 stdClass Object 注意到 _rev 属性已经从的前 1-whatever 增加为 2-whatever借此就可以很容易地判断已经发生了更改 那么该如何在数据库内存储个新文档呢?您可以例子化个新对象并使用箭头表示法来填充文档内字段清单 9 显示了所需代码 清单 9. 创建个新文档 $song = stdClass; 结果应该类似清单 10 清单 10. 创建个新文档结果 stdClass Object 结束语 至此您应该具备了开始使用 CouchDB 和 PHP 足够信息您也应该能够轻松创建您基本更新表单并能在日后创建或更新数据库内现有文档PHP-on-Couch 包还为您提供了创建和删除数据库以及使用 CouchDB 视图等其他思路方法总的本文有足够信息可以让您从开始就有个很好起点 0
相关文章读者评论发表评论 |