关于非关系型数据库(NoSQL)的问题

时间:2010-04-12 11:55:12

标签: database indexing couchdb nosql amazon-simpledb

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

我刚刚(重新)阅读了2009年8月版的php | architect,特别是关于非关系数据库的文章以及我头脑中出现的一些问题,我理解这篇文章对这个主题非常清楚但这足以让我感到困惑......

CouchDB的

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

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

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

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


Amazon SimpleDB

现在这个真的让我头晕......作者(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构建的吗?

1 个答案:

答案 0 :(得分:3)

围绕nosql的问题归结为索引,可用性和可伸缩性。索引是允许面向文档的存储不打开所有文档的原因,如果你想获得那些具有= 1的可用性和可扩展性,这些系统可以轻松地扩展并在不可靠的硬件面前保持健壮。

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