2

我有一个巨大的数据集,在 MySQL PHP 数据库中上传数据的更快方法是什么,并且无论如何都可以验证是否导入了所有数据。

任何建议或提示将不胜感激。谢谢。

4

2 回答 2

0

如果数据集只是巨大的(可以在数小时内传输),那么寻找有效方法的努力是不值得的——任何脚本都应该能够完成这项工作。我假设您正在阅读一些非数据库格式(例如纯文本)?这样,只需阅读并插入。

如果在插入行之前需要仔细处理,您可能需要考虑首先在内存中创建真实对象及其子对象,然后将它们映射到行和表 - 对象-关系数据源模式在这里很有价值。但是,这会慢得多,除非绝对必要,否则我不会推荐它,特别是如果你只做一次。

为了快速访问,有些人在磁盘上直接写入二进制对象 blob,然后将其直接读入数组,但在 C/C++ 等语言中可用;我不确定它是否/如何在脚本语言中使用。同样,这有利于将数据读回内存,而不是传输到数据库。

验证数据是否已传输的最简单方法是将 db 的 count(*) 与文件中的项目数进行比较。更高级的方法是计算主键集的哈希(例如 sha1)。

于 2013-06-27T12:50:13.003 回答
0

我使用了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)
    

我指定了要导入的表字段(我的表有更多列)

  • 请注意,存在MySql 错误,因此您不能使用变量来指定您的 INFILE。
于 2013-06-27T12:58:10.457 回答