10

我习惯使用 mysql,但对于我的下一个系列项目,CouchDB (NoSQL) 似乎是要走的路,基本上是为了避免 mysql 中的 EAV 并接受它必须提供的所有很酷的特性。

经过大量调查和阅读文档等,我似乎不太了解一件事。

假设我在我的服务器上托管了三个 Web 应用程序,因此相应地需要三个数据库。例如,一个是带有产品和发票表格的网上商店,一个是带有文章和评论表格的博客,另一个是带有游戏统计表格的基于网络的游戏(显然是简化了)。

因此,我在一个 mysql 安装上托管多个站点,并且我在服务器上运行的每个应用程序都有自己的数据库,其中包含表、字段和内容。

现在,对于 CouchDb,我想做同样的事情。问题似乎是在 CouchDb 中创建数据库,更类似于在 mysql 中创建表。即,我为我的博客创建名为“评论”、“文章”等的数据库,并在其中为每篇文章创建一个文档或为每个评论创建一个文档。

所以我的问题是:如何在一个 CouchDB 安装上将我的数据与多个 Web 应用程序分开?

我认为我在这里做的事情根本上是错误的,但希望你们中的一个人可以帮助我走上正轨。

4

3 回答 3

6

在 CouchDB 中,没有明确需要将不相关的数据分离到多个数据库中。如果您正确构建了文档和视图,则查询中只会显示相关数据。

如果您决定将数据分离到单独的数据库中,只需创建一个新数据库即可。

$ curl -X PUT http://localhost:5984/somedb
{"ok":true}
于 2012-05-08T17:46:59.577 回答
6

从我使用 couchdb 的经验来看,将不相关的数据分离到不同的数据库中对于性能非常重要,而且也是不费吹灰之力的。视图生成是 couchdb 的一个痛苦部分。每次更新数据库时,都必须重新生成视图(将它们视为传统关系 sql 数据库中的索引)。这涉及迭代数据库中的每个文档。因此,如果您有 200 万个 A 类型的文档,并且您有 300 个 B 类型的文档。并且您需要重新生成查询类型 B 的视图,那么在视图生成期间将执行所有 200 万和 30000 次枚举,它将需要很长时间(它甚至可能会导致读取超时)。

因此,在更新视图(如何在 couchdb 中查询,一个明显重要且不可避免的特性)时,拥有多个数据库是不费吹灰之力的。

于 2016-01-14T17:35:47.180 回答
2

@Zombies 关于性能是非常正确的。CouchDB 不适合在单个数据库中处理大量文档。如果您需要执行,比方说,超过 5000 个文档,MongoDB将胜过 CouchDB。

CouchDB 中的视图是必不可少的,但很痛苦,用于构建查询的 JavaScript 选项有限(甚至不要考虑文档引用或嵌套对象)。考虑为不同的文档设置多个数据库是一个很好的解决方案。有些人会说这样的话:

CouchDB 是一个 NoSQL 数据库,因此您不需要对文档进行排序,也不需要使用视图以外的其他方式过滤它们。NoSQL 数据库的核心功能是能够存储无方案文档 [...]

当您需要找到性能查询的解决方法时,我发现它非常烦人。如果允许您拆分数据,您不应该介意创建几个数据库来分离您的数据,它仍将位于“单个 CouchDB 安装”上。不要忘记 CouchDB 适合小型数据库。数据库越小,查询速度越快,性能就越好。

(不知道有没有英文错误,如有请见谅)


编辑ArangoDB这样的一些公司在他们自己、MongoDB 和 CouchDB 之间进行了比较,这证实了我关于文档数量的说法。这是结果:

图形比较

他们的网站上有很多其他资源。另一方面,这句话是我个人的经验,我在实习时用我在 Internet 上找到的一个 .PHP 基准测试软件对它们进行了基准测试。结果如下:

在此处输入图像描述

于 2016-04-25T14:48:54.560 回答