質問: 以下のドキュメントではCloud Firestoreでは結果セットのサイズにパフォーマンスが影響すると記載されています。 どのような検索アルゴリズムの場合、データセットではなく結果セットのサイズにパフォーマンスが依存するのか興味があり質問しました。 ご存知の方がいらっしゃれば教えていただきたいです。 Firestoreドキュメント ``` クエリはデフォルトでインデックス付きになります。クエリのパフォーマンスは、データセットではなく、結果セットのサイズに比例します。 ```
回答: ##### ご質問 > > Cloud Firestoreのクエリのパフォーマンスがデータセットではなく、結果セットのサイズに比例するのはなぜですか? > > > ##### 回答 その理由は、引用されてる文の中に記載されています。以下です。 > > クエリはデフォルトでインデックス付きになります > > > Firestoreは**すべてのクエリにインデックスを使用**することで(良くクエリが弱いと言われるようにクエリに制約をもうけている点もありますがここでは触れません)、優れたスケーラビリティと高いパフォーマンスを実現しています。 以下の部分も参照してみてください。 > > クエリを実行する際にインデックスが存在しないと、ほとんどのデータベースではアイテムごとにデータベースのコンテンツ全体をクロールすることになるため、データベースが大きくなるにつれて処理が大幅に遅くなります。Cloud Firestore では、すべてのクエリにインデックスを使用することで、クエリの高パフォーマンスを確保します。その結果、クエリのパフォーマンスは結果セットのサイズに依存することになり、データベース内のアイテム数には依存しません。 > > > また、Firestoreは独自の分散アーキテクチャを使用して自動的にスケーリング管理するので、データはあちこちに散らばっています。 極端な例で説明すると、あちこちに散らばっているデータ`100`のうち`50`を要求するよりも、**インデックスを使って`10,000`のうち`1`を要求する方がパフォーマンスが良い**ということです。 これ以上の情報は一般公開されてないと思うので、もう少し深くGoogle独自の分散アーキテクチャについて知りたければ`BigTable`や`Spanner`の論文等も読み漁ってみると良いかもしれません。