mongodb 配置Mongo复本集以仅复制某些集合

bcs8qyzn  于 2023-01-01  发布在  Go
关注(0)|答案(4)|浏览(187)

我有一个~3GB的mongo数据库,有几十个集合,其中三个集合每秒处理~300个查询,而其他集合的处理量要低得多,我预计流量会继续快速增长。
我想设置一个副本集来处理高流量收集。这个新示例不需要复制数据库的其余部分。这可能吗?

lsmepo6l

lsmepo6l1#

目前似乎不可能通过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
或者只是自己手动复制数据,这可能值得一试。
祝你好运。

lc8prwob

lc8prwob2#

不,现在不可能了。你可以做的是将这些集合移动到另一个未复制的数据库中。但是,一旦这些集合也看到更高的流量,这将导致麻烦,所以你需要将它们移动到你的“replication”-db中。
但一般来说,如果您需要扩展,复制不是一个好办法,它更适合DR/故障转移。副本集辅助只能(可选)回答读取查询,但不能回答写入查询,这是您应该记住的一点。因此,如果您有高写入负载,这可能无法解决您的问题。
一旦你允许你的应用程序从辅助节点读取数据,你就需要保持最终的一致性,这意味着你的应用程序不能保证总是看到最新的数据,这是由于异步复制到辅助节点造成的。
实际上,如果你配置writecouter,使写操作在所有副本上都成功,然后才被认为是写操作,你的驱动程序返回,你就可以解决这个问题,但是这可能会大大减慢你的写操作。
因此,为了扩展查询执行能力,我会选择Sharding。这在每个集合级别上都是可能的,所有未分片的集合将保留在“默认分片”上。

gkl3eglg

gkl3eglg3#

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

h9a6wy2h

h9a6wy2h4#

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

相关问题