Posted at

NoSQL(FirebaseRDB)を設計するための勉強ノート

More than 1 year has passed since last update.


設計について

今まで使っていたRDB(リレーショナル)と同じ感覚で設計するとコケたのでNoSQLについて調べることにしました。


そもそも NoSQL(Firebase Realtime DB) とは

Qiita: Firebase Realtime Databaseとはなんなのか?

要約すると


  • NoSQLとはリレーショナルDBと本質が異なる

  • RDB = デスクトップアプリケーション向け、NoSQL = モバイルアプリケーション向け(双方で使えないわけではない)

  • RDBは厳格な一貫性(ACID)を保つことに重点を置いている

  • RDBは古い昔にデザインされたデスクトップ向けの設計で、現代のモバイルアプリケーションに適していない

  • ACID = Atomicity:原子性、Consistency:一貫性、Isolation:独立性、Durability:永続性

  • NoSQLは可用性を重視している

  • モバイルの所以は途中でネットワークが切断されても対応できるところにある

  • ローカルDBとリモートDBを自動同期し続けるため、途中でオフラインになっても利用し続けられる(高可用性)

  • DB全体で一時的に一貫性のない状態が発生するが、一定時間後に修復する特性を持つ(結果整合性: Eventually Consistent)

  • CAP定理は場合によって CA 分断耐性+可用性 or AP 可用性+一貫性 の優先度(ECにおけるカートとチェックアウトなど)で切り替えていく

  • CAP定理 = Consistency:一貫性、Availability:可用性、Partition Tolerance:ネットワーク分断耐性

  • CAP定理と著名サービス

  • CAP定理の誤解

  • CAP定理を特にモバイルに最適化した結果、BASEとなる。

  • BASE = Basically Available:高可用性、Soft-State:緩やかな状態、Eventually Consistent:緩やかな一貫性

  • FirebaseRealtimeDB = NoSQL


  • 一級市民とは?第一級オブジェクト


モデリング


設計してみる

ポイント


  • キー名は転送速度に直結するため可読性を犠牲にしてキー名を短くするなどする (name -> nm など)


  • 非正規化 を意識する