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

5
尽管我还没有使用过任何新的NoSQL数据库,但通过阅读维基百科文章、博客并查看一些NoSQL数据库文档来保持自己的了解。我刚刚重新阅读了php|architect 2009年8月号,特别是关于非关系数据库的文章,脑海中浮现出一些问题,我知道这篇文章对这个主题讲得很简要,但足以使我感到困惑...
CouchDB
我对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中执行该查询的类似示例(但是他留下了一些有关视图和Map / Reduce的提示),但我认为这也是可能的,所以我的问题是:亚马逊(和CouchDB)如何实现它?

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


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

PS:还有,有人可以解释一下为什么CouchDB和Amazon SimpleDB都是用Erlang构建的吗?


Erlang 是一种默认设计用于处理分布式应用的编程语言。这可能是一个解释。 - INS
1个回答

3
无SQL数据库的重要性在于索引、可用性和可扩展性。索引是文档导向存储库不需要打开所有文档就能获取其中具有等于1的文档的原因。可用性和可扩展性使得这些系统能够轻松扩展并且在面对不可靠的硬件时具有强大的鲁棒性。
Erlang是为多处理器系统设计的,因此非常适合分布式系统。

谢谢oedo,你介意详细解释一下索引是如何工作的吗? - Alix Axel
1
从概念上讲,索引是一种快速查找某些有用值的方法,因此其实现取决于数据库,有时还取决于所述数据库的配置。CouchDB的系统在http://couchdb.apache.org/docs/overview.html下详细介绍了“视图索引”。如果您正在寻找实际算法,也许可以查看实际的数据库系统代码,毕竟CouchDB是开源的 :) - chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接