$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
700
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
490
パスワードのない未来のための 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
Capture Checking / Separation Checking 入門
tanishiking
0
110
【ASW21-02】STAMP/CAST分析における生成AIの支援 ~羽田空港航空機衝突事故を題材として (Support of Generative AI in STAMP/CAST Analysis - A Case Study Based on the Haneda Airport Aircraft Accident -)
hianraku9498
2
550
生成AIシステムとAIエージェントに関する性能や安全性の評価
shibuiwilliam
2
300
Docker, Infraestructuras seguras y Hardening
josejuansanchez
0
140
type-challenges を全問解いたのでエッセンスと推し問題を紹介してみる
kworkdev
PRO
0
170
セキュリティAIエージェントの現在と未来 / PSS #2 Takumi Session
flatt_security
3
1.1k
履歴テーブル、今回はこう作りました 〜 Delegated Types編 〜 / How We Built Our History Table This Time — With Delegated Types
moznion
14
9k
タグ付きユニオン型を便利に使うテクニックとその注意点
uhyo
2
410
私も懇親会は苦手でした ~苦手だからこそ懇親会を楽しむ方法~ / 20251127 Masaki Okuda
shift_evolve
PRO
4
520
Databricksによるエージェント構築
taka_aki
1
110
How native lazy objects will change Doctrine and Symfony forever
beberlei
1
340
DGX SparkでローカルLLMをLangChainで動かした話
ruzia
1
230
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Code Reviewing Like a Champion
maltzj
527
40k
Rails Girls Zürich Keynote
gr2m
95
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Producing Creativity
orderedlist
PRO
348
40k
How to Ace a Technical Interview
jacobian
280
24k
Building Applications with DynamoDB
mza
96
6.8k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Invisible Side of Design
smashingmag
302
51k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
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!