我有一个巨大的数据集,在 MySQL PHP 数据库中上传数据的更快方法是什么,并且无论如何都可以验证是否导入了所有数据。
任何建议或提示将不胜感激。谢谢。
我有一个巨大的数据集,在 MySQL PHP 数据库中上传数据的更快方法是什么,并且无论如何都可以验证是否导入了所有数据。
任何建议或提示将不胜感激。谢谢。
如果数据集只是巨大的(可以在数小时内传输),那么寻找有效方法的努力是不值得的——任何脚本都应该能够完成这项工作。我假设您正在阅读一些非数据库格式(例如纯文本)?这样,只需阅读并插入。
如果在插入行之前需要仔细处理,您可能需要考虑首先在内存中创建真实对象及其子对象,然后将它们映射到行和表 - 对象-关系数据源模式在这里很有价值。但是,这会慢得多,除非绝对必要,否则我不会推荐它,特别是如果你只做一次。
为了快速访问,有些人在磁盘上直接写入二进制对象 blob,然后将其直接读入数组,但在 C/C++ 等语言中可用;我不确定它是否/如何在脚本语言中使用。同样,这有利于将数据读回内存,而不是传输到数据库。
验证数据是否已传输的最简单方法是将 db 的 count(*) 与文件中的项目数进行比较。更高级的方法是计算主键集的哈希(例如 sha1)。
我使用了LOAD DATA,这是一个标准的 MySql Loader Tools。它工作得很好而且更快。有很多选择。
您可以使用 :
名为 export_du_histo_complet.txt 的数据文件,多行如下:“xxxxxxx.corp.xxxxxx.com”;“GXTGENCDE”;“GXGCDE001”;“M_MAG105”;“TERMINE”;“2013-06-27”;“14:08 :00";"14:08:00";"00:00:01";"795691"
sql 文件(因为我使用调用 SQL 文件的 Unix Shell):
LOAD DATA INFILE '/home2/soron/EXPORT_HISTO/export_du_histo_complet.txt'
INTO TABLE du_histo
FIELDS
TERMINATED BY ';'
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES
STARTING BY ' '
TERMINATED BY '\n'
(server, sess, uproc, ug, etat, date_exploitation, debut_uproc, fin_uproc, duree, num_uproc)
我指定了要导入的表字段(我的表有更多列)