嗨,我是一名服务器开发人员,我们有一个 7 天 24 小时运行的大型 mysql 数据库(最大的表大约有 5 亿行)。
还有很多损坏的数据。大多数都是逻辑上错误的,并且涉及多源(多表,s3)。而且由于它在逻辑上有点复杂,我们需要 Rails 模型来清理它们(不能用纯 sql 查询来完成)
现在,我正在使用自己的小型清理框架,并使用 AWS Auto Scaling Group 来扩展实例并加快速度。但由于数据库正在运行,我必须小心(表锁和其他东西)并限制进程量。
所以我很好奇
- 在数据库运行期间,您(或大公司)如何清理数据?
- 您使用临时表和交换吗?或者只是更新/插入/删除到正在使用的数据库?
- 您是否使用框架、库或解决方案来有效地清理数据? (例如分布式处理)
- 如何实时检测困惑的数据?
- 您是否使用框架、库或解决方案来检测损坏的数据?
最佳答案
所以我面临的问题本质上与您正在处理的问题类似,但规模不同。这就是我处理这种情况的方法。
- 首先解决基础设施问题,例如数据库是否可以离线或限制使用几个小时进行维护,如果是这样,请继续阅读。
- 接下来,您需要定义什么构成“损坏的数据”。
- 一旦确定了“损坏数据”的定义,就可以找到一种以编程方式识别它的方法。
- 编写一个利用程序识别算法的脚本并运行一些测试。
- 然后备份您的数据记录以做好准备。
- 考虑到数据集的规模,您可能需要增加服务器资源,以免阻碍脚本。
- 运行脚本
- 测试您的数据以评估脚本的有效性
- 如果需要调整并重新运行
可以在不关闭数据库进行维护的情况下执行此操作,但我认为如果这样做,您会得到更好的结果。此外,由于这是一个 Rails 应用程序,我会查看您的应用程序具有的模型验证和输入字段验证,以防止实时“损坏的数据”。
关于mysql - 数据清理、大型在线数据库中的迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40098588/