MongoDB 按集合分片

MongoDB sharding by collection

我有一个应用程序在 MongoDB 中为每个用户创建一个集合,其中一个集合最多包含 100,000 个文档(一些 "big" 用户是这样的,而许多 "small" 用户只有不到 10,000 个文档)。现在用户数量增加了,我想对我的数据库进行分片。有没有可能说"put this collection (thus this user) on this shard and that collection on that shard, but do not shard documents inside a collection further",有没有可能自动做到这一点?

编辑: 我现在已经知道 MongoDB 的标准分片设计,但我的应用程序是从一个供单人使用的小型应用程序扩展而来的,其中为用户创建了 nedb 数据存储。添加多用户支持后,为每个用户创建一个 nedb 数据存储是一个显而易见的选择,因此我的应用程序的许多部分可以保持不变。当我将它迁移到 MongoDB 时,由于一个 nedb 数据存储相当于一个 MongoDB 集合,我为每个用户使用一个集合。鉴于目前的情况,我想知道解决当前性能问题的最快方法(~=对我的应用程序和整体配置的更改最小)。

分片是在 collection 上完成的,分片集合的分解方式基于分片 key(其中一个或多个您集合中的对象元素构成键)。

最好重新考虑您的文档设计。您可以将所有用户都放在一个 集合中,然后使用用户ID 作为分片键。这会将每个用户作为一个整体进行分片并自动完成。

有关分片的更多信息,请参阅 Mongodb 的 Sharding documentation