【问题标题】:Question about Non-Relational Databases (NoSQL)关于非关系型数据库 (NoSQL) 的问题
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 谢谢 oedo,您介意更详细地解释一下索引是如何工作的吗?
  • 从概念上讲,索引是对一些有用值的快速查找,因此实现取决于数据库,有时还取决于所述数据库的配置。 couchdb 的系统在“查看索引”下有详细的couchdb.apache.org/docs/overview.html。如果您正在寻找实际的算法,可以查看实际的数据库系统代码,couchdb 毕竟是开源的 :)
猜你喜欢
  • 2011-05-08
  • 2014-07-22
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2011-10-26
相关资源
最近更新 更多