拥有一个拥有一百万个对象的十亿或一千个集合会更好吗?

时间:2014-03-27 20:50:54

标签: mongodb nosql

一个包含单个集合的NoSQL数据库(MongoDB) - logs - 包含10亿个条目或一千个集合(logs_source0logs_source1)的性能差异多少?如果数据在多个服务器之间分片,这会改变吗?对象包含6到10个键,有时包含3-5个对象的数组。应用程序的设计可以使用其中任何一个,因为_sourceX可以很容易地变成额外的键,反之亦然。

1 个答案:

答案 0 :(得分:3)

只要所有数据都在一台服务器上,拥有一个大型集合或许多小型集合就不会产生太大的差别。对于任何性能问题,彻底的答案都必须考虑到您对该数据的预期用法。您经常访问所有这些数据吗?或者您是否经常访问相对较小的工作数据集,而其余数据很少被查看?

在选择性地将一些数据分页到内存中时,拥有许多小型集合可能会更好。当然,单个大集合也可以选择性地分页到内存中,但是如果可能的话,至少索引必须完全在内存中,以确保快速访问数据。对于许多较小的集合,这将更容易,因为每个集合都有自己的小索引。

然而,MongoDB的分片意味着要解决这个问题(维护大量数据),它通过将所有内容保存在单个逻辑集合中来实现,但是可以根据需要自动分配该集合。这比自己创建这些单独的集合要灵活得多。除此之外,它允许数据随时间重新平衡,以确保每个分片具有相同的数据部分。适应不同数量的分片也更灵活,而您的多重收集方案似乎依赖于相当固定的数据分区(根据源#)。

使用分片,应用程序将完全不知道分发模式,您可以透明地添加或删除任意数量的分片,以处理数据量。