概要:
ドロップダウンの場合、Postgres データベースのテーブルの JSONField 内に格納されている特定のキーの個別の値を計算する必要があります。最悪のシナリオ: テーブルには 100 万から 1000 万のエントリが含まれています。
バックグラウンド:
複数の展開 (顧客ごとに 1 つ) があるセットアップを開発しています。各デプロイメントには、バックエンドと複数のクライアントが含まれています。ログは、クライアントからバックエンドに継続的に投稿されます。これらのログには、ログ エントリの送信元を説明するlog_meta
という名前のキーを含むフィールド が含まれます。origin
の値は顧客origin
ごとに異なる場合があり、制限された値のセットを強制するつもりはありませんorigin
が、一般的にはクライアントが実行されている環境を示します。"DEV" と "PRODUCTION" は の潜在的な値ですorigin
。origin
実際には、1 つの展開で に異なる値が 1 ~ 2 つしかない場合があります。ログの数は、100 万から 1000 万の範囲であると予想できます。
from jsonfield import JSONField
from django.db import models
class Log(models.Model)
# Other fields
log_json = JSONField(default=list)
log_meta: JSONField(default=dict) # Will contain a key named origin
「管理者フロントエンド」では、管理者が(ドロップダウンを介して)フィルタリングして、特定のオリジンからのログのみを表示できるようにしたいと考えています。そのためには、origin
フィールドの個別の値を抽出する必要があります。
ログの数が場合によっては 100 万から 1000 万の範囲になることを考慮して、Django でこの一連の個別の値を計算するにはどうすればよいですか?
私がすでに試したこと:
- 方法がわからないので仕方ありません。
追加情報:
- バックエンドは Django で書かれており、Postgres をデータベースとして使用しています。
- その場で値を計算するのが現実的でない場合は、ログがロールインするときに個別の値のセットを継続的に構築することもできます。追加の状態が導入されるため、これを 2 番目のオプションと考えています。可能であれば、代わりにセットを計算/派生することを好みます。