2016-10-24 9 views
0

私は、Sequelの宝石とQueを使用しています。多くのデータを処理する必要があるジョブ、1データベーストランザクションに安全に置くことができるものよりも多くのデータをインポートすることは安全です。定期的に80k +行(現在、1kレコードのトランザクションバッチでレコードを処理しています)。多くのデータを処理するジョブを作成する場合は、安全ですか?

gem/postgresが、バックグラウンドワーカーの実行によって何らかの種類の暗黙のトランザクションを実行すると、ロールバックセグメントが手に入り、スワップ地獄でDBがクラッシュする可能性があります。

私はこれが求めている理由は、ドキュメントからこのライン:

安全性 - Rubyのプロセスが死んだ場合、それが働いているジョブがロックされたかで失われた、または左されることはありませんあいまいな状態 - 他の労働者がすぐに拾うことができるようになります。

これは私の恐怖が真実であれば、私の80kレコードを同じロールバックセグメントにサイレントにラッピングする可能性があります。私はラップトップで試すことができますが、私のラップトップはプロダクションのVMよりはるかに強力ですので、私の開発環境ではうまくクランチされてしまい、展開が奇妙にクラッシュする恐れがあります。

類似のQueエクスペリエンスを持つ人が助けてくれますか?

リンク:ケの開発者によって回答the same question on GH

答えて

0

各ジョブの前後に暗黙のトランザクションはありません - その保証は諮問ロックでジョブIDをロックすることによって提供されています。 Postgresは、トランザクション状態にかかわらず、クライアント接続が失われた場合に私たちのためにアドバイザリロックを解放します。

関連する問題