【发布时间】:2011-02-06 23:39:22
【问题描述】:
虽然我还没有使用任何新的 NoSQL 数据库,但我尝试通过阅读 Wikipedia 文章、博客和查看一些 NoSQL DB 文档来让自己了解最新情况。
我刚刚(重新)阅读了 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 进行编码和解码。
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 构建的?
【问题讨论】:
-
Erlang 是一种默认设计用于处理分布式应用程序的语言。这可能是一个解释
标签: database indexing couchdb nosql amazon-simpledb