mongodb为日志表设置归档方案

33次阅读

共计 663 个字符,预计需要花费 2 分钟才能阅读完成。

背景

现在 mongodb 有一张日志表,保留每天的系统访问信息,由于每天的数量非常大,导致长时间之后表变得非常大,影响插入效率,并且导致无法查询,现在我们需要制定方案来解决这个问题,需求是实现表的按时清理和归档。要求是尽量不修改项目现有的业务代码。并且现在数据库的大概每天产生 30 至 60 万条数据,能够平稳的处理。

解决方案

方案一:
集中清除:

假设在 2019 年的 11 月 1 号开始增加 ttl 设置为 30 天后的凌晨 1 点进行自动删除,然后我们每 30 天也就是 2019 年 12 月 1 号凌晨 0 点开始第一次备份数据,这是我们的数据库中会有一个月的数据,备份完成一小时后,开始删除当天数据,当下个月备份的时候,也就是 1 月 1 号,我们 11 月的数据已经自动删除完,这时进行备份,只有 12 月的数据。

方案二:
分散清除:

备份方案与方案一相同,ttl 设置为在日志生成后 2592000 秒(30 天)后删除。

两种方案的区别:

  1. 第二种方案将删除分散到一天,将压力分散开;不需要更改原有代码只需要数据库设置索引
  2. 第一种方案将删除放在凌晨,在服务器低峰删除;需要增加删除字段,并自定义删除时间

最终选择实施方案一

原因:1. 不需要更改业务代码

   2. 按照 mongodb 设计如果删除数据时处于数据库高峰,会延后删除,(更改方案:将删除时间设为整天的时间加减某些量如 5 小时等,会生成错峰)

操作步骤

  1. 设置 mongodb 的 ttl 索引,在一个选中的类型为 date 的字段上加上 ttl 索引,参考代码如下,具体实现参照百度。

参照实现:ttl

  1. 数据库备份,参照百度,使用 shell 脚本定时备份。

参照实现:备份

参考资料

正文完
 0