mongodb中的复制分片

时间:2013-09-03 07:24:18

标签: mongodb replication database-replication sharding database-backups

嘿,我得到了一个mongodb设置,其中包含3个分片,每个分片在3个物理服务器上运行3个副本。分片基于范围内的类别ID,因此数据甚至在分片内

我每周进入数据库的数据非常庞大,我只查询当前或前两天的数据。

所以我试图配置一个没有当前设置副本的分片,这样新分片将包含5天前的旧数据,而旧分片将包含当前设置中的3个分片仅包含最后5天的数据

如果可能的话,大多数查询都会遇到不那么大的3个分片,只有罕见的查询才能回复副本服务器,并且TPS会有一些进展。

这是否可以在mongodb中配置分片或复制?

先谢谢

1 个答案:

答案 0 :(得分:1)

虽然为此可能很容易使用标记感知分片,但它实际上并不简单,也不是非常有效。原因如下:

1)“旧”分片中应存在的键范围每天都在变化。如果你的截止日期是五天前,那么在午夜你需要更新标签以反映这是新的一天。

2)只要将五天前的日期添加到应该位于“旧”分片上的范围,均衡器进程就需要将该数据迁移到旧分片。问题是这个碎片会有大量的旧数据,所以可能真的是很大的索引,因此写入它会慢很多,从“活动”碎片中读取和删除第5天的数据可能会干扰查询“当前”数据。

所以,也许这不是一个很好的选择 - 尽管 是一个有效的选择。

我建议考虑别的东西 - 可能将数据插入此集群,插入另一个“归档”副本集,然后使用TTL(生存时间)索引将“数据”过期后“过期”比一周长一点。如果您实际上不需要经常查询旧数据,那么可以考虑一些事情。

另一种选择是让事情保持原样。如果您的数据平衡良好,则意味着您已经处理了比查询“旧”数据时更多的TPS - 记住,只有实际使用的数据被加载到物理RAM中 - 如果您没有读取一些旧数据那么它就会安静地坐在磁盘上。只需确保所有查询都有效地使用索引 - 集合扫描可以否定我在瞬间描述的内容!