要件が次のようなクライアント向けのシステムを設計しています。
セロリとsqliteデータベースをバックエンドとして使用して構築することにしました。 JSON行の数は多くなく、おそらくメモリ内に収まる数百万です。個々のコンポーネントはすべて正常に動作していますが(ファイルのアップロード、ファイルの読み取り、APIの呼び出し、dbへの書き込みなど)、セロリを使用したタスクのディスパッチの全体的なアーキテクチャについてはわかりません。
ファイルにN行あるとすると、次のようになります。
result
列(最初はnull)を使用して、データベースにN個のオブジェクトを作成します。result
列(最初はnull)を使用して、データベースにN個のオブジェクトを作成します。オプションAは、その単純さのために優先していますが、スケジュールできるセロリタスクの数の制限と、ブローカー(RabbitMQ)がそれを処理するかどうかはわかりません。オプションBの場合、大きなリスクは、セロリタスクが何らかの理由で何らかの行Mで終了した場合、後続のすべてのオブジェクトが試行されることはないということです。
これらの2つについての考え、または3番目に優れた代替案があるかどうか。
オプションAは、1人のワーカーのみが管理できる巨大なタスクではなく、APIを個別にワーカーに設定できるので便利です。
KombuとCeleryを使用した非常に類似したシナリオがあります。
ご覧のとおり、基本的には同じアプローチを使用しています。本番環境では、問題なく1時間あたり約2000件のメッセージを処理しています。