将新数据导入主数据库与临时数据库?

时间:2013-02-18 22:53:55

标签: mysql database database-design

我正在为一个新项目设计一个MySQL数据库。我将每天导入50-60 MB的数据。

将有一个带主键的主表。然后会有子表,它们有自己的主键和指向主表的外键。

必须从巨型文本文件中解析新数据,然后在导入主数据库之前进行一些小的操作。解析和导入操作可能涉及大量的故障排除,因此我想将新数据导入临时数据库并确保其完整性,然后再添加到主服务器。

出于这个原因,我认为最初每天都要将新数据解析并导入一个单独的临时数据库。通过这种方式,我可以在添加到主服务器之前检查数据,同时我将每天的数据存储为单独的数据库,如果我以后需要从各个临时数据库重建主服务器。

我正在考虑使用InnoDB引擎使用主键/外键来维护表间的关系完整性。这意味着当我每天导入新数据时,我不得不担心自动增量ID(主键)没有任何重复。

那么,鉴于这种情况,最好的是什么?

  1. 制作主副本并每天直接导入主副本。用新副本替换现有主数据。

  2. 每天将新数据导入临时数据库,但将主键的自动增量起始值更改为大于主数据库中的最大值。那么我是否还会更改所有表(主表及其子表)的主键的自动增量值?

  3. 每天将新数据导入临时数据库,而不必担心主键值。找到一些其他方法将临时数据库与主服务器合并而不会发生主键冲突?如果使用此策略,如何更新主表中的主键以获取新数据,同时确保与子表的所有关系保持正确?

1 个答案:

答案 0 :(得分:0)

我不确定这是否像你制作的一样复杂?

为什么不这样做:

  1. 将原始数据导入临时表(为什么它必须是一个单独的数据库?)
  2. 在临时表上运行转换/完整性检查。
  3. 数据良好时,将其直接插入主表。
  4. 在主表上使用的自动递增ID,这取决于您导入的数据。这样,您就可以拥有唯一ID 原始ID,这些ID可能已导入您的导入。
  5. 在主表中添加一个字段,该字段为您提供记录来自哪个导入的记录。
  6. 除了将数据复制到主表之外,还要创建一个与您合并的数据绑定的日志。如果您发现错误/错误,并帮助您退回数据并为您提供审计跟踪。
  7. 最后只需设置一个沙箱数据库,编写一堆存储过程并测试它的垃圾。 =)