データの一括読み込みに関するベスト プラクティス
このページでは、mongoimport
などのツールを使用して MongoDB 互換の Firestore にデータを一括読み込みする際のベスト プラクティスについて説明します。
Firestore は、ビジネスのニーズに合わせて自動スケーリングを提供する高度に分散されたシステムです。Firestore は、システムが受信した負荷に基づいてデータを動的に分割して結合します。
負荷ベースの分割は、事前構成なしで自動的に行われます。Firestore のロードベースの分割システムには、他のドキュメント データベースと比較して重要な独自の特徴があります。データをモデル化する際は、これらの特徴を念頭に置くことが重要です。
Firestore の分散型という性質上、一部の設計上の選択を変更する必要がある場合があります。特に、プライマリ レプリカが書き込みスループットのボトルネックとなるデータベース向けに最適化されたワークロードでは、変更が必要になることがあります。
ベスト プラクティス
シングル スレッド クライアントで大量のデータを処理するワークロードでは、ボトルネックが発生する可能性があります。クライアントとサーバーのスループットが同様に一致しているため、クライアントはシングル スレッドを使用してデータを一括読み込みできる場合があります。Firestore データベースは、はるかに多くの並列処理を処理できますが、クライアントがリクエストを並行して送信するように構成する必要があります。
mongoimport
mongoimport
ツールを使用する場合、リクエストはデフォルトで順番に実行されます。Firestore への読み込み時間を短縮するには、--numInsertionWorkers
フラグを使用してワーカーの数を設定します。適切な設定はクライアントのサイズに応じて調整が必要になる場合がありますが、通常は少なくとも 32
から始めることをおすすめします。
非同期プログラミング
MongoDB 互換 API を使用して独自のソフトウェアを開発する場合は、次の方法で並列処理を改善できます。
- 非同期フレームワーク: 非同期フレームワークを使用すると、リクエストを並行して処理して応答できます。データベースへの呼び出しを行う際に、複雑なプーリングやキューイングを開発する必要はありません。各リクエスト フローは独立した接続を使用し、データベース呼び出しを並行して行うことができます。
- 並列化されたコンピューティング サービスを使用する: Cloud Run などのサービスを使用すると、システムはデータを処理するために必要なコンピューティング ワーカーの数をスケーリングできます。
一時的な障害
Firestore などの大規模な分散システムを操作していると、ネットワークの不具合やドキュメントの競合などの一時的な障害が発生することがあります。
大量の情報を一括読み込みする場合は、大規模な一括読み込みオペレーションを失敗させることなく、失敗した書き込みの再試行戦略を維持することが重要です。