Cloud FirestoreとFirebase Realtime Databaseの違い




概要

基本的には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'
});

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です