CouchDB 入门指南

你曾经梦想拥有一个不需要用SQL语句就可以轻松访问的强大数据库吗?Apache CouchDB就是这样的数据库。在这个教程中,你将会学到看到如何开始使用这基于文档的数据库,以及如何用PHP使用它。

认识CouchDB

Apache CouchDB是一种新型的数据库管理系统,这种系统通常叫作NoSQL。NoSQL是在2009年初就浮现出并开始流行起来的,即是non-SQL的数据库。NoSQL是一种非关系型数据存储系统,这打破了长期以来以关系型数据库和ACID特性主导的数据库世界。这种系统的数据存储不需要固定的表。

让我立即喜欢上CouchDB并决定写这篇文章的原因是由于它是基于文档的数据库,而不是将内容存储在表中。这就方便我们自由存储信息,如同存储在数组中一样

这里有个示例文档:

另一个文档可以有这样的数据:

很酷吧。首先我们不会用空间来存储空的或null的列。

其次我们不再需要考虑表和列了!我们要设置信息时,仅需要设置我们需要的信息。但是如果我们没有仔细计划时,这也可能会引发问题。我们以后会详细介绍。

我喜欢CouchDB的另一个原因是因为访问它是通过REST API。对于那些知道REST API是什么的人来说,它可以做许多事情!而对于那些对它没有认知的人来说,就是可以通过JavaScript直接从浏览器获得或设置数据,而不需要在服务器端写PHP代码。

使用CouchDB

现在你知道了它的基本特性,我们开始使用它吧。首先你需要知道PHP没有内置的函数去访问CouchDB数据库。

访问CouchDB我推荐PHPillow,由Kore Nodmann写的一个类库,是我目前为止看到的写的最好的类。其次你需要知道设置和访问CouchDB和MySQL语句不同。我说过,PHPillow是访问CouchDB的最好的方法(我的观点),所以我将在例子中采用它。

CouchDB

数据连接

连接CouchDB实例,phpillowConnection类方便简单:

phpillowConnection->createInstance(‘localhost’, 5984, ‘user’, ‘password’);

连接建立之后,你的文档中可以使用这个连接。

自定义文档

所有的文档都是对一个基本抽象类phpillowDocument的扩展。定义博客文章的完整模型如下:

 

静态属性$type定义了存储文档的类型,对每个文档来说是唯一的。如果你想实现一个模块,在type前加上一个前缀,譬如这个例子中的“blog”。如果你使用的是5.3版本之前的PHP,你需要在文档类中返回文档类型,如上所示。5.3以及5.3版本之上的用户可以使用更普遍的做法,在基文档类中用static::$type来返回文档类型。

$requiredProperties定义了必须要设置的属性。而属性是在$properties中设置,它是在构造器当中初始化的。我们对每个属性都采用了一个验证器来校验输入。有很多更复杂的验证器,如上面例子中的phpillowDocumentArrayValidator,稍后会提到,它的详细描述在API文档中可以找到。

最后你需要定义生成文档ID的方法。CouchDB可以通过ID来完成一些任务,这里通过stringToId()实现。通常你至少有一个唯一的属性。如果不是唯一值的话,文档处理器将会附加上些信息,这样又唯一了。

使用文档

现在要存储数据在上面代码新建的文档中,可以使用下面的代码:

save()函数会将文档存储在数据库中。调用这个函数之后,你可以获得一个神奇的属性:

直接使用这个ID,你可以又从数据库中调出这个文档:

这个方法从数据库中又调出上面的文档。CouchDB中的文档有几个神奇的属性:_id和_rev(为修改文档所用)。除了定义的属性之外,还有个叫revisions的属性,它保存了该文档所有更改过的内容。

如果你更改了一个对象的某个属性,并储存起来,旧的版本也会储存在数据库中,所以没有信息丢失。这个自动保存旧版本的功能可以取消,将$versioned属性设置为false。

我提到修改吗?

是的,我提到了!感谢你注意到了!最后说一次,如果更改了CouchDB数据库中的文档,它自动将其保存到前一个的版本!不再需要再进行多次数据库操作,要确保应用事务可以回滚。

这个教程就到这里了。下次我们将会用PHPillow来处理更多更高级的查询。

 

原文:Jean-Baptiste Jung  编译:伯乐在线 – 唐小娟

【如需转载,请标注并保留原文链接、译文链接和译者等信息,谢谢合作!】

 

2 收藏 1 评论

关于作者:唐小娟

唐小娟:热爱互联网的程煦媛 个人主页 · 我的文章 · 12

相关文章

可能感兴趣的话题



直接登录
最新评论
跳到底部
返回顶部