我刚刚开始规范化一个 600GB 的数据库。我们正在使用 sqldump 将其从 Amazon RDS 移动到我们的本地服务器(64GB RAM 和 1.5TB SSD),我们将在其中托管新的规范化数据库。
数据库由一个表组成,我们将把它分成 4 个不同的表以删除所有冗余数据。
我的问题是:什么可能是最好的过程?
将所有 600GB 恢复到本地临时数据库,并使用移植脚本从那里查询数据并插入到新的规范化结构中。
下载 CSV 转储而不是 .sql 文件并编写一个移植脚本来读取 CSV 并将日期输入新的规范化结构?
或者
- 有没有更好的方法来重构这种规模的数据库?
对于这两种解决方案,我都想构建一个缓存脚本来处理冗余的外键查找,但也许 mysql 可以以某种方式处理它?
最佳答案
与同时处理外部文件相比,单独在 SQL 数据库中工作通常更容易、更快捷。
它为您提供了更好的性能,并且如果您想这样做,还可以让您轻松保留原始列类型。如果您使用 CSV,您可能必须非常小心数据类型,CSV 本质上只是文本。
所以我更喜欢选项 1,最好是在仅包含一小部分原始记录的原始表的摘录上测试脚本。
虽然新数据库占用的空间会比未规范化的数据库占用的空间少,但如果您的 1.5 TB SSD 是唯一的附加存储,那么在转换完成之前,它会相当满你删除原来的。日志文件可能非常大,具体取决于您的操作方式。您可能想暂时在其中多放几 TB 的 HDD。
如果这是个问题,完全在远程机器上进行转换是否可行?然后你只需要将转换后的数据库下载到本地服务器即可。
关于mysql - 600GB 从 CSV 或数据库规范化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20298870/