告别数据烦恼,如何一键搞定数据归档与清理?
NineData 的数据归档与清理功能已经发布将近半年时间,在这段时间里,解决了一大批企业在过期数据处理方面的大麻烦,可以相对自动化地定期执行如下数据归档与清理工作。
![](https://static001.geekbang.org/infoq/a5/a512de1c9f2bc5fc875f4686f9f7bf46.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
识别业务库中的归档数据→移动到归档库→清理业务库的已归档数据→整理业务库表空间。
![](https://static001.geekbang.org/infoq/b1/b1b9124b54310a69b6abde806d0b3a68.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
这样一来,在磁盘容量的管理上,基本就可以当甩手掌柜了,除了无需再花时间精力检查哪些数据需要清理之外,也不用再担心误将有效数据当无效数据清理,以及无效数据堆积导致数据库访问缓慢等等问题了。
这种情况下,如果你的数据库出现了容量不足告警,那就说明磁盘空间真的无法再满足当前业务了,直接踏踏实实扩容就行。
传统数据归档的不足之处
尽管数据归档与清理功能完成度已经非常高了,但是在应对各种五花八门的场景时,仍然可能会有一些磕绊,笔者花了几个月的时间收集用户的实际使用反馈,大致整理出了如下一些需求:
不支持时区配置:海外业务的数据库使用的时区和国内不一致,用户在配置该海外业务的数据归档与清理的执行时间后,NineData 会在中国时间的该时间点执行任务,而此时该海外业务正处在繁忙阶段,可能影响该数据库的存取性能。因此,需要手动将目标地域的归档时间换算成中国时间,然后将换算后的时间设置为数据归档与清理的执行时间。
时间字段支持不全面:NineData 需要基于用户表里的某个时间字段作为归档与清理的依据,该时间字段的数据类型需要是 DATETIME 类型,然而由于数据库配置的多样性,并不是所有时间字段都使用了 DATETIME 类型,也可能是 CHAR、VARCHAR 等,导致配置的时候 NineData 没有认出该时间字段。
数据冲突策略不灵活:经实测发现归档操作遇到数据冲突的情况下,系统直接忽略当前操作,有些需要直接做覆盖更新的场景无法配置。
没有预览 SQL:对于归档和清理操作,虽然页面提供了示例 SQL 语句,但是没有根据当前的配置提供系统实际会执行的 SQL 语句,因此无法在执行前验证 SQL 是否符合预期。
![](https://static001.geekbang.org/infoq/36/363582b2c85e21a1c81979f1e3d964b0.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
NineData 数据归档与清理功能
截至今日,上述这些需求已经全面交付完成,NineData 在最近的一期迭代中,发布了针对数据归档与清理功能的一系列优化,除了修复已知问题外,还为该功能锦上添花,增加了不少实用的新能力。
1. 增加时区选择
在配置数据归档与清理任务时,可以在配置任务启动时间之前,先选择目标数据源所在地域的时区,无需再费脑子换算成中国时间,不仅增加了效率,还避免了换算失误的可能性。
2. 支持多种时间字段类型
在原来的 DATETIME 类型的基础上,新增了 INT、BIGINT、CHAR、VARCHAR 字段类型的支持,基本满足了大部分企业的不同时间字段类型场景。
3. 支持预览 SQL
在基本配置完归档和清理所需的参数后,可以通过预览 SQL,清晰查看到 NineData 即将对数据库执行的归档和清理操作,由此判断 SQL 是否符合预期。
4. 增加系统变量配置
新增 bizdate 系统变量,可自动获取当前系统时间,支持自定义系统时间的格式。可用于归档时自动在目标新建表时,取当前系统时间作为表名,同时,还适用于 WHERE 条件书写等场景。
5. 增加 Optimize 策略
在数据库中执行清理数据操作后,通常需要手动执行 Optimize 操作释放存储空间,虽然定义存储过程可以自动在数据库执行某些操作后执行,但由于黑屏操作门槛较高无法轻松实现。通过 NineData 的 Optimize 策略选项,轻松配置让 NineData 代替您操作回收表空间。
6. 增加数据冲突处理策略
支持用户在配置任务阶段,即可根据业务要求选择数据归档时的数据冲突处理策略,支持忽略和覆盖两种选项。
7. 增加执行时长选项
在创建数据归档任务时,对周期性任务提供了执行时长选项,通过该选项给任务限制执行时长,避免任务执行时间超出预期时长给业务库带来不良影响。例如,可以设置归档任务于业务低峰期的 0 点开始执行,执行时长设置为 6 小时,则早上 6 点时,即使任务没有执行完成,也会自动停止,避免影响业务。
NineData 新能力配置演示
![](https://static001.geekbang.org/infoq/58/586eefa1eab7812bfa2ece5c36444661.gif)
时区:时区可以在任务的首个配置页面就选定,该任务的所有后续操作都将基于该时区执行。
Optimize 策略:选择多少次清理操作之后自动执行 Optimize 操作释放表空间。
执行时长:选择当前任务所允许的最长执行时长,超过后无论任务是否执行完成,都将被停止,避免高峰期间对业务库产生不良影响。
数据冲突处理策略:选择归档时,目标库中存在相同数据时的处理策略,支持忽略和覆盖。
![](https://static001.geekbang.org/infoq/fb/fb238a5c2017da6bc1fc285b4c4658e1.gif)
系统变量:设置 bizdate 变量的格式,默认为 yyyyMMdd,例如 20240617。您也可以根据自身需求进行配置,例如 yyyy-MM-dd,则最终效果为 2024-06-17。
根据系统变量新增表名:示例中,使用了 customers$(bizdate),则新建的表名格式为 customers<当前时间>,例如 customers20240617。
时间字段:已经支持将 INT、BIGINT、CHAR、VARCHAR 字段类型的列作为时间字段进行选择。
预览 SQL:在配置完成后,单击预览 SQL 可以显示系统即将对数据库做的归档和清理操作。
总结
通过这次大更新,已经基本解决了大部分的问题。即便如此,NineData 仍然不是完美的,仍然可能存在一些细微的点没有被察觉,因此用户的声音至关重要。NineData 会基于用户反馈持续优化和提升产品,确保十年如一日地提供优质的产品质量和用户体验。
评论