分片对少量收藏有效吗?


11

如果我有大量集合,数据库分片看起来很棒。如果我有很多相当大小的收藏怎么办?假设对于1个1亿个文档集合(不是很大的注释),分片是有效的。它对于每个具有10000个文档的10000个收藏集也有效吗?

(我认为,如果您将集合替换为表,将文档替换为行,则此问题对于面向表的数据库仍然有效。回答。)

Answers:


5

它对于每个具有10000个文档的10000个收藏集也有效吗?

大多数人都遇到“单个大集合”问题,因此分片显然对于减少平衡此数据的麻烦非常有用。

但是,当您有1万个小型馆藏时,您的头痛可能不是在“平衡数据”。拥有如此众多的小型馆藏,您的问题很可能是跟踪这些馆藏。根据文档的大小,您甚至可能没有突破实际进行分片的下限。

对于非常小的集合,您可以使用鲜为人知的movePrimary命令来管理数据的位置。

当然,查看此问题的另一种方式是为什么您有1万个收藏集?集合不需要同类对象,并且具有10k集合时,大多数都必须生成。很有可能在同一个集合中存储不同的“类型”的数据,减少集合的数量,然后将类型作为分片键的一部分。


谢谢,我正是想知道我能做的最好的事情就是摆脱这些大量的收藏,做成一个大的收藏。以前我有大量的收集,因为我听到一个共同的信念:“大量的收集对您不利,因为索引不适合RAM,查询和更新它们将非常缓慢”。但是我想创建了分片来解决该问题...谢谢!
若奥平托赫罗尼莫

老实说,我发现您也经常可以“欺骗”索引。如果你有两个集合foo,并bar使用相同的数据结构,你可以将它们合并到baz收集和覆盖_ids(代码){ _id: "foo123" }, { _id: "bar123" }。您有一个较大的索引,但只有一个包含类型的索引。并不是必须的,只是“深思熟虑”。
盖茨副总裁,

4

MongoDB分片的工作原理是将集合分成较小的“块”,并在多台计算机上平均分配它们。默认的块大小(通常是最有效的)是200MB。因此,除非集合增长到大于200MB,否则它不会拆分成块,因此将不符合分片的资格,因此不会有任何好处。

通常,在多台计算机上分片数据是扩展读取,写入和查询的一种非常有效的方法。您将获得多个CPU,硬盘和内存存储的好处,它们可以并行工作以读取,写入和处理数据。扩展内存对于MongoDB尤其重要,因为MongoDB的高性能对内存中的数据拟合非常敏感。


自1.8开始,FYI默认块大小为64MB。
盖茨副总裁,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.