平面文件作为输入 - MySQL最佳实践

平面文件作为输入 - MySQL最佳实践

问题描述:

我每天都会收到一个平面文件(CSV),其内容会被导入到我的数据库中(而不是通过Web表单,POS等的数据输入)。有一个记录中有40个字段,我有600,000个独特的记录。平面文件作为输入 - MySQL最佳实践

到目前为止,我还没有看到有必要将这个关系数据库作为关系数据库,尽管肯定会有一些规范化使它更有效;重复的产品,商店,客户,经销商等

如果我从一开始就开始并以某种方式逐步输入数据,我会知道如何做到这一切(我经历的每一个资源都涵盖了但是当你有大量的数据并且需要使它成为关系时,没有一种方法可以覆盖它)。并且随着CVS每天到来,我不太清楚在数据库建立后如何导入数据。如果我将这40个字段分成5个表格,那么我必须以同样的方式拆分每日文件并一次导入它们一个吗?外键会以这种方式更新吗?

如果有人能把我推向正确的方向,我会去做更多的自己挖掘。

如果您遇到同一个项目,您将如何创建这样的数据库并执行每日更新?

谢谢!

独立于您现在所拥有的(CSV结构和数据)创建数据库结构。例如。组织你的桌子以适应你未来的需求,思考和定义好他们之间的关系,运用适当的指标。

作为第二步 - 在我看来是不可避免的,用你自己的编程语言编写一个小程序。它应该能够

  • 主要是读从(CSV)文件中的记录/行,
  • 验证/消毒获取的数据
  • 进口/根据需要保存在数据库中对应表中的数据。 “根据需要”,我的意思是说,随着时间的推移,可能会出现许多因素,这些因素可能会意外地影响您的第一个数据库结构决策。例如,需要一些时态表。另外,您应该从触发器和存储过程给您带来的好处中受益。
  • 正确处理导入过程中引发的错误和异常。例如,由于最终的“重复密钥”问题 - 因为文件中的数据可能容易出错,所以某些记录无法在某一天导入。这并不意味着进口应该打破。阅读一条记录,尝试保存它。如果出现问题,处理它(复制另一个文件中的行,或将它保存在一个特殊的表中,以供以后编辑/修订并重新导入),并让程序按照其过程中的下一个记录。
  • 正确记录所有(主要)操作并维护读取计数器和有问题的记录。
  • 自动将每个日常文件 - 导入后 - 复制到备份目录中,直到它不再需要为止。
  • 最终会通过电子邮件向您发出有关操作状态的信号。

第三步是找到一个自动化整个循环的解决方案。例如,要找到一个任务/ cron-jobs管理器来每天启动一次或每天两次的程序,而无需手动进行此操作。

关于根据您的数据库结构将文件拆分为不同的文件:这不是必要的,例如,这将是一个多余的步骤,因为您的程序应该设法读取文件并相应地处理数据导入。

至于程序的类型:它应该是一个Web解决方案,以便您可以随时访问和修改它。

祝你好运。

+0

伟大的轮廓和我正在寻找的方向。谢谢aendeerei! –