大量のデータのデータベース挿入によるエラー、タイムアウトの解決
829 ワード
1.メモリのサイズを設定し、メモリのオーバーフローを防ぐ
2.利用キャッシュ:redisパイプ(Pipelining).非ブロック要求/応答サーバは、非同期処理を実現することができ、古い要求が応答されていなくても、新しい要求を処理することができる.
3.ロット挿入、例えば:1000件ごとに一括挿入文を実行する
4.トランザクションを使用して、挿入のパフォーマンスを向上させます.トランザクションを使用すると、挿入エラー時にロールバックできます.また、INSERT操作を行うと、MySQL内部にトランザクションが作成され、トランザクション内で実際の挿入処理が行われます.トランザクションを使用すると、トランザクションの作成にかかる消費量を減らすことができ、すべての挿入は実行後にコミットされます.
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内部にトランザクションが作成され、トランザクション内で実際の挿入処理が行われます.トランザクションを使用すると、トランザクションの作成にかかる消費量を減らすことができ、すべての挿入は実行後にコミットされます.