teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

質問内容

2018/06/25 07:54

投稿

youji999
youji999

スコア9

title CHANGED
@@ -1,1 +1,1 @@
1
- cakephp3での大量データのinsert処理について
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
- ### 補足情報(FW/ツールバージョンなど)
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
+ 以上ですが、しくお願いたします