0

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

我每周在数据库中获取的数据非常庞大,我只查询当前或前两天的数据。

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

如果这是可能的,大多数查询将命中不太大的 3 个分片,并且只有极少数查询会命中副本服务器,并且 TPS 会有所提高。

无论如何,这是否可以在 mongodb 中配置分片或复制?

提前致谢

4

1 回答 1

1

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

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

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

所以,也许这不是一个很好的选择——尽管它一个值得考虑的有效选择。

我建议考虑其他事情——也许将数据插入到这个集群和另一个“存档”副本集中,然后在数据超过一周后使用 TTL(生存时间)索引来“过期”数据. 如果您实际上不需要经常查询旧数据,则需要考虑一些事情。

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

于 2013-09-04T04:06:54.933 回答