Firebase Realtime Database入門 (1)
※今日は技術のお話です。
Firebase Realtime Database
Googleのプロダクトの一つです。 ざっくり言えばクエリ"も"できるKVSです。
特徴としては、以下があります。
- スマートフォンアプリ向け
- Java, Node.js, (Python)のネイティブなSDKがある
- REST APIがある
- KVS、あるいは簡易なRDBのような使い方ができる
- (Google Cloud Datastoreに比べて)安い
- Google Cloud Platformと連携できる
それぞれの特徴を簡単に紹介します。
スマートフォンアプリ向け
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に比べて安いので、永続データ向きです。
追記
1秒に1回以上更新できるストレージとしてGoogle Cloud Spannerが発表されています。
こちらもパフォーマンスが気になるところです。
Cloud Spanner | 大規模な自動シャーディングとトランザクションの整合性 | Google Cloud Platform