0

複数のドキュメント (通常は数千) 内に表示される一意の識別子に基づいて、数十万のドキュメント内の 1 つのフィールドを更新する最良の方法は何ですか?

シナリオの簡単な例:

各ドキュメントには、IP と呼ばれる一意でないフィールドが含まれており、その目的は、特定の IP に基づいて各ドキュメントをメタデータで更新することです。たとえば、IP '127.0.0.1' は MongoDB 内の 22,000,000 のドキュメントに関連付けることができ、それぞれを同じメタデータで更新する必要があります。このプロセスは、すべての IP アドレスに対して継続され、その後、数十万のドキュメントすべてに対して継続されます。これに対する私の現在のアプローチでは、PyMongo 内の bulk_write および UpdateMany 操作を利用しています。ただし、このアプローチでは、タスクを正常に完了するまでに数十時間かかります。私が求めているものを達成するためのより効率的な方法はありますか?

現在のロジックのスニペット (データは時間に依存するため、 and クエリ演算子が必要です):

bulk_updates = []

for ip in ips:
    bulk_updates.append(UpdateMany({"$and": [{"ip": ip}, {'timestamp': timestamp}]}, {'$set': {'metadata': meta}}))

mainDB[db_name].bulk_write(bulk_updates)

パフォーマンスを改善するためのヘルプ/提案は大歓迎です。

4

0 に答える 0