虽然我还没有使用任何新的NoSQL数据库,但我试图通过阅读维基百科的文章,博客和窥视一些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)));
然后他说Amazon现在支持类似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构建的吗?