🐈
RealtimeDatabase読み込み・書き込みメソッド
Firestoreでは、小さいデータを頻繁に読み書きする用途にコスト的に向いておらず、googleが推奨していない方のRealtimeDatabaseを使用することになったため、読み書きメソッドについて記録する。
共通知識
- Jsonツリーのデータベース構造になっている。
- 常に対象パスのサブツリーにもアクセス(R/W)する。
読み込み
onメソッド
- 第一引数にvalueを設定すると、データベースが追加される度に差分の読み込みを実行する。
- 更新が発生した場合は、オブジェクト全体の再取得が実行される。
- スナップショットにはキー名やバリュー等が格納される。
- データが無くなった場合はnullを返す。
childイベント(第一引数)
- child_added:子要素が追加に対してリッスンする。更新に対しては同期しない。
スナップショットには、新しい子を含むデータが渡される。 - child_changed:子要素の変更に対してリッスンする。
子ノードの子孫に対する変更もリッスン対象となる。
スナップショットには、更新された子を含むデータが渡される。 - child_removed:子要素の削除に対してリッスンする。
直接の子のみがリッスン対象となる。
スナップショットには、更新された子を含むデータが渡される。 - child_moved:項目順変更に対して同期を行う。
原因となった child_changed イベントに後続する。
参考
本記事は本家のYOUTUBEチャンネルを参考に作成しています。
YouTubeのvideoIDが不正です
getメソッド
- 一度だけ読み込みを行う。
- 変更イベントの監視なし
- データベースサーバーからデータを取得する。
- なんらかの理由で値を返せない場合は、クライアントがローカルキャッシュを調べ、それでも値が見つからなければエラーを返す。
- 必要以上に使用すると、帯域幅の使用が増加し、パフォーマンスの低下する場合があるが、リアルタイム リスナーを使用することで回避することが可能。
onceメソッド
- 一度だけ読み込みを行う。
- 変更イベントのイベント監視あり
- 更新された値の確認は行わない。
- ローカルキャッシュからデータを取得できる。
- 頻繁な変更やアクティブなリッスンを行うことは想定していないデータ読み込みに対して有効。
書き込み
共通事項
- 共通の内容として、nullを指定すると削除することができる。
- 第二引数にerrorが格納され、成功・失敗を判定することができる。
setメソッド
- 特定の参照に保存できる。
- 指定パスにある既存のデータが置換される。
- 子ノードも置換されるため、階層化されたパスの場合は指定パス以下全てデータを書き込むデータを与える必要がある。つまり誤ってルートパスのみに書き込んだらツリーの内容が全て消える。
pushメソッド
- リストへのデータ追加用メソッド。
- push() によって生成されアイテムは自動的に時系列で並べ替えられる。
- 追加した要素の子ノードに一意の ID が生成される。
- 第二引数にerrorを返す。
updataメソッド
- 指定パスを更新できる。
- 置換ではないため、親要素をupdateしても子ノードは消えない。
- 原子性が保証され、すべての更新が成功するか、すべての更新が失敗するかのどちらかとなる。
transactionメソッド
- 同時変更によって破損する可能性があるデータを操作する場合に使用する。
- 書き込みはupdateが実行される。
削除
removeメソッド
- 特記事項なし
- 書き込みメソッドでも代替できる。
参考
FireBase本家
Discussion