問題タブ [firebase-realtime-database]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - firebase でのデータの構造化
最近、Firebase を使い始めました。ただし、NoSQL データベースに詳しくないため、構造化に少し苦労しています。
私はタイムシート アプリケーションを開発しています。複数のユーザーが毎日出勤時間と終了時間を入力でき、データベースに保存されます。
現時点で、私のfirebaseの構造は次のようになっています:
ただし、アプリケーションでこのデータにアクセスするのに問題があります。その上、これは正しく感じられません。最初に、ユーザーが何かを入力するたびに「タイムシート」の下に新しいエントリを追加したかったのですが、明らかに、ユーザーが 1 日に 2 つのエントリを追加できるようにしたくありません。
ユーザーがこれを行うのを止めるにはおそらく複雑な方法があることは知っていますが、このデータベースをどのように構築するのが最善かがわかれば、これはすべて簡単な方法で解決できると思います.
後で、特定のユーザーの現在の月のすべての日をループして、その月の各日の開始/終了時間を表に表示したいと考えています。
更新: データベースを非正規化することを考えていましたが、それは本当に役に立ちますか?
angularjs - Angularfire - Firebaseクエリ/ドキュメント内の最初のxアイテムを同期
私はfirebaseを使い始めたばかりです。ID でインデックス付けされた 6 つのレコードを含むドキュメントがあります。リストの最初の 3 つのアイテムを照会して同期したいと思います。
これにより、リストの最後の 3 つの項目が提供されます。私が欲しかったものではありません。
最初の3つのアイテムを取得するには、これでうまくいくと思ったのですが、壊れてしまいました...
私のデータ構造:
HTML ビュー:
firebase - firebase データベースのスキーマの設計に行き詰まった
私は SQL のバックグラウンドを持っているので、NoSQL ファイアベース スキーマの設計に問題がありました。私は「WHERE」句を使用して何かを照会できることに慣れていますが、firebase でこれを行うのはより難しいようです (ただし、パフォーマンスは簡単に補います!)。
曲の「トラック」オブジェクトを保存しています。これらのオブジェクトには、次のように、artist_name、トラック タイトル、ジャンル、評価、created_date などのキーと値のペアがあります。
私のサイトのデフォルトの動作は、これらすべてのトラックを一覧表示することで、最新の追加トラックがリストの一番上に表示されます。$priority を作成するように設定し、それを負 (created * -1) にすると、この効果が得られると思います。
しかし、将来的には、次のような他の方法でリストをフィルタリング/クエリできるようにしたいと考えています。
ロック、ポップ、またはヒップホップのジャンルを持つすべてのトラックを取得します。
レーティングが 80 以上で、過去 7 日間に追加されたすべてのトラックを取得します。
firebaseでこれを達成するにはどうすればよいですか? 私の理解では、データを注文する方法は実際には 2 つしかありません。
私の場合、トラックを追加すると自動的に選択された「firebaseURL.firebaseio.com/tracks/id」の物理的な場所を持つ「ID」値を介して。詳細をリストする個々のトラック ページのページがあり、私のサイトの URL は "www.mysite.com/tracks/-JPl1zwOzjqoM8xDTFll" のようなものなので、これで問題ありません (と思います)。
$priority を使用することで、私の場合は "created" 値に使用して、リストを適切な日付順に並べることができます。
私が物事を設定している方法を考えると (そして、より良い方法があれば教えてください)、特定のジャンルや特定の評価を簡単に照会できる方法はありますか?
「Denormalizing your Data is Normal」( https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html ) というブログを読みましたが、理解できたと思います。Anant の説明から、私が望むものを達成する 1 つの方法は、次のように、firebase でジャンルの新しいオブジェクトを作成し、そこにすべてのトラックをリストすることです。
ブログの前提は、ハード ドライブの容量は安いということでしたが、ユーザーの時間はそうではありません。したがって、より高速な読み取りが可能になるため、重複データがあっても問題ありません。
それは理にかなっており、私はこの方法を気にしません。ただし、これは、ユーザーが 1 つのジャンルのみからすべてのトラックを選択したい場合にのみ機能します。ロックとポップの両方からすべてのトラックを取得したい場合はどうすればよいでしょうか? Rock&Pop という別のオブジェクトを保存し、誰かがいずれかのジャンルの曲を提出するたびにそこにトラックを保存する必要がありますか?
また、trackid を使用して ENTIRE トラック オブジェクトまたは単なる参照を保存する方が理にかなっていますか? たとえば、/genre/pop の下:
2 つの方法にパフォーマンスの違いはありますか? 他の詳細について個々のトラックごとにクエリを実行する必要がないため、後者の方が高速になるのではないかと考えていますが、確認したいだけです。
私は自分のfirebaseスキーマをすでに数回やり直しました。いくつかの改善を行いましたが、アプリケーションが大きくなるにつれて、変更にかかるコストと時間が増えています。コードの残りの部分をもう一度一致させるために多くの時間を費やす前に、これらの質問を最後に解決できればいいのですが..
これについて何か助けてくれてありがとう、それは非常に感謝しています。また、追加情報が必要な場合はお知らせください。
ios - Firebase の永続性、Firebase キャッシュのクリア
私のアプリは Firebase を使用してデータを同期および復元します。このメソッドを使用して、setValue:withCompletionBlock:
Firebase オブジェクトを挿入、更新、および削除します。このメソッドは、CoreData の保存があるたびに呼び出されるため、すべてのローカル変更が Firebase に同期されます
同期するとすべてのローカル データが Firebase にアップロードされ、復元するとローカル データが Firebase データに置き換えられます。
を観察FEventTypeValue
して使用FDataSnapshot
し、Firebase からデータを取得してローカル データを復元します。
persistence
そのため、Firebaseに設定するまで、すべてが完璧に機能します。
がオンの場合persistence
、更新すると、オブジェクトを Firebase に挿入してから復元すると、挿入前のデータが復元されます。つまり、新しく挿入されたオブジェクトは復元されません。ただし、再度復元すると、挿入されたオブジェクトが復元されます。オブジェクトが削除された場合も同じことが起こります。削除されたオブジェクトは、最初に復元すると再び表示され、再度復元すると消えます。Firebase データ ビューで、Firebase オブジェクトが正しく挿入または削除されていることがわかります。
ここで何が間違っているのかわかりません。復元するときだけ問題があります。Firebase キャッシュがこの復元の問題を引き起こしていると思います。復元する前に、Firebase キャッシュをクリアすることを考えています。私の質問は
- 復元前にキャッシュをクリアすることは良い方法ですか?
- はいの場合、Firebase キャッシュをクリアする方法は?
- いいえの場合、データを復元するための最良の方法を教えていただけますか。
firebase - レコードの部分文字列/部分文字列であるユーザー入力検索語のfirebaseデータを構造化する方法は?
既存の (そして有用な) firebase データ構造参照を含めて、これを前置きします。
https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html
しかし、私が探しているのは、MySQL の WHERE LIKE と同義の何か、つまり、特定の部分文字列を含むレコードを返す機能です。
具体的には、アプリのすべての(パブリック)ユーザーを(ユーザー名/名前/メール/電話/これらすべてで)検索する方法をユーザーに提供したいと考えています。
すべてのユーザーをダウンロードしてから角度フィルター/クライアント側の代替フィルタリングを使用したくない. )
たとえば、ツリー構造の使用を検討しました。
次に、ユーザーが「a」を入力したときにusers/username/aを参照し、「an」の場合はusers/username/a/anなどを参照し、検索語に基づいてユーザーのサブセットのみを効果的に参照できます。
データを非正規化して構造をフラットに保つというアドバイスとともに、NoSQL の性質を考慮すると、この構造は理にかなっていますか?
または、LIKE esqueクエリを実行するための代替/より良い方法はありますか?
algorithm - Firebase: ゲームで対戦相手を一致させる方法は?
ソーシャルチェスゲームを実装しています。すべてのユーザーは新しいゲームを作成でき、システムが対戦相手を見つけるまで待ちます。
ユーザーがゲームを作成するとき、彼らは制約を指定します: プレイしたい色と対戦相手の最小チェス レーティングです。
対戦相手は一致する場合と一致しない場合があります。たとえば、次の 2 つの対戦相手が一致します。
そのため、ユーザー 1 がシステム内の最初のユーザーであり、ゲームを作成した場合、ユーザーは待機します。ユーザー 2 がゲームを作成すると、すぐにユーザー 1 と一致するはずです。
一方、次の 2 人の対戦相手はどちらも白でプレイしたいので、一致しません。この場合、他の誰かがcolor: 'black'
(または色が指定されていない) ゲームを作成するまで待つ必要があり、minRating
それは要件に一致します。
私の懸念は、何千人ものユーザーが同時に新しいゲームを作成するシナリオに関連しています。デッドロックを作成せずに対戦相手を一致させるにはどうすればよいですか? つまり、ユーザー 1、ユーザー 2、およびユーザー 3 が同時に対戦相手を見つけようとしていて、それらのマッチング アルゴリズムがユーザー 99 を返すシナリオをどのように回避するのですか。ユーザー 99 をいずれか 1 つだけに割り当てて、このシナリオから回復するにはどうすればよいですか。彼ら?
このようなマッチング システムを実装するために、Firebase の機能をどのように使用しますか?
firebase - firebaseで「NOT IN」を実装するには?
車などのオブジェクトのデータセットがあります。ユーザーに物を見せて、車が好きかどうかを判断できるシステムを作りたいです。しかし、私は彼らに各車を一度だけ見せたい.
user1 などのユーザーが与えられた場合、allCars から、そのユーザーが既に見た車を除外するにはどうすればよいでしょうか? SQLでは、「 WHERE carId NOT IN (car123, car234, car321) 」のようなことをします
firebaseでこれを行う方法はありますか(クライアント側でフィルタリングせずに、その方法を知っています)...? ある種のインデックスを使用して、可能な構造。私はしばらく苦労しましたが、解決策が見つかりませんでした。
angularjs - Firebase でユーザー プロパティの重複を防ぐにはどうすればよいですか?
FirebaseSimpleLogin
ユーザーの作成と認証の処理に使用しています。
メソッドを介して単純なログインで新しいユーザーを作成しようとすると$createUser()
、メールアドレスが既に使用されている場合、firebase はユーザーを作成しません。ただし、$set()
作成したユーザーを作成した後、作成したユーザーをfirebaseに保存するためにも使用してuser.uid
おり、キーとして使用しています。データベースに書き込もうとすると、単純なログインにはメールとパスワードのみが必要なため、ユーザー名が一意でなくても、firebase はレコードを保存します。では、ユーザー オブジェクトのキーとして使用されていないユーザー名が一意であることを検証するにはどうすればよいでしょうか。
次のような新しいユーザーを作成しています。
そして、私のユーザーオブジェクトは次のようになります:
各ユーザーのキーとして uid を使用する必要がありますが、ユーザー名は一意である必要があります。
あるオブジェクト内のプロパティが別のオブジェクト内のプロパティに固有でない場合、firebase がレコードを保存しないようにするにはどうすればよいですか?