2011-07-27 1 views
0

私は、CSVファイルから読み込まれた非常に大きなオブジェクトの配列を持っていて、それをデータベースに保存します。 これは私がやっているものです:Rails3で本当に高速なオブジェクト配列をデータベースに保存するには?

# Read CSV 
... each do |values| 
    new_value = Model.new 
    ... # fill properties 
    @new_values.push new_value # put it into the array 
end 

# now save them to the database 
@new_values.each do |new_value| 
    new_value.save :validate => false 
    @added_counter += 1 
end 

をしかし、それは配列の各要素に対して陳述を行いますので、これは本当に遅いです。これはどのようにして迅速かつ正確に行うことができますか?

+0

私はMySQLを使用しており、モデルが作成されてから、CSVファイル(それぞれ約30個の整数または浮動小数点数)から多数のpopertysを取得します。 –

+1

ARをそのまま残してSQLにまっすぐに進んだり、単にMySQLにCSVをすべてインポートさせてもらうことを考えましたか? ARはまさにスピードデーモンではありません。 –

+0

私はCSVファイルを読むときにデータを検証する必要があります。しかし、カスタムSQLステートメントを構築する方法を行くようです。私はそれを試みます。 –

答えて

3

activerecord-importが役に立ちます。

それはのような何かを行うことができます:これはムーのコメントに基づいてソリューションを(!感謝)が短すぎるです

books = [] 
10.times do |i| 
    books << Book.new(:name => "book #{i}") 
end 
Book.import books 
+0

ああいいです。これを手作業よりもずっとうれしいです。 –

0

を。 手作りのSQL文を使って実行します。

この解決方法には、約3分の1の時間がかかります。しかし、それはちょっと私にハックのようです。

+0

これは、activerecord-importを使用して書き込みを避けるためのコードです。 ARモデルの列定義に基づいて、インポートするデータをインテリジェントに変換します。また、MAX PACKET ALLOWEDエラーを超過する可能性があるMySQLのようなRDBMSのインポート文の実行量を最小限に抑えます。 –

関連する問題