大容量数据导入的表结构

时间:2013-02-11 08:55:39

标签: mysql

我有一个关于设置表格以处理我每天导入的大量数据的最佳方法的一般性问题。 我将每天导入10个包含1000条记录的csv文件,因此该表将迅速扩展。

它由15个左右的列组成,范围从微小和中等整数到30个字符的变量。

没有ID字段 - 我可以加入6列来形成主键 - 这将是一个var char总长度约为45。

当它被导入时,我需要通过Web前端在摘要级别报告这些数据,因此我认为自己必须在导入后从此构建报告表。

在这些数据中,有许多字段在每天导入日期,地区,客户等方面重复出现,每天只有一半列特定于记录。

问题:

  1. 我应该立即将它作为转储表全部导入到一个表中。
  2. 我应该通过导入过程转换数据并将导入拆分为不同的表
  3. 我应该根据我可以在导入期间获取唯一键的列来形成一个id字段
  4. 我应该使用auto inc id字段。
  5. 这应该是InnoDB等什么样的表
  6. 我担心此表上的数据过载会导致在构建报表时越来越难以提取报告表吗?

    建议真有帮助。感谢。

1 个答案:

答案 0 :(得分:1)

  1. 拥有autoinc id通常比没有它更有帮助
  2. 为确保数据完整性,您可以在构成ID
  3. 的6列上使用uniq索引
  4. 如果你有足够的内存,MySQL对数据库中的数百万条记录非常熟悉
  5. 如果您仍然担心数百万条记录 - 只需将您的数据按月汇总到另一张表中。如果你不能 - 增加更多的内存。
  6. 尽可能在导入期间转换尽可能多的数据,只要它不会影响性能。在数据已经导入时对其进行转换会给MySQL服务器带来不必要的负担,如果可以避免这样做 - 请避免使用。
  7. MyISAM(对吗?)通常更适用于统计类型的数据,这类数据不会经常UPDATEd但是InnoDB在过去几年中已经赶上(看看percona的XtraDB引擎)并且基本上是相同的性能 - 明智的。
  8. 我认为这里最重要的一点是定义您的数据保留率 - 您很少需要在一两年后保留每日解决方案。

    如果您认为将来可能仍需要每日解决方案,则汇总到较低分辨率的帧并存档(mysqldump> bzip非常有效)。