Firebaseでデータベーススタイルのクエリを実行する高速な方法はありますか?
例えば:
users
フィールド、、、、をuser_id
含むname
Firebaseリファレンスが与えられた場合、age
次のようなクエリを実行するための最良の方法は何でしょうか。
SELECT name FROM users WHERE `user_id`=147;
と
SELECT COUNT(*) FROM users WHERE age=21;
Firebaseでデータベーススタイルのクエリを実行する高速な方法はありますか?
例えば:
users
フィールド、、、、をuser_id
含むname
Firebaseリファレンスが与えられた場合、age
次のようなクエリを実行するための最良の方法は何でしょうか。
SELECT name FROM users WHERE `user_id`=147;
と
SELECT COUNT(*) FROM users WHERE age=21;
一般的に、いいえ。Firebase は本質的に「リアルタイム データベース」であり、データの変更に応じて常に更新をストリーミングするため、汎用クエリを実行するのはより困難です。今のところ、2 つの (確かに制限された) 照会プリミティブが提供されています。ドキュメントのクエリ/制限ページを参照してください。
多くの場合、さまざまな方法でこれらの制限を回避できます。
これは、従来のリレーショナル データベース システムが提供する柔軟なクエリと比較して弱点であることがわかっているため、時間をかけて改善する予定です。
もちろん、Lehenbauer 氏は Firebase のすべてのマスターですので、彼の話を聞いてください。;) ただし、この特定のトピックは、私が数週間にわたって取り組んできたトピックです。
「別のサーバーを実行する」および「クライアント側のクエリ」応答を強化するための私の考えのいくつかを次に示します。
エラスティックサーチ (node.js スクリプト)
サーバー上の node.js スクリプトを使用すると、ElasticSearch を統合して、1 時間以内にいくつかの堅実なコンテンツ検索を提供できます。これをさらに簡単にするブログ投稿と lib を次に示します。
キャッシュ可能/共通クエリ
これらは、テーブルを読み取り、データを複製するサーバー/cron プロセスによって処理できます。たとえば、登録時にユーザーのログイン名を「使用不可/使用可能」と表示したいが、複雑な理由で別の一意の ID でユーザー レコードを保存するとします。
私のcron/サーバーは、ユーザーテーブルからすべてのレコードを読み取り、それらをユーザーのレコードIDの値(または知りたい他のデータ)とともに、電子メールアドレスで保存されている別のテーブルに挿入できます。
この重複データのアプローチは、手動キャッシング手法の一種であり、No-SQL 環境では一般的な方法です。スピードと簡素化されたプロセスのために、ストレージスペース(安価で利用可能であると推定されます)を交換しています.
カスタマイズされたクエリ (キューを使用)
カスタム クエリは、XHR (ajax) を介してサーバーに直接送信できます。これにより、困難な作業が行われ、より良い結果が返される可能性があります。または、Firebase を利用して、キューを利用してサーバー バックエンドに接続することもできます。
クライアントは、クエリ リクエストを JSON として呼び出された特別な Firebase テーブルに配置しqueue
、レスポンスを待ちます。
サーバーはqueue.on('child_added', ...)
`queue_record.child('response', ...data here...) を使用してデータをリッスンし、返します。
これにはいくつかの優れた利点があります。1 つには、任意の数のサーバーがリッスンして応答を提供できるため、負荷分散が簡単になります。このためのコードはセットアップが非常に単純化されており、SOの別のスレッドで説明されています。
これが役に立てば幸いです!