web-dev-qa-db-ja.com

Firebaseとインデックス作成/検索

数千のオブジェクトのコレクションに対して全文検索を使用する必要があるアプリケーションにFirebaseを使用することを検討しています。クライアント専用アプリケーションを提供するというアイデアは好きですが(データのホスティングについて心配する必要はありません)、検索の処理方法がわかりません。データは静的であるため、インデックス作成自体は大した問題ではありません。

クエリを実行してFirebaseオブジェクトハンドルを返す追加のサービスが必要になると思います。このようなサービスは固定された場所で起動できますが、その可用性とスケーラビリティについて心配する必要があります。このアプリのトラフィックはそれほど多くないと思いますが、同時ユーザー数が数千人に達する可能性があります。

建築上の考え?

27

長期的には、Firebaseはより高度なクエリを実行するため、特別なことをしなくても、この種のクエリを直接サポートできることを願っています。それまでは、いくつかのオプションがあります。

  1. 検索を処理するサーバーコードを記述します。最も簡単な方法は、前述のように、インデックス作成/検索を担当するサーバーコードを実行することです。 FirebaseにはNode.JSクライアントがあるため、サービスをFirebaseにインターフェースする簡単な方法になります。すべてのデータ転送は引き続きFirebaseを介して行われる可能性がありますが、Firebase内の指定された場所でクライアントの「検索リクエスト」を監視し、結果セットをFirebaseに書き戻すことで「応答」するNode.JSサービスを作成します。消費するクライアント。
  2. クライアントが自動的に更新するようにインデックスをFirebaseに保存します。本当に賢くしたい場合は、クライアントがデータを書き込むときに自動的にインデックスを作成するサーバーレススキームを実装してみてください...全文検索のインデックスはFirebaseに保存され、クライアントがコレクションに新しいアイテムを書き込むと、インデックスも適切に更新する必要があります。また、検索を行うために、クライアントはインデックスを直接使用して結果セットを作成します。これは、Firebaseに保存されている複雑なオブジェクトの1つのフィールドにインデックスを付けたいという単純なケースでは実際に非常に理にかなっていますが、全文検索の場合、これはおそらくかなり厄介です。 :-)
  3. サーバーコードを更新してインデックスをFirebaseに保存します。インデックスをFirebaseに保存し、クライアントが検索を行うために直接使用するハイブリッドアプローチを試すことができますが、クライアントにインデックスを更新させるのではなく、コレクションに新しいアイテムが追加されるたびにインデックスを更新するサーバーコードがあります。このようにして、サーバーがダウンしているときでも、クライアントはデータを検索できます。サーバーがインデックス作成に追いつくまで、古い結果が得られる可能性があります。

Firebaseがより高度なクエリを実行するまでは、小さなサーバーコードを実行する場合は、おそらく#1が最善の策です。 :-)

29

全文検索を行うGoogleの現在の方法は、 Algolia または BigQuery with Cloud Functions for Firebase のいずれかと同期しているようです。

これがFirebaseの Algolia全文検索統合の例 とその BigQuery統合の例 で、全文検索をサポートするように拡張できます。

1
cgenco