Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
670
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
1
1.8k
Google Analytics for Firebaseを 使うときに把握しておきたいこと / Keep in mind when using Google Analytics for Firebase
k2wanko
2
490
パスワードのない未来のための Firebaseで実装するFIDO2 / FIDO2 actualized by Firebase for the password-less future
k2wanko
5
2.3k
Firebase Auth& Performance Monitoring
k2wanko
0
350
What's New Firebase 2019 Q1 #FJUG #io19jp
k2wanko
5
2.6k
Firebase for Grow
k2wanko
5
940
gosecを試してみた話 / try gosec
k2wanko
1
3.1k
最近のFirebase / Recent Firebase
k2wanko
4
1.6k
Firebase Japan User Group Introduction 2018 #FJUG
k2wanko
0
590
Other Decks in Technology
See All in Technology
AIエージェントの継続的改善のためオブザーバビリティ
pharma_x_tech
6
1.4k
Amazon ECS & AWS Fargate 運用アーキテクチャ2025 / Amazon ECS and AWS Fargate Ops Architecture 2025
iselegant
13
4.2k
本当に使える?AutoUpgrade の新機能を実践検証してみた
oracle4engineer
PRO
1
120
LinkX_GitHubを基点にした_AI時代のプロジェクトマネジメント.pdf
iotcomjpadmin
0
160
25分で解説する「最小権限の原則」を実現するための AWS「ポリシー」大全
opelab
9
2.1k
成立するElixirの再束縛(再代入)可という選択
kubell_hr
0
780
Create a Rails8 responsive app with Gemini and RubyLLM
palladius
0
140
IIWレポートからみるID業界で話題のMCP
fujie
0
700
OAuth/OpenID Connectで実現するMCPのセキュアなアクセス管理
kuralab
5
810
(非公式) AWS Summit Japan と 海浜幕張 の歩き方 2025年版
coosuke
PRO
1
320
実践! AIエージェント導入記
1mono2prod
0
130
Uniadex__公開版_20250617-AIxIoTビジネス共創ラボ_ツナガルチカラ_.pdf
iotcomjpadmin
0
140
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
The World Runs on Bad Software
bkeepers
PRO
68
11k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Writing Fast Ruby
sferik
628
61k
Designing for Performance
lara
609
69k
GitHub's CSS Performance
jonrohan
1031
460k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
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!