【问题标题】:MongoDB sharding by collectionMongoDB 按集合分片
【发布时间】:2015-07-26 04:05:10
【问题描述】:

我有一个应用程序,它在 MongoDB 中为每个用户创建一个集合,其中一个集合预计最多有 100,000 个文档(一些“大”用户就是这样,而许多“小”用户只有不到 10,000 个文档) .现在用户数量增加了,我想对我的数据库进行分片。是否可以说“把这个集合(因此这个用户)放在这个分片上,把那个集合放在那个分片上,但不要在一个集合中进一步分片文档”,是否可以自动执行此操作?

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

【问题讨论】:

    标签: mongodb sharding


    【解决方案1】:

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

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

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

    【讨论】:

    • 查看已编辑的问题,了解有关具体情况的更多详细信息。任何想法将不胜感激。
    • 我阅读了您的更新,很明显更改设计不是一个可行的选择。我的理解是,在集合创建时,集合没有自动服务器分布平衡。当然,您可以通过识别您的 mongodb 服务器并循环创建集合来手动管理它。但是,为了获得分片的好处,这些不同的用户集合应该在一个集合中。
    • 其实改变设计并不是太不可行。我可以接受停机时间来迁移所有数据,并且可以简单地删除许多充当缓存的文档。唯一的问题是,在我的应用程序中,我正在传递集合对象,并且它到处都在使用。我必须仔细跟踪它的使用情况,否则我忘记更改的任何部分都会污染整个数据集。
    猜你喜欢
    • 2013-08-31
    • 2018-12-15
    • 2012-05-10
    • 2021-07-26
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    相关资源
    最近更新 更多