MongoDB データベースにデータをロードする Flask サーバーを実行しています。大量のデータがあり、時間がかかるため、バックグラウンド ジョブで実行したいと考えています。
メッセージ ブローカーとして Redis を使用し、ジョブ キューを実装するために Python-rq を使用しています。すべてのコードは Heroku で実行されます。
私が理解しているように、python-rq は pickle を使用して、実行する関数 (パラメーターを含む) をシリアル化し、これを他の値と共に Redis ハッシュ値に追加します。
パラメータにはデータベースに保存する情報が含まれているため、非常に大きく (~50MB)、これをシリアル化して Redis に保存すると、かなりの時間がかかるだけでなく、大量のメモリも消費します。Heroku の Redis プランは、100MB のみで月額 30 ドルかかります。実際、次のようなOOMエラーが頻繁に発生します。
OOM command not allowed when used memory > 'maxmemory'.
2 つの質問があります。
- python-rq はこのタスクに適していますか、それとも Celery の JSON シリアライゼーションの方が適切でしょうか?
- パラメータをシリアル化せずに参照する方法はありますか?
最善の解決策についてのご意見をお待ちしております。