【问题标题】:Replicated Sharding in mongodbmongodb中的复制分片
【发布时间】:2013-09-03 07:24:18
【问题描述】:

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

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

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

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

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

提前致谢

【问题讨论】:

  • 嗯,这样的归档分片不是超级可靠,绝对不是 MongoDB 的标准部分,但是,基于标签的分片可以做到这一点
  • 嘿,感谢您的评论。似乎我错过了基于标签的分片。看来它解决了我的问题。
  • @Sammaye 这回答了我的问题。请将您的评论添加为答案,我会将其标记为答案
  • @Sammaye 我浏览了分片标签,它似乎可以定义恒定范围,但是是否可以基于相对日期,例如过去 2 天到过去 5 天等等?

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


【解决方案1】:

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

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

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

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

我建议考虑其他事情 - 可能将数据插入此集群, 插入另一个“存档”副本集,然后使用 TTL(生存时间)索引在其后“过期”数据比一个星期大。如果您实际上不需要经常查询旧数据,则需要考虑一些事情。

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

【讨论】:

  • 所以我们不能在标签范围上给出一个动态日期,以便每次根据当前完成平衡的时间来考虑日期?
  • 嘿,关于存档副本集,我需要手动处理插入到数据库场的副本权限以及它们之间手动的存档副本和路由查询?或者 mongodb 是否提供这样的功能?
  • 除了标签的静态值之外,没有其他方法可以提供。如果您确实需要经常查询旧数据,我不建议您使用将其放在单独的副本集中的选项...
猜你喜欢
  • 2019-03-26
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多