2014-03-27 37 views
2

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

回答

3

只要所有数据都在单个服务器上,拥有一个大集合或许多小集合就不应有太大区别。作为任何性能问题,彻底的答案将不得不考虑您对该数据的预期用法。你是否经常访问所有的数据?或者你有一个经常访问的相对较小的工作数据集,而其余的则很少被查看?

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

但是,MongoDB的分片是为了解决这个问题(维护大量的数据),它通过将所有内容都保存在一个逻辑集合中,但是将它自动分配到尽可能多的分片上。这远比自己创建个人收藏更灵活。除此之外,它允许数据在一段时间内重新平衡,以确保每个分片具有相同数据的一部分。适应不同数量的碎片也更灵活,而您的多重收集方案似乎依赖于对数据进行相当固定的分割(根据源码#)。

通过分片,应用程序将完全不知道分布模式,并且您可以根据需要添加或删除尽可能多的分片,以透明地处理数据量。

相关问题