couchdb多个数据库

时间:2012-05-08 17:04:02

标签: database couchdb

我习惯使用mysql,但是对于我的下一系列项目,CouchDB(NoSQL)似乎是要走的路,基本上是为了避免在mysql中使用EAV并拥抱它提供的所有酷炫功能。

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

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

所以我在一个mysql安装上托管多个站点,我在服务器上运行的每个应用程序都有自己的数据库,包括表,字段和内容。

现在,有了CouchDb,我想做同样的事情。问题似乎是在CouchDb中创建数据库更像是在mysql中创建表。即我为我的博客创建了名为“评论”,“文章”等的数据库,在内部我根据文章创建了一个文档或每个评论的文档。

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

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

3 个答案:

答案 0 :(得分:6)

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

如果您决定将数据分成不同的数据库,只需创建一个新数据库。

$ curl -X PUT http://localhost:5984/somedb
{"ok":true}

答案 1 :(得分:5)

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

因此,在保持视图(如何在couchdb中查询,这是一个明显重要且不可避免的功能)更新时,拥有多个数据库是明智的。

答案 2 :(得分:2)

@Zombies对性能非常正确。 CouchDB不适合在单个数据库中执行大量文档。如果您需要继续执行,请说超过5000个文档,MongoDB将超越CouchDB。

CouchDB中的视图是必不可少的,但是很痛苦,JavaScript选项有限,无法构建您的查询(甚至不考虑文档引用或嵌套对象)。考虑为不同文档提供多个数据库是非常好的解决方案。有些人会说:

  

CouchDB是一个NoSQL数据库,因此您不需要订购文档,也不需要使用除视图之外的其他内容来过滤它们。 NoSQL数据库核心功能是存储无方案文档的能力[...]

当您需要找到性能查询的解决方法时,我觉得非常烦人。您不应该介意创建一些数据库来分隔您的数据,如果它允许您分割数据,它仍然会在单个CouchDB安装'上进行。别忘了CouchDB适合小型数据库。数据库越小,查询速度越快,性能就越好。

(我不知道是否有任何英语错误,请原谅我)

修改ArangoDB这样的公司在自己,MongoDB和CouchDB之间进行了比较,这证实了我对文档数量的说法。这是结果:

Graphical comparison

他们的网站上有很多其他资源。另一方面,这个陈述是一个个人经历,并通过我在互联网上找到的.PHP基准测试软件对我的实习进行基准测试。结果如下:

enter image description here