Slide 1

Slide 1 text

Firestore導入前に 検討したかったベスト5

Slide 2

Slide 2 text

自己紹介 • さとう たくと(ぽち) • 営業→エンジニア→人事→いま!! • 髪をきりました... @pitown https://twitter.com/pitown

Slide 3

Slide 3 text

自己紹介 今はHotspringで2人目のエンジ ニアとしてやってます。 年始からエンジニアを募集したら 副業6人増えました! 興味ある方は! 仕事は、「ズボラ旅」というサービ スをつくっています。

Slide 4

Slide 4 text

自己紹介 ーズボラ旅ー LINEで旅行の相談ができるサー ビスです。 おすすめの提案をもらって、 そのまま予約まで。 ズボラな人程キモチいいです よかったら使ってね!

Slide 5

Slide 5 text

自己紹介 ーズボラ旅ー LINEで旅行の相談ができるサー ビスです。 おすすめの提案をもらって、 そのまま予約まで。 ズボラな人程キモチいいです よかったら使ってね! 使っていただいた方、 ありがとうございます

Slide 6

Slide 6 text

自己紹介 そんなことより、みんなスマブラがアツいので、ただふつうにあそ びにきてください ぼくのガノンドロフが火を吹きます ここにがのんどろふの絵を描きたい なぁ

Slide 7

Slide 7 text

ちなみに (会場に本番投入している人きいたら1割 いなかったくらい?)

Slide 8

Slide 8 text

では本題

Slide 9

Slide 9 text

Firestore導入前に検討したかった ベスト5を見ていきましょう

Slide 10

Slide 10 text

注意 ここで紹介するのはあくまでも、 「チャット部分だけ」とか 「ツールで」とか そういう話ではなく、 FirestoreをメインDBとしてFirestore中心 に本番プロダクトを開発した時の話になりま す。(しかも当方web) 部分導入やツールとかは、使ったら?としか 言いようがないです!使おう!

Slide 11

Slide 11 text

第5位

Slide 12

Slide 12 text

どのくらい金かかるんよ?

Slide 13

Slide 13 text

どのくらい金かかるんよ? • 面倒なので晒す 規模感(とある時) ・collection数: 12 ・全document数: 415,354 ・最多document: 297,879 実績(とある単月) • read 132,066,418回 ¥8,666 • write 181,163回 ¥18 • storage 2.218GB ¥24 • egress 65.876GB ¥751

Slide 14

Slide 14 text

第4位

Slide 15

Slide 15 text

うちに合うかなぁ?

Slide 16

Slide 16 text

①プロダクトに合うか • スキーマレスは、仕様変更したり、手で変更したり、ラベル付け したり、そういうものにめちゃくちゃ強い。ので、DB構造さえも ちょこちょこ変わりうるスピード感のプロダクトだとすごく強力よ ね • リレーション死ぬほど大事なプロダクトはさすがにミスマッチ。 でも、死ぬほどか?っていうと、死ぬほどなプロダクト、少数派 だとおもうんよ • データ構造のReadとWriteが同じ型が多いと楽ができるよ • 逆にそうならないときに、何かしらの一工夫が必要(同じ データを二箇所に持たせるなどの)。うちはCQRS風味にし ています

Slide 17

Slide 17 text

• 過度なRDB信仰だと枷になりうる • RDBならできるのに、、という形で、RDBに寄せに行ったら ただの劣化版RDBになるから負け • 活かすために、思い切りの良い設計と発想が必要 • ゼロベースで考えてやってみる人が必要 • 結局、アーキテクチャ全体に、分散型でスキーマレスで、と いう特性を与える。nullableだし、連番もNGだし。SQLも弱 い。そういうことをちゃんと理解してアプリケーションをつくら ないといけない • ただ、最後は要はノリなんじゃないか...?とおもっている ②チームに合うか

Slide 18

Slide 18 text

第3位

Slide 19

Slide 19 text

アーキテクチャを晒してくれ

Slide 20

Slide 20 text

User Staff ①最初期

Slide 21

Slide 21 text

User Staff ②いま Firestoreをトリ ガーに、 Firestoreに書き 込む

Slide 22

Slide 22 text

後日、アーキテクチャの説明は、こちらのQiitaに まとめました! https://qiita.com/pochi-sato/items/04f38bb ed89e84184b52

Slide 23

Slide 23 text

第2位

Slide 24

Slide 24 text

起きたバグややらかしを全部晒 してくれ

Slide 25

Slide 25 text

• UTF-8とUTF-16に関するバグを踏みました。Readはおろか、 アクセスしようとすると何も返ってこないし管理画面も開けな かった(サポートに言ったら修正されてマージ済) • 緊急対応でデータつくったらデータ形式を間違って画面が真っ 白になった← • ローカルで全文検索してたら、すぐに使い物にならなくなってた だのボックスになった(Let’s Algolia)← • 1分くらい、「おや、、?書き込めてない、、?」ということが何度 かあった(年明けてからあんまり記憶ない) • まるっとexportしようとすると、データ上限にひっかかったり • サーバサイドでリアルタイムアップデート張りっぱなしにしてた ら、たまにコネクション切れた← • サーバサイドでリアルタイムアップデートしてたらスパイクした ときに死んだ←

Slide 26

Slide 26 text

バグ、やらかしに関しては、 ほとんどが、自分で特性を理解して 適切に対処すれば防げるもの ばかりでした、今の所。 (UTF-8以外は)

Slide 27

Slide 27 text

第1位

Slide 28

Slide 28 text

ねぇ、そこのFirestoreをアプリ ケーションのメインDBとして本 番で運用しているあなた! ぶっちゃけ、オススメな の!!?? どうなの!!!!??

Slide 29

Slide 29 text

実際、 • リリース5分で4000人がなだれこんでくるようなサービスでも、 フロント/バックエンド/インフラ、まるまる含めて1人で1ヶ月で実 装が完了できた! • その後も、リアルタイムアップデートとか駆使しつつ、フロントも バックエンドも一切キャッシュ機能をつくらずにスケールできた • クライアントジョイン問題でめちゃくちゃパフォーマンス劣化しつ つも、データ構造を素直にしてあげると爆速を取り戻し、未だフ ロントでキャッシュ化の必要ない! • 構造の柔軟さに、緊急対応で死ぬほど助けられた...

Slide 30

Slide 30 text

デメリットは、スキーマレスで分散型でクエリが弱いDBに対し ての向き合い方。 決してそれはデメリットというよりも、特性の話というのが僕の 見解です。 それに対して、メリットがめちゃくちゃ強力なんです。 とにかく強力。 強力ゆえに序盤はパワープレイもかなり可能... (だけどスケールするとちゃんとした設計をあとで求められま す) 少人数で、立ち上がり速度が早く、しかも仕様変更が多いとき なんかは特にありがたみを感じられるとおもいます!

Slide 31

Slide 31 text

つまり

Slide 32

Slide 32 text

オススメです!! (でも、ハマりどころを情報交換しよう!)

Slide 33

Slide 33 text

おわり 情報交換しましょう! Firestoreこれからやるひと、 やってるひと、 話しましょう! @pitown https://twitter.com/pitown