gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:52:17 27 4
gpt4 key购买 nike

虽然我还没有使用过任何新的 NoSQL 数据库,但我尝试通过阅读维基百科文章、博客和浏览一些 NoSQL 数据库文档来了解最新情况。

我刚刚(重新)阅读了 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。


亚马逊 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 的接口(interface),然后执行以下查询:

$sdb->select('phparch', 'SELECT * FROM phparch WHERE have = "1"');

他没有给出任何类似的例子来说明如何在 CouchDB 中执行该查询(但是他在 Views 和 Map/Reduce 上留下了一些提示)但我想这也是可能的,所以我的问题是:如何亚马逊(和 CouchDB)做到了吗?

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


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

PS:另外,谁能解释一下为什么 CouchDB 和 Amazon SimpleDB 都是用 Erlang 构建的?

最佳答案

围绕 nosql 的争议在于索引、可用性和可伸缩性。如果您想获取 have = 1 的文档,则索引允许面向文档的存储不打开所有文档。可用性和可扩展性允许这些系统轻松横向扩展并在面对不可靠的硬件时保持健壮。

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

关于database - 关于非关系数据库(NoSQL)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2621795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com