CouchDB可以处理数千个独立的数据库吗?

ell*_*t42 8 couchdb

CouchDB可以在同一台机器上处理数千个独立的数据库吗?

想象一下,你有一个BankTransactions 的集合.有成千上万的记录.(编辑:实际上并不存储事务 - 只考虑非常大量的,经常更新的记录.它基本上是来自SQL-land的连接表.)

您每天都需要仅在当地银行分行发生的交易摘要视图.如果所有的记录都在一个单一的数据库,重新生成视图将处理所有的事务,从所有的分支.这是一个更大的工作块,对于仅关心其特定文档子集的用户来说是不必要的.

这使得每个银行分支看起来应该被划分到它自己的数据库中,以便以较小的块生成视图,并且彼此独立.但是我从来没有听说有人这样做过,而且它看起来像是反模式(例如,在数千个不同的数据库中复制相同的设计文档).

我应该采用不同的方式来模拟这个问题吗?(分区是否应该在不同的机器之间进行,而不是在同一台机器上的单独数据库?)如果没有,CouchDB可以处理数千个数据库来保持分区小吗?

(谢谢!)

Sam*_*bee 5

[警告,我假设你在某种生产环境中运行它.如果这是针对学校或宠物项目,请简短回答.]

简短的回答是"是".

更长的答案是你需要注意一些事情......

  • 你将使用许多系统设置(如最大文件描述符)来玩whack-a-mole.

  • 您还将使用erlang vm设置玩whack-a-mole.

  • CouchDB有一个"最大开放数据库"选项.增加这个,否则你将有待处理的待处理请求.

  • 将聚合多个数据库以生成报告将成为PITA.您可以通过轮询每个数据库的_changes feed,修改数据,然后将其放回中央/聚合数据库来完成.CouchDB的API中还没有提供简化工具的工具.几乎,但不完全.

但是,如果你尝试这样做,你将遇到的最大问题是CouchDB本身不能水平扩展[well].如果你添加更多的CouchDB服务器,他们都将拥有重复的数据.当然,你的最大开放dbs计数会随着每个节点的增加而线性扩展,但其他一些东西,比如视图构建时间则不会(例如,他们都需要自己进行视图构建).

虽然我在BigCouch集群上看到过数千个开放数据库.有趣的是,这是因为发电机集群:更多节点并行执行不同的事情,而不是相互之间相互复制的CouchDB服务器.

干杯.