2012-05-11 19 views
26

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

私はクエリを実行し、Firebaseオブジェクトハンドルを返す追加のサービスが必要になると想定します。私は固定された場所でそのようなサービスをスピンアップできますが、その可用性広告のスケーラビリティについて心配する必要があります。私はこのアプリのためにあまりにも多くのトラフィックを期待していませんが、それは2万人の同時ユーザーでピークになることができます。

建築思考?

答えて

27

長期的には、Firebaseはより高度なクエリ処理機能を備えているので、何か特別な処理をしなくてもこの種の機能を直接サポートできます。それまでは、いくつかの選択肢があります:

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

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

+1

あなたのデータが静的であるというあなたのコメントをただ読んでください。その場合、オプション2は不要であり、オプション3は容易になる。フルテキスト検索インデックスを作成してFirebaseに格納し、クライアントがそれを直接照会するようにする必要がありますが、完全に実行可能でなければなりません。 –

+0

私は何かが明らかでないことを確認してくれてありがとう。私は#1がおそらく正しい方法だと思います - JavaScriptでフルテキストインデックスを再実装することは、私の時間をよく使うようには思えません:-) –

+0

http://lunrjs.com/完全なJSベースのフルテキストインデックス作成ソリューションです。 – Nemo

関連する問題