Keep It MECE

あったこと、気になったこと、知っておきたいこと

Firebase Realtime Database入門 (1)

※今日は技術のお話です。

Firebase Realtime Database

Googleのプロダクトの一つです。 ざっくり言えばクエリ"も"できるKVSです。

firebase.google.com


特徴としては、以下があります。

それぞれの特徴を簡単に紹介します。

スマートフォンアプリ向け

iOS, Android, Unityなどに組み込めるSDKがあります。その為、クライアントサイドから直接データを参照、更新、あるいは購読することができるため、サーバサイドの実装が最小限で済みます。

もちろん、web(ブラウザ)経由でも利用ができます。

ネイティブなSDK

SDKを利用することで、例えば以下のような手順が簡単にできます。

  • 認証
  • データの参照、更新
  • データの購読
  • プッシュ通知の設定

スマートフォンアプリでは、プッシュ通知をFCM(Firebase Cloud Messaging)経由で利用できます。これはiOS, Android両方に対応しているので、APNS, GCM個別の設定が不要になります。

REST API

データ構造はJSONを模した作りになっていて、特定のJSONのキーを指定すると、データを取得できる、という形式になっています。

これらは、SDKを経由して取得することもできますし、簡単な利用だけであれば、REST APIで操作することも可能です。

また、Streaming APIといったものも用意されており、コネクションを張って購読する、といった使い方もできるようです。

KVSのような、RDBのようなストレージ

データ構造は、以下のようになっています。

project = {
  "products": {
    "lemon": {
      "color": "yellow",
      "price": 200,
      "note": "SOUR!!",
    },
    "apple": {
      "color": "red",
      "price": 150,
    }
  }
}

上記の様な場合、例えば以下のようにしてデータを取得できます。

db = RealtimeDatabase()

db.target(["product", "lemon", "price"]).get()  # 200
db.target(["product"]).query("price", ">", 190).get()  # {"lemon": {"price"..}}

とても直感的ですね!

安い

Realtime Databaseの課金体系は、保持データ量と、ダウンロードサイズに依存しています。
firebase.google.com

そのため、以下の様なことがいえます。

  • データをいくら登録、更新してもお金はかからない
  • 揮発性のデータであれば、保持データ量は少なくてすむ

無料枠もあって、1Gbyte, 10GB/monthであれば、無料です。
同時接続数は100という制限があるので、小規模なチャットアプリ向けになると思います。
ただし、同時接続を想定しないストレージのような使い方であれば、同時接続は気にする必要がありません。
データ保持の価格は高めなので、永続データはGoogle Cloud Datastoreに逃がすと良いです。

以下は、Google Cloud Datastoreの価格です。
料金と割り当て  |  Cloud Datastore のドキュメント  |  Google Cloud Platform
こちらも無料枠があります。
課金体系は、ストレージの書き込み、読み込み、削除、保持データ量です。
操作するたびにお金がかかるため、データベースの操作が多い場合は、注意が必要です。
ただし、保持データ量はRealtime Databaseに比べて安いので、永続データ向きです。

Google Cloud Platformと連携できる

何よりこれが一番のメリットでしょう。
同じGoogleのプロダクトなので、両者を同時に利用することができます。
Google Cloud Datastoreには1秒に1回の書き込み制限があるため、それ以上の更新がある場合は、Realtime Databaseの利用が想定できます。
また、特定のデータが更新された場合に通知を受けることもできます。

追記

1秒に1回以上更新できるストレージとしてGoogle Cloud Spannerが発表されています。
こちらもパフォーマンスが気になるところです。
Cloud Spanner | 大規模な自動シャーディングとトランザクションの整合性  |  Google Cloud Platform