uwu

プログラミングの備忘録を書いています。誰かの為になれば幸いです

Firestore Cloud firestoreの公式動画まとめ7

前回の記事の続きです。
今回はページネーションについてのお話になります!



www.youtube.com
※この記事で使われている全ての画像はこの動画の切り抜きになります



後に続く動画、



・8:トランザクションについて
・9:オフラインサポートについて
・10:リアルタイムについて



は自分が今作りたいアプリで必要ないものだと思うので
9~10の動画のまとめは一旦飛ばしたいと思います😥😥
また機会があればまとめていきます!!



では、ページネーションについてみていきましょう!


ページネーションとは?


データベースの結果を複数の小さな塊に分割して、
一度に全て取得しないようにする方法のことです。



例えば、DBの中に5万件の日本食レストランのドキュメントがあるとします。
ユーザーが世界中の日本食レストランを見たいと思っても、
5万件全てのレストランのドキュメントを画面に表示することはあまりないですよね。
一度に表示する分だけの情報をクライエントに送れば十分です。



ページネーションのやり方

limit()



limit(to:)を使うと、to:の後に指定した件数のみ取得することでできます。



使用例↓






start()



limit()は件数を指定して情報を取得する関数でしたが、
start()を使用すると、その後20件の情報を取得する、ということができます。



使用例↓





start(after: ["Tokyo", "Tempura" , 4.9])



afterパラメータに正しい順番で配列を渡すことで
Firestoreは次の20件のドキュメントを取得してきます。





この方法だとクエリを追跡しなければいけないのが大変なのと、
もし評価4.9レストランがたくさんある場合いくつかのレストランの取得を
スキップしてしまうかもしれません。



この対策として、Firestoreではafterパラメータにドキュメントを渡すことができます。






Firestoreはそのドキュメントを分析し、
どのような値を検索すべきかを正確に把握します。
もし、重複したドキュメントを見つけた場合は重複した
ドキュメントの次のドキュメントからデータを取得します。


ただしこれらのページネーションをする時は、
データが挿入、更新、削除されたりしていつも動いていることを意識しなければいけません。


start()を使わずに、ボタンクリックなどをトリガーに
limitの数を増やしてページネーションしていく方法もあります。





この方法はシンプルで、データが動いていることを意識する必要はありません。
ただし、この方法では前の20件や40件のデータも読み込むことになるのでその分料金が発生します。


offset()


ドキュメントの40行目から60行目を取得したい場合、
offset()のようなメソッドが使えるが、この場合60回分ドキュメント読み取りが発生するため
こちらのメソッドは推奨しないそうです。




ページネーションの仕方を決めるのはどれくらいリアルタイム性が必要かで決めるのがいいです。



冒頭でも説明した通り、次は動画11へ続きます。(いつか😥)