あるテーブルに約1億レコードを登録したいと考えているのですが途中で止まってしまいます。
環境としてはAWS(EC2)でRDS(Mysql)にデータを登録させています。
ruby 2.4.1
rails 5.1.2
1つ1つのデータ辺りのボリュームは小さいのですがデータは1件毎に簡単な計算を都度おこなう必要があり、その結果をDBに登録させていといった感じです。
計算を行うのにDBのデータは必要ありません。
いくつか試したのですが上手いきませんでして。。。
1件毎に登録(COMMIT)していく方法ですと50-60万レコードでプログラムが止まってしまいます。
Bulk Insertを利用して計算させた結果を10万レコード毎に登録させる方法も行ってみましたが、こちらも50-60万レコードで止まってしまいます。
EC2は t2.micro ですのでスペック不足の問題なのかなーとも思うのですが。。。
何か良い方法など御座いましたらご教授頂けると幸いです。
###追加です。
実際のソースコードがを書けないのですが内容としては以下の様な感じです。
※Bulk Insertさせているコードを記載させて頂きます。
一回10万レコードを1000回処理させるような感じです。
1000.times { Aiueo = [] 10.times{|num_1| # ここで一回目の計算処理 計算させた結果 => Kakikukeko 10000.times{|num_2| #ここで二回目の計算処理(一回目(Kakikukeko)を加えた計算) 計算させた結果 => Sasisuseso Aiueo << Model.new( Kakikukeko, Sasisuseso) } } Model.import Aiueo }
DB(Mysql)にKakikukekoとSasisusesoの計算結果を保存させています。
上記で一回辺り10万レコードを保存させて、これを1000回計算させようとしています。
※凄く単純に書いていますので何とも言えないと思うのですが。。。