質問させて頂きます。
フレームワークにcakePHP、DBにMySQLを使用して開発をしております。
バルクインサートする際にメモリが足りず処理を行なうことが出来ません。
何か参考になる方法があれば教えて頂けると幸いです。
今回10万件ほどの大量のランダム文字列(ユニークを期待)データをPHP側で作成して、そのデータをバルクインサートを使用して保存したいと考えております。
※この時点でユニークのチェックをしているわけではないので、必ずしもユニークなデータとは限りません。
また、データ投入方法として、データの重複を避けるため、「INSERT IGNORE INTO」を使用しております。
cakePHPのsave()を使用して、「INSERT IGNORE INTO」を設定する方法が分からなかったため、
query()を使用して、直接SQLを記述しております。
また、SQLを直接記述するためサニタイズも行っております。
具体的には
-----------------------------------------------------------------
// (?, ?)の部分はimplode()を使用してデータ件数分記述します。
$sql = "INSERT IGNORE INTO random_code_table ( random_code, created) VALUES (?, ?),(?, ?),(?, ?),…(?, ?)";
// $random_code_list配列に10万件のランダム文字列データを格納しています。
foreach ($random_code_list as $code) {
$params[] = $code;
$params[] = date('Y-m-d H:i:s');
}
$this->query($sql, $params, false );
-----------------------------------------------------------------
上記の記述にして、1万件のデータを投入した場合、1件ずつ追加していた時よりも数段早く処理速度を上げることが出来ました。
しかし、10万件のデータを投入した場合、下記のようなPHPエラーが出て、処理がSTOPしてしまいます。
「Error: Fatal Error (1): Allowed memory size of 268435456 bytes exhausted (tried to allocate 1000084 bytes)…」
自分なりに解決方法は無いかと調べてみたのですが、php.iniでメモリの上限を上げるといった方法しか見つけることが出来ず、こちらに質問させて頂きました。
理解不足の部分もあり、質問内容に不備な点があるかもしれませんが、少しでもヒントになるようなことがあれば教えて頂けると幸いです。
ご存じの方がいらっしゃいましたら、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
メモリが足りないと言っているのですから、メモリを消費しないようにコードを書き換えるべきです。
というか、10万件をいっぺんに登録しようとしているところに問題があるように思います。
データを1万件ずつに分けて登録してみたらどうでしょうか。
あるいは、SQL でデータ重複をはじくのではなく PHP のほうで array_unique() を使って重複を除去したうえで save() するとか。
http://www.php.net/manual/ja/function.array-uniq …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Excel(エクセル) Excel同士のデータの突合 3 2023/08/07 16:34
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- ドライブ・ストレージ 古い外付けHDDから新品外付けHDDへのデータ移行方法 (Mac) 2 2022/12/11 02:01
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
VBA 空白セルを削除ではない方...
-
メモ帳(テキストデータ)をExc...
-
大学のゼミのレポートがムカつ...
-
S9タイプからXタイプにデータ...
-
配列の勉強をしています。使用...
-
二分探索の平均探索回数
-
特定のデータの抽出方法を教え...
-
多量のSUMIF式を軽くしたい
-
ユーザーフォームのテキストボ...
-
DataGridViewのデータの引渡し...
-
この行は既に別のテーブルに属...
-
Accessで該当データにフラグを...
-
シーケンサにパソコンからアク...
-
【エクセル】測定時間がバラバ...
-
MSCommを用いたRS-232-Cデータ転送
-
ページ数を求めたい
-
C# ソケット通信でデータ受信時...
-
ブレーカー落ちで壊れたりしな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
この行は既に別のテーブルに属...
-
S9タイプからXタイプにデータ...
-
Excelのマクロでワードのテキス...
-
エクセルで2つの時系列のデー...
-
Accessで該当データにフラグを...
-
ユーザーフォームのテキストボ...
-
シーケンサにパソコンからアク...
-
VBAを使ってOutlookメール本文...
-
EXCELVBAでSQLserverからデータ...
-
[C言語] コメント文字列を無視...
-
プログラミング python pandas ...
-
VBA 毎日取得するデータを順番...
-
<VB>String→Object
-
カンマからスラッシュに
おすすめ情報