0

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

将有一个带有主键的主表。然后将有具有自己的主键和指向主表的外键的子表。

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

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

我正在考虑在 InnoDB 引擎中使用主键/外键,以保持跨表的关系完整性。这意味着当我每天导入新数据时,我必须担心自动增量 ID(主键)没有任何重复。

那么,在这种情况下,什么是最好的呢?

  1. 制作master的副本,每天直接导入master的副本。用新副本替换现有母版。

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

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

4

1 回答 1

0

我不确定这是否像您制作的那样复杂?

为什么不这样做:

  1. 将原始数据导入临时表(为什么它必须是一个单独的数据库?)
  2. Run your transformations/integrity checks on the temporary table.
  3. When the data is good, insert it directly into the master table.
  4. Use auto incrementing ids on the master table that are not dependent on your data being imported. That allows you to have a unique id and the original ids that might have existed in your import.
  5. Add a field to your master table(s) that gives you a record of which import the records came from.
  6. In addition to copying the data to your master table, make a log that ties back to the data you merged. Helps you back out the data if you find it's wrong/bad and gives you an audit trail.

In the end just set up a sandbox database, write a bunch of stored procedures and test the crap out of it. =)

于 2013-02-18T23:20:15.937 回答