如果我有大量集合,数据库分片看起来很棒。如果我有很多相当大小的收藏怎么办?假设对于1个1亿个文档集合(不是很大的注释),分片是有效的。它对于每个具有10000个文档的10000个收藏集也有效吗?
(我认为,如果您将集合替换为表,将文档替换为行,则此问题对于面向表的数据库仍然有效。回答。)
如果我有大量集合,数据库分片看起来很棒。如果我有很多相当大小的收藏怎么办?假设对于1个1亿个文档集合(不是很大的注释),分片是有效的。它对于每个具有10000个文档的10000个收藏集也有效吗?
(我认为,如果您将集合替换为表,将文档替换为行,则此问题对于面向表的数据库仍然有效。回答。)
Answers:
它对于每个具有10000个文档的10000个收藏集也有效吗?
大多数人都遇到“单个大集合”问题,因此分片显然对于减少平衡此数据的麻烦非常有用。
但是,当您有1万个小型馆藏时,您的头痛可能不是在“平衡数据”。拥有如此众多的小型馆藏,您的问题很可能是跟踪这些馆藏。根据文档的大小,您甚至可能没有突破实际进行分片的下限。
对于非常小的集合,您可以使用鲜为人知的movePrimary命令来管理数据的位置。
当然,查看此问题的另一种方式是为什么您有1万个收藏集?集合不需要同类对象,并且具有10k集合时,大多数都必须生成。很有可能在同一个集合中存储不同的“类型”的数据,减少集合的数量,然后将类型作为分片键的一部分。
foo
,并bar
使用相同的数据结构,你可以将它们合并到baz
收集和覆盖_ids
(代码){ _id: "foo123" }, { _id: "bar123" }
。您有一个较大的索引,但只有一个包含类型的索引。并不是必须的,只是“深思熟虑”。