在数据库中使用多个集合是否有任何优势,当每个具有单个集合的多个数据库完成同样的事情时?从我可以收集的内容来看,使用多个数据库可以减少锁争用,因为锁是按数据库进行的,所以我想知道你为什么要在一个数据库中放置多个集合。
我发现的唯一缺点是每个数据库有一些开销(~200MB),而且对于大量数据库,操作系统文件句柄可能成为限制,但我想如果你有足够的集合/数据库来解决这些问题,那么你的数据库就太多了。在我的情况下,这些开销是可以承受的;我想知道是否还有其他我应该知道的事情。
编辑:在我的情况下,目前有30个馆藏分布在8个数据库中。我提出这个问题,因为我认为在30个数据库中创建这30个集合可能会更好。目前的结构没有真正的理由;它是由一个对数据库知之甚少的团队建立的。它现在经常使用足以使锁争用成为一个因素(分析显示一些操作花费> 1秒等待锁)。我们也会横向扩展,我只是将其视为一种潜在的低悬的果实,因为它只是意味着对某些操作使用不同的数据库名称,而不是使用不同的集合名称。
如果之前有人问过,请道歉;我发现的唯一类似问题是关于是否使用例如"每个用户的集合"这不是一回事。在我的情况下,我有异构文档,我肯定希望存储在不同的集合中,我只是想知道是否将这些集合存储在同一个数据库中。
答案 0 :(得分:1)
可能与此重复:creating a different database for each collection in MongoDB 2.2
在我的解决方案中,我为每个large和highload集合创建了自己的数据库,对于其他集合,我创建了另一个公共数据库。对于大多数读写操作,Mongodb基于每个数据库实现锁定:http://docs.mongodb.org/manual/faq/concurrency/但是mongoDb中的锁不像SQL那样讨厌。
这个解决方案为我提高了mongodb的生产力。