【问题标题】:Inserting big csv,xls data files into Mysql with codeigniter使用codeigniter将大csv,xls数据文件插入Mysql
【发布时间】:2014-02-18 23:34:16
【问题描述】:

此代码仅适用于包含大约 1K 记录的 csv 文件。但是,如果我尝试插入 100K 的文件,它就会挂起。 我在网上搜索了很多建议,比如调整 php 执行超时,增加分配给 php 的内存(这有点帮助),但是我需要导入像 100 万条记录这样的大数据文件。

我正在使用 codeigniter。 有没有办法加快这个过程: 关于此功能的说明: - 第一个“INSERT INTO”将登录的客户端(admin_id)和创建时间(create_time)插入到table="client"中。

-第二个“INSERT INTO”将attribute_id、client_id和value插入到table="client_attribute_value"中。

    function Add_multiple_users($values)
{
    $err = '';
    foreach($values as $rows)
    {
        $clientQuery = 'INSERT INTO
                            client
                            (
                                admin_id,
                                create_time
                            )
                            VALUES
                            (
                                "'.$this -> session -> userdata('user_id').'",
                                "'.date('Y-m-d H:i:s').'"
                            )';
        $clientResult = @$this -> db -> query($clientQuery);
        if($clientResult)
        {
            $client_id = $this -> db -> insert_id();
            foreach($rows as $row)
            {
                $attrQuery = 'INSERT INTO
                                    client_attribute_value
                                    (
                                        attribute_id,
                                        client_id,
                                        value
                                    )
                                    VALUES
                                    (
                                        "'.$row['attribute_id'].'",
                                        "'.$client_id.'",
                                        "'.addslashes(trim($row['value'])).'"
                                    )';
                $attrResult = @$this -> db -> query($attrQuery);
                if(!$attrResult)
                {
                    $err .= '<p class="box error">Could not add attribute for<br>
                            Attribute ID: '.$row['attribute_id'].'<br>
                            Client ID: '.$client_id.'<br>
                            Attribute Value: '.trim($row['value']).'</p>';
                }
            }
        }
    }
    return $err;
}

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    我以前处理过这个问题。 How to parse Large CSV file without timing out?

    上传文件本身或找到文件的位置并使用 cron 作业来处理它。没有超时。我个人这样做的方式是设置一个队列系统,其中包含一个指向文件并具有状态标志的数据库表。一旦 cron 作业选择了该项目,它将开始插入 CSV 文件(一天结束时它的大小约为 300mb)。一旦 cron 作业完成插入数据库,它将删除 csv 文件,更新该排队项目的状态,并通过电子邮件告诉我它已完成。

    【讨论】:

    • 我可以在这个函数中加入“ LOAD DATA INFILE ”吗?
    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    相关资源
    最近更新 更多