我有一个~3GB的mongo数据库,里面有几十个集合。其中三个集合每秒处理大约300个查询,而其余集合则支持更低的卷。我预计流量会继续快速增长。
我想设置一个副本集来处理高流量的集合。此新实例不必复制数据库的其余部分。这可能吗?
答案 0 :(得分:2)
目前mongodb的内置功能似乎无法实现,唯一的方法是提出自己的手动复制算法或使用第三方编写的其他工具。
https://github.com/wordnik/wordnik-oss项目可能会帮助您根据以下帖子实现这一目标。
https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/Ap9V4ArGuFo
描述在复制中过滤文档的解决方法。
或者只是手动复制数据,这可能值得尝试。
祝你好运。答案 1 :(得分:0)
现在不可能。您可以做的是将这些集合移动到另一个未复制的数据库中。但是,一旦这些集合看到更高的流量,这将导致令人头疼的问题,因此您需要将它们移动到“复制”-db中。
但一般情况下,如果需要扩展,复制不是可行的方法,而是更多地考虑DR /故障转移。 Replicaset Secondaries只能(可选)回答读取查询但没有写入查询,这是您应该记住的。因此,如果您有高写入负载,这可能无法解决您的问题 一旦您允许您的应用程序从辅助应用程序读取,您需要忍受最终的一致性,这意味着您的应用程序不能保证始终看到最新的数据。这是由于对辅助节点的异步复制造成的 实际上,如果你配置了writeconcern,你可以解决这个问题,这样在写入和驱动程序返回之前,写入需要在所有副本上成功。但这可能会减慢您的写入操作的重要性。
因此,为了扩展查询执行功能,我会使用Sharding。这可以在每个集合级别上进行,所有未加密的集合将保留在“default-shard”上。
答案 2 :(得分:0)
不可能但是如果数据大小太小并且这些集合没有更新,那么复制它们的唯一开销是辅助节点上的小存储大小。这是一个相对较小的代价,特别是因为与编写自己的复制逻辑相比,集合的大小不会增加。