大量のデータのデータベース挿入によるエラー、タイムアウトの解決

829 ワード

1.メモリのサイズを設定し、メモリのオーバーフローを防ぐ
ini_set('memory_limit','1024M');

2.利用キャッシュ:redisパイプ(Pipelining).非ブロック要求/応答サーバは、非同期処理を実現することができ、古い要求が応答されていなくても、新しい要求を処理することができる.
a.    redis       :set key value......
b.        Redis Protocol :"3\r
$3\r
set\r
$3\r
key\r
$5\r
$5\r
value\r
"... c.redis-cli --pipe

3.ロット挿入、例えば:1000件ごとに一括挿入文を実行する
$arr = array_chunk($array,5000);
foreach($arr as $k=>$v){
    $sql = $queryBuilder->batchInsert('user', ['name', 'age'], $v);
}

4.トランザクションを使用して、挿入のパフォーマンスを向上させます.トランザクションを使用すると、挿入エラー時にロールバックできます.また、INSERT操作を行うと、MySQL内部にトランザクションが作成され、トランザクション内で実際の挿入処理が行われます.トランザクションを使用すると、トランザクションの作成にかかる消費量を減らすことができ、すべての挿入は実行後にコミットされます.