关系数据库(NoSQL)

虽然我还没有使用过任何新的NoSQL数据库,但我试着通过阅读维基百科文章,博客和窥探一些NoSQL DB文档来了解自己。

我刚刚(重新)阅读2009年8月版的php |架构师,特别是关于非关系数据库的文章和弹出的一些问题,我明白这篇文章对于这个主题非常轻松,但它是足以让我感到困惑......

CouchDB的

我关于CouchDB的主要问题是为什么这么多炒作? 。 从我所理解的CouchDB提供的Web Service中,您可以在数据库中创建数据库和文档,这些文档可以具有多个JSON编码的属性,并且还具有用于跟踪文档修订的特殊_id_rev属性。

几年前,对于一个宠物项目,我编写了一个用于存储文档的类似(?)系统,结构如下所示:

documents/
  document-name/
    (revision) timestamp/
      (contents) md5-hash.txt
        PHP Serialized Data

我确信我错过了一些非常基本的东西,否则(从PHP开发人员的角度来看),这将具有与CouchDB相同的优势并且速度更快 - 无需对JSON进行编码和解码。


Amazon SimpleDB

现在,这个人真的让我的脑袋旋转......作者(罗素史密斯)给出了以下例子:

$sdb->putAttributes('phparch', 'may', array('title' => array('value' => 'May 2009'), 'have' => array('value' => false)));
$sdb->putAttributes('phparch', 'june', array('title' => array('value' => 'June 2009'), 'have' => array('value' => true)));
$sdb->putAttributes('phparch', 'july', array('title' => array('value' => 'July 2009'), 'have' => array('value' => true)));

然后他说,亚马逊现在支持类似SQL的界面,然后执行以下查询:

$sdb->select('phparch', 'SELECT * FROM phparch WHERE have = "1"');

他没有给出任何类似的例子,说明如何在CouchDB中做这个查询(但是他留下了关于Views和Map / Reduce的一些提示),但我想这也是可能的,所以我的问题是: Amazon(和CouchDB)如何做它?

我的第一个猜测是他们打开所有文档(在分布式环境中可能),然后应用reduce操作来过滤属性与搜索条件不匹配的文档,但是这不会太昂贵(CPU和磁盘I / O),即使在并行计算?


我知道我忽略了一些重要的东西,如分布,一致性等,但我只是想了解NoSQL存储的基本内部工作原理。

PS:另外,任何人都可以解释为什么CouchDB和Amazon SimpleDB都是用Erlang构建的?


围绕nosql的讨论归结为索引,可用性和可伸缩性。 索引是指允许面向文档的商店如果想要获得那些有= 1的文档的商店,则不要打开所有文档。可用性和可扩展性允许这些系统在面对不可靠的硬件时轻松扩展并且可靠。

erlang专为多处理器系统而设计,因此非常适合分布式系统。

链接地址: http://www.djcxy.com/p/66403.html

上一篇: Relational Databases (NoSQL)

下一篇: NoSql Crash Course/Tutorial