mysql - 600GB 从 CSV 或数据库规范化?

标签 mysql database-design database-migration

我刚刚开始规范化一个 600GB 的数据库。我们正在使用 sqldump 将其从 Amazon RDS 移动到我们的本地服务器(64GB RAM 和 1.5TB SSD),我们将在其中托管新的规范化数据库。

数据库由一个表组成,我们将把它分成 4 个不同的表以删除所有冗余数据。

我的问题是:什么可能是最好的过程?

  1. 将所有 600GB 恢复到本地临时数据库,并使用移植脚本从那里查询数据并插入到新的规范化结构中。

  2. 下载 CSV 转储而不是 .sql 文件并编写一个移植脚本来读取 CSV 并将日期输入新的规范化结构?

或者

  1. 有没有更好的方法来重构这种规模的数据库?

对于这两种解决方案,我都想构建一个缓存脚本来处理冗余的外键查找,但也许 mysql 可以以某种方式处理它?

最佳答案

与同时处理外部文件相比,单独在 SQL 数据库中工作通常更容易、更快捷。

它为您提供了更好的性能,并且如果您想这样做,还可以让您轻松保留原始列类型。如果您使用 CSV,您可能必须非常小心数据类型,CSV 本质上只是文本。

所以我更喜欢选项 1,最好是在仅包含一小部分原始记录的原始表的摘录上测试脚本。

虽然新数据库占用的空间会比未规范化的数据库占用的空间少,但如果您的 1.5 TB SSD 是唯一的附加存储,那么在转换完成之前,它会相当满你删除原来的。日志文件可能非常大,具体取决于您的操作方式。您可能想暂时在其中多放几 TB 的 HDD。

如果这是个问题,完全在远程机器上进行转换是否可行?然后你只需要将转换后的数据库下载到本地服务器即可。

关于mysql - 600GB 从 CSV 或数据库规范化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20298870/

相关文章:

php - PHP 或 SQL 中耗时格式

php - mysql 中非常奇怪的错误。与搜索匹配是有效的,但对它来说是无效的

node.js - Postgres 尝试返回我的模型中不存在的列

postgresql - 在 Go 中用于数据库迁移的包是什么?

Php 不会运行 MySQL 更新查询,但查询在 MySQL 控制台中有效

php - MySQL计算降雨量

database - 配方数据库设计

sql - 多对多查询

php - 我应该如何创建这个定制的电子商务数据库模型?

yii2 - Yii 2 迁移中的全文索引