【问题标题】:Load big file into database将大文件加载到数据库中
【发布时间】:2013-01-19 04:17:31
【问题描述】:

我有一个大文件,其中包含大约11 Mb。这是一个 CSV 文件,我需要将该文件的内容加载到 Postgres 数据库中。

我使用 PHP 脚本来完成这项工作,但总是在某个时刻停止。

我为 PHP 内存和其他东西放了大容量,我可以加载更多数据,但不是所有数据。

我该如何解决?我需要清理任何高速缓存吗?在 PHP 中管理大文件的一些秘密?

提前致谢。

更新:添加一些代码

$handler = fopen($fileName, "r");
$dbHandler = pg_connect($databaseConfig);

while (($line = $handler->fgetcsv(";")) !== false) {
    // Algorithms to transform data

    // Adding sql sentences in a variable

    // I am using a "batch" idea that execute all sql formed after 5000 read lines
    // When I reach 5000 read lines, execute my sql
    $results = pg_query($dbHandler, $sql);
}

【问题讨论】:

  • 真正的问题是,为什么要将这么大的文件加载到数据库中?解决这个问题的最好方法是简单地将文件的路径存储在数据库中,然后在文件系统上使用fread
  • 我必须将数据从旧系统迁移到新系统。数据就是这种格式。我必须在新系统中转换并保存。
  • 好的,所以澄清一下,您不想简单地逐字节导入 CSV 文件内容,而是创建一个适合 CSV 的表结构,然后用其中的内容填写数据库中的行CSV 文件?
  • @Guido 你说你有一个 PHP 脚本来完成这项工作 - 你是如何从 CSV 文件中读取数据的?能发下源代码吗? (考虑到它会占用你所有的记忆,你可能会以一种荒谬的方式这样做)。

标签: php postgresql data-migration


【解决方案1】:

如果您可以直接访问服务器(并且您不使用某些颠覆软件),postgre 有一个更好的选择,它对资源的要求要低得多。请记住,php 是一种缓慢且消耗资源的语言

COPY my_table_name FROM '/home/myfile.csv' DELIMITERS ',' CSV

【讨论】:

    猜你喜欢
    • 2020-10-30
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多