レイテンシの問題を解決する

このページでは、Firestore でレイテンシの問題を解決する方法について説明します。

レイテンシ

次の表に、レイテンシ増加の潜在的な原因を示します。

レイテンシの原因 影響を受けるオペレーションのタイプ 解決策
500-50-5 ルールを超える持続トラフィック。 読み取り / 書き込み

トラフィックが急増する場合、Firestore は需要の増加に対応するために自動的にスケーリングを試みます。Firestore がスケーリングすると、レイテンシが減少し始めます。

ホットスポット(狭いドキュメント範囲に対する高頻度の読み取り、書き込み、削除)により、Firestore のスケーリングが制限されます。スケールを考慮して設計することで、アプリケーションのホットスポットを特定します。

1 つのドキュメントの更新頻度が高すぎるか、トランザクションによって行われた競合。 読み取り / 書き込み

個々のドキュメントへの書き込みレートを下げます。

トランザクションでのデータ競合とトランザクションの使用方法を確認します。

マージ結合のクエリを遅くします。 読み取る たとえば、複数の等式フィルタ(==)を持つクエリでは、複合インデックスを使用しない場合は、マージ結合のクエリが遅くなる可能性があります。パフォーマンスを向上させるには、これらのクエリに複合インデックスを追加します。詳細については、Firestore クエリが遅い理由の理由 #3 をご覧ください。
多数のドキュメントを返す大規模な読み取り。 読み取る ページ分けを使用して、大規模な読み取りを分割します。
最近の削除が多すぎる。 読み取り
これは、データベース内のコレクションを一覧表示するオペレーションに大きな影響を与えます。
最近の削除が多すぎるためにレイテンシが発生している場合、しばらくすると問題は自動的に解決するはずです。問題が解決しない場合は、サポートにお問い合わせください
リスナーの追加と削除が極度に短時間で実施されている。 リアルタイム リスナー クエリ リアルタイム アップデートのおすすめの方法を確認する
大規模なドキュメント、または多数の結果を含むクエリを聞き取ります。 リアルタイム リスナー クエリ リアルタイム アップデートのおすすめの方法を確認する
インデックス ファンアウト、特に配列フィールドとマップ フィールドの場合。 write 配列フィールドとマップ フィールドの使用方法を確認します。マップ フィールドの場合、サブフィールドのインデックスを無効にすることができます。コレクション レベルの除外も使用できます。
大量の書き込みとバッチ書き込み。 write

各バッチ書き込みの書き込み数を減らしてみてください。バッチ書き込みはアトミックであり、1 つのバッチで多数の書き込みを行うとレイテンシと競合が増加する可能性があります。たとえば、10 回の書き込みのバッチは、500 の書き込みのバッチよりもパフォーマンスが優れています。

アトミック性を必要としない大量のデータ入力の場合は、並列化された個別の書き込みでサーバー クライアント ライブラリを使用します。バッチ書き込みは、シリアル化された書き込みより優れたパフォーマンスを発揮しますが、並列書き込みほど優れてはいません。