$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
What's Firebase Realtime Database?
Search
k2wanko
August 28, 2017
Technology
0
710
What's Firebase Realtime Database?
https://gcpug-tokyo.connpass.com/event/61973/
k2wanko
August 28, 2017
Tweet
Share
More Decks by k2wanko
See All by k2wanko
Sales AI Cloud "ailead" TSConfig Strictly Adopted / セールスAIクラウド「ailead」の TSConfig厳格化対応した話 /
k2wanko
4
1.9k
Google Analytics for Firebaseを 使うときに把握しておきたいこと / Keep in mind when using Google Analytics for Firebase
k2wanko
2
500
パスワードのない未来のための Firebaseで実装するFIDO2 / FIDO2 actualized by Firebase for the password-less future
k2wanko
5
2.4k
Firebase Auth& Performance Monitoring
k2wanko
0
350
What's New Firebase 2019 Q1 #FJUG #io19jp
k2wanko
5
2.6k
Firebase for Grow
k2wanko
5
970
gosecを試してみた話 / try gosec
k2wanko
0
3.4k
最近のFirebase / Recent Firebase
k2wanko
4
1.6k
Firebase Japan User Group Introduction 2018 #FJUG
k2wanko
0
610
Other Decks in Technology
See All in Technology
AWS re:Invent 2025~初参加の成果と学び~
kubomasataka
0
150
特別捜査官等研修会
nomizone
0
170
多様なデジタルアイデンティティを攻撃からどうやって守るのか / 20251212
ayokura
0
500
Fashion×AI「似合う」を届けるためのWEARのAI戦略
zozotech
PRO
2
990
大企業でもできる!ボトムアップで拡大させるプラットフォームの作り方
findy_eventslides
1
860
NIKKEI Tech Talk #41: セキュア・バイ・デザインからクラウド管理を考える
sekido
PRO
0
170
Strands AgentsとNova 2 SonicでS2Sを実践してみた
yama3133
1
980
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
260
ActiveJobUpdates
igaiga
1
240
GitHub Copilotを使いこなす 実例に学ぶAIコーディング活用術
74th
3
3.6k
Power of Kiro : あなたの㌔はパワステ搭載ですか?
r3_yamauchi
PRO
0
200
初めてのDatabricks AI/BI Genie
taka_aki
0
240
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
From π to Pie charts
rasagy
0
86
Scaling GitHub
holman
464
140k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
0
200
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Building the Perfect Custom Keyboard
takai
1
660
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.8k
Practical Orchestrator
shlominoach
190
11k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Transcript
Firebase Realtime Databaseとは? GCPUG Firebase Realtime Database /meetup/1 @k2wanko
コキチーズ @k2wanko GCPUGのスタッフ L社セキュリティエンジニア Go言語とGCP好き JavaScriptも少し書ける Firebase エンジョイ勢 Splatoonエンジョイ勢(S+) SW-4038-0559-8402
Realtime Databaseとは?
RDBではないデータベース
Realtime Database リアルタイムにデータを同期してくれる フルマネージドのNoSQLデータベース SDKを利用してクライアントから直接データの 読み書きが可能 オフラインでも読み書き可能 オンラインになった時データが同期される 一つのJSONオブジェクトの様な形式 アクセス制御はセキュリティルールという仕組
みがある
100,000 有料プランでの同時接続数
どういう用途に向いているか
用途 • チャット • 共同編集できるメモ • ターン制のようなゲーム (ボードゲームなど) • タスクキュー
向いていないもの • 容量の多いドキュメントの保存 • FPSなどの大量のデータが流れる ゲームなど
対応プラットフォーム Android iOSはもちろん、 Webブラウザでも使えるし オフライン対応もしている またUnityやC++(Cocos2dx用?) サポートもある ドキュメントにはないが arduinoもライブラリ(公式)が存在する firebase/firebase-arduino
もし対応しているプラットフォームが なくてもREST APIがあるのでHTTPで 操作できるしイベントをストリームで 受け取れる
データの構造化
データの構造化 Realtime Databaseでは 1つのJSONオブジェクトのような形で 保存される。 深さは32レベルまで Realtime DatabaseへのQueryは トップの要素がヒットするとその下に 連なる全てのオブジェクトを取得する
そのためネストを深くすると パフォーマンスが悪化する。 フラットな構造を心がけよう!
Threadと Messageの例 /threads/thread_id/messages/-K0/text ではなく /threads/thread_id /messages/thread_id/message_id/text のようにフラットにする。 そうしないと Threadの情報を取るためだけに 全てのメッセージを取得してしまう
データの保護とセキュリティ
セキュリティルール セキュリティルールは JSONで記述する。 read,writeオペレーションはマッチした ルールのみ実行される。 記述方法 コンソールの https://console.firebase.google.com/u/0 /project/{projectId}/database/rules で書くか
firebase-toolsを使ってローカルで 書いてデプロイする方法がある 後者のがバージョン管理できるので オススメ
.read .write .readと.writeは名前の通り 読み取る権限と 書き込む権限を制御する 図の例だと/users/{$uid}/に対して 認証したユーザーと同じ uidの場合 書き込めるというルールになる。 fooというuidのユーザがいたら
/users/fooへは書き込めるが /users/barには書き込めない またこのルールは上位の設定が優先さ れるので /users/foo/bar や /users/foo/hoge/hoge などには自由に書 き込める
.validate .validateは値が適切なフォーマットかどう かを制御する。 例では/fooへの書き込む値が 文字列であり100文字以内であるかを検 証する。 newDataはこれから書き込まれる値のス ナップショットで.val()は実際の値
$ variables $付きのものは変数としてデータの 検証に利用できる。 例では/users/fooへの書き込み時に $uidにfooが代入され auth.uidと一致するか検証できる authは認証情報が詰まってる 詳しくはドキュメントへ https://firebase.google.com/docs/refere
nce/security/database/#auth
$other $otherは特殊な命令で 定義したpathにマッチしなかった 場合にマッチする。 なので例では/foo以外にマッチしなかっ た場合にマッチするので /foo以外には書 き込めない 用途としてはユーザーに好きな プロパティを生やして書き込まれないよう
にするなどに利用する。
ところでJSONで書くの 辛くないですか?
Firebase Blaze
Firebase Blaze セキュリティルールを YAMLで書いて コンパイルすると セキュリティルールの JSONになる コンパイラ https://github.com/firebase/blaze_comp iler
関数などを定義できる (使ったことはない)
Firebase Bolt
Firebase Bolt セキュリティルールを書くための言語 コンパイルすると セキュリティルールの JSONになる 型を定義できるし 関数が使えるしコメントも書ける https://github.com/firebase/bolt VSCodeにPluginがある
Firebase Bolt はいいぞ!
Cloud Functions
Cloud Functions 様々なイベントをトリガーに実行する Node.jsのホスティングサービス RealtimeDatabaseでは書き込みを 元に実行できる 今まではonWriteで新規作成も アップデートも削除も 同じように呼ばれてたが onCreate
onUpdate onDelete が追加されて無駄に Functionsを 実行しないようできるようになった https://firebase.googleblog.com/2017/0 7/cloud-functions-realtime-database.ht ml
Functionsの注意点 /fooへの書き込みをトリガーにしていて /foo自身のvalueをFunctionsで 書き換えるとまたイベントが発生する なので繰り返し書き込んで 無限ループにならないようにする 必要がある またフリープランでは Googleのネットワーク外への リクエストはできない
料金 (2017/8/28)
Spark(フリー) - 同時接続 100 - 1GBのストレージ - 月10GBのダウンロード
Flame 月$25 (定額) - 同時接続 100K - 2.5GBのストレージ - 月20GBのダウンロード
Blaze(従量課金) - 同時接続 100K - 月5GB/$5 のストレージ - 月5GB/$5 のダウンロード
- Sparkと同じだけの無料枠あり
超高い
個人的な思い Realtime Databaseにデータを 保存するのは向いていないので Queueとして使い 実際のデータはDatastoreへ保存する Realtime DatabaseのKeyと遂になるよう にするのがよいかも
Cloud Datastore • スケーラビリティの優れたNoSQL • メンテナンスで落ちるとかない • 書き込みも読み込みもストレージも安い ◦ ストレージ
月1GB/$0.18 ◦ Realtime Databaseと比べると5分の1 ◦ 1GBの無料枠あり • Cloud Functionsからも読み書き可能
Tips
ドキュメントの見方 • 公式ドキュメントのURL https://firebase.google.com/docs/database/ • 英語版を読む場合は下の方にある言語設定を 英語にするか • URLのQueryにhl=enと付ける。 https://firebase.google.com/docs/database/?hl=en
• 最新の情報は英語にしかない
障害について RealtimeDatabaseは よくインシデントが発生している (GCPUG/#incidents_jaで確認できる) NSSはデータベースのサーバ名 curl https://<project-id>.firebaseio.com/.set tings/owner.json で確認できる
わからないことは? GCPUGのSlackの #firebase_ja で 聞こう! コキチーズは 日本語版スタックオーバフローも サブスクリプションしてます (リアルタイムではない)
Enjoy Realtime Database!