質問編集履歴
1
質問内容
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
cakePHP3での大量データのinsert処理について
|
body
CHANGED
@@ -1,51 +1,51 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
-
cakephp3で5000レコードあるCSVデータのインサート処理を行いたいのですが、3000件まではなんとかインサートされるのですが、それを超えると、ブラウザの処理が止まってしまい処理が終了しない形になります。
|
2
|
+
cakephp3で5000レコードあるCSVデータのインサート処理を行いたいのですが、3000件まではなんとかインサートされるのですが、それを超えると、ブラウザの処理が止まってしまい処理が終了しない形になります。30秒以上たっても応答がないです。
|
3
3
|
|
4
|
-
ちなみに、同じレコードinsert文を作って、phpmyadminで
|
4
|
+
ちなみに、同じレコード数でinsert文を作って、phpmyadminでインサートすると、3秒ほどで登録が完了します。
|
5
5
|
|
6
|
-
|
7
|
-
|
8
6
|
### 発生している問題・エラーメッセージ
|
9
7
|
|
10
8
|
```
|
9
|
+
ブラウザがタイムアウトして、「このページは動作しません」という形になり、ブラウザの処理がストップする。
|
11
|
-
|
10
|
+
当然データは登録されてないです。
|
11
|
+
|
12
12
|
```
|
13
13
|
|
14
14
|
### 該当のソースコード
|
15
15
|
|
16
|
-
```ここに言語名を入力
|
17
|
-
ソースコード
|
18
16
|
```
|
19
17
|
|
18
|
+
$articles = TableRegistry::get('Articles');
|
19
|
+
// 保存するデータ(5千件)
|
20
|
-
|
20
|
+
$data = [
|
21
|
+
[
|
22
|
+
'title' => 'First post',
|
23
|
+
'published' => 1
|
24
|
+
],
|
25
|
+
[
|
26
|
+
'title' => 'Second post',
|
27
|
+
'published' => 1
|
28
|
+
],
|
21
29
|
|
30
|
+
(5千件)
|
31
|
+
];
|
22
|
-
|
32
|
+
//$dataは実際はループで作成
|
23
33
|
|
34
|
+
// 実行クエリ
|
35
|
+
$query = $articles->query();
|
36
|
+
$query->insert(['title', 'published']);
|
24
|
-
|
37
|
+
// dataの数だけvalues追加
|
25
|
-
|
38
|
+
foreach ($data as $d) {
|
26
|
-
|
39
|
+
$query->values($d);
|
40
|
+
}
|
27
|
-
|
41
|
+
// 実行
|
28
|
-
|
29
|
-
ここに質問の内容を詳しく書いてください。
|
30
|
-
(例)PHP(CakePHP)で●●なシステムを作っています。
|
31
|
-
■■な機能を実装中に以下のエラーメッセージが発生しました。
|
32
|
-
|
33
|
-
|
42
|
+
$query->execute();
|
34
|
-
|
35
43
|
```
|
44
|
+
上記ソースは、https://qiita.com/KeijiYONEDA/items/8c2f0e2a8f9cfbf08eeb
|
36
|
-
|
45
|
+
を参考にしてますが、他に何か設定等必要ないのでしょうか。
|
37
|
-
```
|
38
46
|
|
39
|
-
|
47
|
+
どなたかご存知の方がいらっしゃいましたら、ご教授いただけないでしょうか。
|
40
48
|
|
41
|
-
|
49
|
+
もしくは上記やり方でなくてもいいので、処理スピード早い方法を教えていただければ助かります。
|
42
|
-
ソースコード
|
43
|
-
```
|
44
50
|
|
45
|
-
### 試したこと
|
46
|
-
|
47
|
-
ここに問題に対して試したことを記載してください。
|
48
|
-
|
49
|
-
### 補足情報(FW/ツールのバージョンなど)
|
50
|
-
|
51
|
-
|
51
|
+
以上ですが、よろしくお願いいたします。
|