【问题标题】:Configure a Mongo replica set to only replicate certain collections将 Mongo 副本集配置为仅复制某些集合
【发布时间】:2013-01-06 06:03:27
【问题描述】:

我有一个约 3GB 的 mongo 数据库,其中包含几十个集合。其中三个集合每秒处理约 300 个查询,而其他集合的处理量要低得多。我预计流量会继续快速增长。

我想设置一个副本集来处理高流量集合。这个新实例不需要复制数据库的其余部分。这可能吗?

【问题讨论】:

    标签: mongodb replication nosql


    【解决方案1】:

    不可能,但是如果数据量太小并且这些集合没有更新,那么复制它们的唯一开销就是辅助节点上的小存储空间。与编写自己的复制逻辑相比,这是一个相对较小的代价,尤其是因为集合的大小不会增长。

    【讨论】:

      【解决方案2】:

      不,现在不可能。您可以做的是将这些集合移动到另一个未复制的数据库中。但是一旦这些集合也看到更高的流量,这将导致头痛,因此您需要将它们移动到您的“复制”-db中。

      但一般来说,如果您需要扩展,复制并不是最佳选择,它更适合用于 DR/故障转移。副本集辅助节点只能(可选)回答读取查询,但不能回答写入查询,这是您应该牢记的。因此,如果您的写入负载很高,这可能无法解决您的问题。
      一旦您允许您的应用程序从辅助设备中读取数据,您就需要保持最终的一致性,这意味着您的应用程序不能保证总是看到最新的数据。这是由于异步复制到辅助节点造成的。
      事实上,如果你配置你的 writeconcern,你可以解决这个问题,这样在所有副本上写入需要成功,然后才被认为已写入并且你的驱动程序返回。但这可能会显着减慢您的写入操作。

      因此,对于扩展查询执行能力,我会选择Sharding。这在每个集合级别上是可能的,所有未分片的集合将保留在“默认分片”上。

      【讨论】:

        【解决方案3】:

        目前似乎无法通过 mongodb 的内置功能实现,唯一的办法就是想出自己的手动复制算法或使用第三方编写的其他一些工具。

        https://github.com/wordnik/wordnik-oss 项目可能会根据以下帖子帮助您实现这一目标。

        https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/Ap9V4ArGuFo

        描述了在复制中过滤文档的解决方法。

        Replicate only documents where {'public':true} in MongoDB

        或者只是自己手动复制数据,这可能值得一试。

        祝你好运。

        【讨论】:

        • 感谢您的链接! “过滤复制”听起来像是一个正确的短语,可以继续了解此功能是否会出现。
        • 不客气 =) 社区非常活跃,我相信他们最终会开发出所需的功能 =)
        • @cubbuk - 关于你的最后一条评论,现在是 2016 年 5 月。你知道今天的选择吗?
        猜你喜欢
        • 2016-06-05
        • 1970-01-01
        • 2018-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多