2017-11-15 12 views
1

「関連する」データを迅速にロードする最も良い方法は何ですか?私は、ユーザーのリストを持っている場合Firebaseのロード関連データiOS

一般的なセットアップは、すべてのuidノードの下に格納されているとのuidを格納followsのリストが含まれている、のようなもの:

にロードの最も効率的な方法は何

"users" : { "abc123" : { "email" : "[email protected]", "follows" : { "xyz789" : true } }, "xyz789" : { ... } }

1人のユーザーが従うすべてのユーザーのデータuidのそれぞれをobserveSingleEvent(of: .value)でループするのが最も良いですか?

これは私が作ってみたソリューションですが、やや面倒に感じている:

​​

私は本当に非正規化の道を行くと、トップレベルのユーザーで、各ユーザーのデータを保存する必要はありません。

答えて

1

リアルタイムデータベースを使用することを決定した場合は、ケースにuser-followsという別のルートノードを作成することをお勧めします。値trueに設定して、user-follows/$uid/$fidのパスにフォローを作成し、次に、user-follows/$uidに各スナップショットキー($fid)のobserveSingleEventを設定する必要があります。

それぞれを個別に監視する必要がないように、値をtrueに設定する代わりに、ユーザーに関する必要なデータをuser-follows/$uidに保存するだけで済みます。ただし、ユーザーはユーザー名などを変更する可能性がありますので、データを最新の状態に保つ必要があります。user-follows Firebase Cloud Functionsを利用して、ユーザが情報を変更したときにuser-followsを維持することができます。

それ以外の場合は、ネスティングが許可されているFirebase Firestoreをご覧ください。

1

あなたは/ユーザーにあなたのノードは常に少数のユーザーが含まれていることがわかっている場合は、/ユーザーパスでobserveSingleEvent(of:)と一度にすべてのユーザーを取得しようとすることができます。次に、../followsにあるユーザーでユーザーをフィルタリングします。 これにより、より多くのデータが取得される可能性がありますが、処理速度が遅く(不明)、処理するコードが少なくて済みます。

実際には、最初の実装は既にかなり効率的です。ちょうどobserveSingleEvent(of:)または条件count == uids.countが正しく実行されないことを確実に処理してください。

ところで、各ユーザーを../followsに保存すると、更新を維持するのが難しくなります。だからそれは避けてください。

関連する問題