mysql - 数据清理、大型在线数据库中的迁移

标签 mysql ruby-on-rails data-migration data-cleaning

嗨,我是一名服务器开发人员,我们有一个 7 天 24 小时运行的大型 mysql 数据库(最大的表大约有 5 亿行)。

还有很多损坏的数据。大多数都是逻辑上错误的,并且涉及多源(多表,s3)。而且由于它在逻辑上有点复杂,我们需要 Rails 模型来清理它们(不能用纯 sql 查询来完成)

现在,我正在使用自己的小型清理框架,并使用 AWS Auto Scaling Group 来扩展实例并加快速度。但由于数据库正在运行,我必须小心(表锁和其他东西)并限制进程量。

所以我很好奇

  1. 在数据库运行期间,您(或大公司)如何清理数据?
    • 您使用临时表和交换吗?或者只是更新/插入/删除到正在使用的数据库?
    • 您是否使用框架、库或解决方案来有效地清理数据? (例如分布式处理)
  2. 如何实时检测困惑的数据?
    • 您是否使用框架、库或解决方案来检测损坏的数据?

最佳答案

所以我面临的问题本质上与您正在处理的问题类似,但规模不同。这就是我处理这种情况的方法。

  1. 首先解决基础设施问题,例如数据库是否可以离线或限制使用几个小时进行维护,如果是这样,请继续阅读。
  2. 接下来,您需要定义什么构成“损坏的数据”。
  3. 一旦确定了“损坏数据”的定义,就可以找到一种以编程方式识别它的方法。
  4. 编写一个利用程序识别算法的脚本并运行一些测试。
  5. 然后备份您的数据记录以做好准备。
  6. 考虑到数据集的规模,您可能需要增加服务器资源,以免阻碍脚本。
  7. 运行脚本
  8. 测试您的数据以评估脚本的有效性
  9. 如果需要调整并重新运行

可以在不关闭数据库进行维护的情况下执行此操作,但我认为如果这样做,您会得到更好的结果。此外,由于这是一个 Rails 应用程序,我会查看您的应用程序具有的模型验证和输入字段验证,以防止实时“损坏的数据”。

关于mysql - 数据清理、大型在线数据库中的迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40098588/

相关文章:

ruby-on-rails - Ruby on Rails-如何检索连接字符串

jquery - 如何用jquery以rails形式显示/隐藏?

Django - 外部应用程序的数据迁移

mysql - WHERE 子句后跟 JOIN

php - 将项目上传到站点后,无法解决 Fiverr 脚本中的错误成员函数 getrows()

ruby-on-rails - Rails 5 - 并发的大型视频上传和后台 FFMPEG 编码使服务器非常慢

Azure 数据工厂,表存储副本二进制数据结果在 System.Byte[] 输出中

sql - MySQL ORDER BY 日期和团队

java - 如何解决此通信链路故障?

cassandra - 如何在 cassandra 中具有相同结构的列族之间复制/移动数据