5

虽然我还没有使用任何新的 NoSQL 数据库,但我试图通过阅读 Wikipedia 文章、博客和查看一些 NoSQL DBs 文档来让自己了解情况。

我刚刚(重新)阅读了 2009 年 8 月版的 php|architect,特别是关于非关系数据库的文章,我的脑海中突然出现了一些问题,我知道这篇文章对这个主题很轻,但它是足以让我感到困惑...

沙发数据库

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

我真的没有对此大惊小怪,几年前我为一个宠物项目编写了一个类似的(?)系统来存储文档,结构是这样的:

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

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


亚马逊简单数据库

现在这个真的让我头晕目眩......作者(Russell Smith)给出了以下示例:

$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 上留下了一些提示),但我想这也是可能的,所以我的问题是:亚马逊(和 CouchDB)如何做它?

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


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

PS:另外,谁能解释一下为什么 CouchDB 和 Amazon SimpleDB 都是用 Erlang 构建的?

4

1 回答 1

3

围绕 nosql 大惊小怪的是索引、可用性和可伸缩性。索引是允许面向文档的存储不打开所有文档的原因,如果您想获得具有 = 1 的文档。可用性和可扩展性允许这些系统轻松扩展并在面对不可靠的硬件时保持稳健。

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

于 2010-04-12T12:03:21.930 回答