28

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

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

建築思想?

4

2 に答える 2

29

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

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

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

于 2012-05-11T23:16:03.477 に答える
2

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

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

于 2017-07-28T23:40:18.467 に答える