[翻译]MongoDB:PHP开发者应该知道的关于 MongoDB 的 5 件事儿

原文:http://technosophos.com/content/mongodb-5-things-every-php-developer-should-know-about-mongodb

感觉这篇文章说了一些 MongoDB 的要点,适合 MongoDB 扫盲使用。所以翻译出来,造福于民。虽然文章是针对 PHP 开发者写的,但实际上 python、ruby 或者其他 web 开发人员也可借鉴。
—————————-这里是译文分隔线—————————–

2010年将被记住,因为这一年 SQL 死了;这一年关系数据库从一线退下;这一年开发人员发现他们没必要为了持久化数据,将每个对象转化为表格结构。

2010年是文档数据库的一年。尽管一直在稳步发展势头,通过过去七年多的发展,现在有各种稳定的文档数据库——从基于亚马逊和谷歌的云,到各种开放源码工具,尤其是 CouchDBMongoDB

那么,MongoDB 是什么?这里的五件事是每个 PHP 开发人员应该知道的:

1、MongoDB 是一个独立的服务器
2、它是基于文档的,而不是基于表格的
3、它是非结构化的
4、不必去学习另一种查询语言
5、它具有强大的 PHP 支持

阅读下文,可以了解关于这些的详细内容。

1、MongoDB 是一个独立的服务器

如 MySQL 或 PostgreSQL 一样,MongoDB 侦听端口以便接入。它提供了用于查询,创建,更新和删除的工具。从理论上讲,你使用它的工作方式与你使用 MySQL 或 PostgreSQL 的工作方式相同:连接,执行任务,并关闭连接。

2、跟行和表格说再见,向文档和集合说你好

MongoDB 存储整个文档,代替了存储在表的行数据中。如果有一个含有标题、多位作者、内容和标签的“文章”数据,该数据基本上看起来像这样:

<? php
array(
    'title' => 'Hello World',
    'authors' => array('John', 'Sally', 'Jim'),
    'body' => 'Hello world',
    'tags' => array('tag1', 'tag2', 'tag3') 
);
?>

要注意的关键,上面的例子是一个记录——一个文档——实际上是像文档一样存储,并支持同一字段有多个值的情况。没有必要将数据转化为通常意义上的表中,因为,根本没有表。

现在,作为将文档存储在表中的替代方案,它们存储在一个集合里,这可以认为是一个大的文档列表。

3、MongoDB 是非结构化的

MongoDB 没有结构化语言。如果你想创建一个新的文档类型,你不用做任何事来告诉数据库关于这些数据的结构,而仅仅是存到数据库中即可。

在第 2 点中,我虚构了一个文档。现在,如果我想在这些字段上定义文章类型,我所要做的仅仅是存储对象到数据库如果我想定义它与这些领域的文章类型,首先,我需要做的就是写入数据库中的对象。日后,如果我决定增加一些什么,例如,一个日期?我只是从数据库中获得文章,添加日期字段,并保存它。

相关的数据类型是什么?简单的说,MongoDB 使用类似 JavaScript 或 PHP 的类型处理方式。也就是说,数据库是灵活的弱类型。

虽然有一些数据是有限制条件的(大块的数据可能需要一些明确的处理),但在大多数情况下,你可以像写 PHP 代码一样编写你的 MongoDB 代码。

4、不必去学习另一种查询语言!

还记得这些你写的数据库抽象层吗?还记得那些你处理过的 ORM 层吗?现在,你可以将它们全部丢弃。在 Mongo 中你不需要他们。

MongoDB(当使用 PHP 驱动)没有很多查询语句。在大多数情况下,只需给它一个数组指定你想要的信息,然后它会给你返回文档的数组。

如果你想运行一些非常复杂的查询(如Map-Reduce操作),可以向MongoDB 传递 JavaScript,其内部的 JavaScript 引擎可以解析这个脚本。

5、PHP 和 MongoDB 是上天注定的一对搭档

PHP 已经有很好的 MongoDB 支持。Mongo 驱动可以通过 PECL 扩展安装到 PHP,这意味着运行 pecl 安装 mongo 非常简单。(早些时候我写了一篇短文,详细介绍了安装过程

然后,你可以立即使用 Mongo 的 API 开始工作。复杂性,站在 PDO 的阵营中。它不够简单,but there should be nothing foreign about it for anyone who has done database development before.(注:不知道怎么翻译,不是关键,大家自悟吧)但是这对于之前做过数据库开发的人来说,不会很陌生。

API 文档(上面有连接)包括了指引和许多例子,所以你应该能够在一个很短的时间里学会。这里有一些你需要注意的:

* MongoDB 是神速的
* 开发时间也短,因为没有结构需要管理,和很少(如果有的话)的数据映射。
* 学习曲线很平滑,因为没有新的查询语言学习。
* 代码是简洁的。毕竟,无须任何其他 ORM,封装可以非常简单。
* 你的代码是未来的保证。向你的对象增加更多的字段是很轻松的——甚至复杂的字段。因此,需求变化了,你可以很快修改代码以便适应。

我用 MongoDB 开发只有一段时间,但这足以让我意识到它有改变游戏规则的潜力。这也是让我主张使用新一代的文档数据库代替基于 SQL 的关系数据库的原因。将关系数据库留在尘土里——或者,更可能的是让它们做它们能做好的事情:存数属于行和表的数据。

Join the Conversation

9 Comments

  1. but there should be nothing foreign about it for anyone who has done database development before.
    但是,它对已经有(关系)数据库开发经验的人来说已经不再陌生。

    不知道这样翻译合不合适。

  2. 赞,blog内容相当不错。学习了。

    那句话的意思应该是“但是,对那些以前就搞过数据库开发的人来说,这也没什么太古怪的。”

  3. 感谢大家,受到启发!
    foreign 这里我本来准备翻译成“外行”,或者北方经常说某个人不懂行的“老外”,我觉得会贴切一些。但是翻译成“外行”或者“老外”词性有些不准确。整句下来更难翻译通顺。

    不过,综合 Rebill 和 eddix 的建议,翻译成如下:“但是这对于之前做过数据库开发的人来说,不会很陌生。”

    谢谢大家!

  4. 老大,我在Win32环境下测试了MongoDB。一切都正常,只是在PHP下无法返回到任何数据……

    不知道是哪里做得不对?

  5. but there should be nothing foreign about it for anyone who has done database development before.
    但是,它对已经有(关系)数据库开发经验的人来说已经不再陌生。

    不知道这样翻译合不合适。

  6. 赞,blog内容相当不错。学习了。

    那句话的意思应该是“但是,对那些以前就搞过数据库开发的人来说,这也没什么太古怪的。”

Leave a comment

Your email address will not be published. Required fields are marked *