将 Mongo 副本集配置为仅复制某些集合



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

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

mongodb 的内置功能目前似乎是不可能的,唯一的方法是提出自己的手动复制算法或使用第三方编写的其他一些工具。

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

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

介绍在复制中筛选文档的解决方法。

仅复制MongoDB中{'public':true}的文档

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

祝你好运。

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

但一般来说,如果需要扩展,复制不是要走的路,它更多地考虑用于灾难恢复/故障转移。副本集辅助数据库只能(可选)应答读取查询,而不能应答写入查询,这是您应该记住的。因此,如果您的写入负载很高,这可能无法解决您的问题。
允许应用程序从辅助数据库读取数据后,您需要保持最终一致性,这意味着无法保证应用程序始终看到最新数据。这是由于异步复制到辅助数据库导致的。
实际上,如果您配置了写入关注点,则可以解决此问题,以便写入需要在所有副本上成功,然后才能将其视为已写入并且驱动程序返回。但这可能会显著减慢写入操作的速度。

因此,为了扩展查询执行功能,我会使用分片。这在每个集合级别上是可能的,所有未分片的集合将保留在"默认分片"上。

不可能,

但如果数据大小如此之小并且这些集合未更新,则复制它们的唯一开销是辅助数据库上的存储大小较小。这是一个相对较小的代价,特别是因为与编写自己的复制逻辑相比,集合的大小不会增长。

而不是存档数据,并且只在生产服务器上设置最新的数据集,其余数据可以在新服务器上存档。

相关内容

  • 没有找到相关文章

最新更新