概要
基本的にはCloud Firestoreを使うのがいいのかなと思います。Googleのドキュメントにもそうのように書かれていたので!
https://firebase.google.com/docs/database/rtdb-vs-firestore?hl=ja
Realtime Database
Realtime Database は Firebase の元のデータベースです。これは、リアルタイムでクライアント全体の状態を同期させる必要があるモバイルアプリ向けの効率的で低レイテンシのソリューションです。
Cloud Firestore
Cloud Firestore は、Firebase のモバイルアプリ開発用の新しい主力データベースです。直感的な新しいデータモデルで、Realtime Database の成果をさらに向上しています。Cloud Firestore は、Realtime Database よりも豊かで高速なクエリとスケールを備えています。
データモデル
Realtime Database
データを 1 つの大きな JSON ツリーとして保存します。
- シンプルなデータは非常に簡単に保存できます。
- 複雑で階層的なデータは、大規模に整理することは困難です。
Cloud Store
コレクションにまとめられたドキュメントにデータを保存します。
- シンプルなデータはドキュメントに保存するのが簡単です。これは JSON と非常によく似ています。
- 複雑で階層的なデータは、ドキュメント内のサブコレクションを使用することで、大規模に整理するのが簡単になります。
- 非正規化とデータの平坦化が少なくて済みます。
スケーラビリティ
Realtime Database
スケーリングにはシャーディングが必要です。
1 つのデータベースで、約 100,000 件の同時接続と、毎秒 1,000 回の書き込みまでスケールできます。それを超えるスケーリングでは、複数のデータベースにまたがるデータのシャーディングが必要になります。
Cloud Store
スケーリングは自動的に行われます。
(ベータ後に)完全に自動的にスケールされるため、複数のインスタンスにデータをシャーディングする必要はありません。
料金
Realtime Database
帯域幅とストレージにのみ課金されますが、課金レートは高くなります。
Cloud Store
主にデータベースで実行されているオペレーション(読み取り、書き込み、削除)に課金され、帯域幅とストレージの課金レートは低くなります。
実装
WEBでの実装比較を行います
必要なライブラリ
firebase-app.jsはどちらも必須で、それぞれfirebase-database.jsとfirebase-firestore.jsを使用します。
- Realtime Database
<script src="https://www.gstatic.com/firebasejs/5.0.1/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/5.0.1/firebase-database.js"></script>
- Cloud Firestore
<script src="https://www.gstatic.com/firebasejs/5.0.1/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/5.0.1/firebase-firestore.js"></script>
初期設定
初期設定はRealtime DatabaseでもCloud Firestoreでも同じでした。
var config = { apiKey: "<apiKey>", authDomain: "<projectId>.firebaseapp.com", databaseURL: "https://<projectId>.firebaseio.com", projectId: "<projectId>", storageBucket: "" messagingSenderId: "<messagingSenderId>" }; firebase.initializeApp(config);
リアルタイム読み込み
- Realtime Database
firebase.database().ref().child('messages').on('child_added', function(snapshot) {
console.log(new message is ${snapshot.val()}
);
});
- Cloud Firestore
firebase.firestore().collection('messages').onSnapshot(function(snapshot) { snapshot.docChanges.forEach(function(change) { if (change.type === 'added') { console.log(added doc ${change.doc}
); } if (change.type === 'removed') { console.log(removed doc ${change.doc}
); } }); });
書き込み
- Realtime Database
firebase.database().ref().child('messages').push({ name: 'test', body: 'hoge' });
- Cloud Firestore
firebase.firestore().collection('messages').add({ name: 'test', body: 'hoge' });
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す