CloudFirestoreと仲良くなるために調べたこと
Firebaseを使ってアプリを作る上で、CloudFirestoreと仲良くなるべくNo SQLの調べてみた。その一環でNoSQLデータモデリング技法とRDB技術者のためのNoSQLガイドを読んだので備忘録を残しておく。
それぞれを簡単に紹介すると
NoSQLデータモデリング技法 · GitHub NoSQLのデータモデリングテクニックを解説している
RDB技術者のためのNoSQLガイド NoSQLデータベースの特性を解説している
それぞれが補間する形で知識の穴を埋められたように思う。
CloudFirestoreはどんなDB?
アプリ開発で採用される機会も増えてきたと思うが、特徴は以下に記載したものになる。
- ドキュメント指向のDB。(Mongo DBやCouchbaseに近い)
- Firebaseのクラウド機能のためスケーラブル
- リアルタイム更新やオフラインサポートなど機能が豊富
- Web / Sever / Mobileなどカバー範囲が広い
Flutterと組み合わせると、ひとつのコードでiOS / Android / Webのアプリを作ることも可能なため、素早く継続的な改善が必要な昨今の開発事情にはマッチしているように思う。
NoSQLが必要になってきた理由
昨今の開発でNoSQLが求められている理由を整理しておく。 書籍には↓のように紹介されている
- 大規模なデータを扱うことが求められている
- 高速にデータを処理することが求められている
- 扱うデータに多様性が生まれてきた
NoSQLとRDBの違い
一番しっくりときたのは
- 自分はどの答えを持っているか?
- 自分は何を知りたいのか?
というテーマの違いで、Flutterでアプリ開発する場合は、自分≒アプリケーションを利用するユーザーは何を知りたいのか?を意識してモデリングすることがキモになると思った。 NoSQLはRDBを置き換えるものではなく、用途に応じて使い分けるものだということだった。
今はToDoアプリに近いアプリを作っていく予定だが、日毎の達成率を知りたいときにどのようにデータモデリングするか悩ましいと感じた。RDBだとtodo_historyとtodo_listを別テーブルで作成して達成率を計算する方法がありそうだが、NoSQL(DocmentDB)の場合はどのようにモデリングするのが最適なのだろうか。
NoSQLデータモデリングの基本的原則
NoSQLデータモデリング技法 · GitHubでは17個のテクニックが紹介されている。 NoSQLは非正規化が基本になっているようで、正規化が基本のRDBとは真逆なのが新鮮に感じた。今回はCloudFirestoreを使ったアプリを作る上での知識をつけることが目的なのでDocmentDBに関連するものを集中的に調べれば良さそうだった。
DocmentDBに関連するもの
1. 非正規化(Denormalization)
2.集計(Aggregates)
3.アプリケーションサイドJoin (Application Side Join)
4.アトミックな集計(Atomic Aggregate)
6.次元削減(Dimensionality Reuction)
10.転置検索
11.ツリー集計(Tree Aggregation)
12.近接リスト(Adjacency Lists)
13.マテリアライズドパス (Materialized Paths)
14.ネストされたセット(Nested Sets)
16.ネストされたドキュメントの平準化:近傍クエリ(Nested Documents Flattening: Proximity Queries)
17.バッチグラフ処理
この辺りの知識を意識して、身につけていくのが良さそうに感じた。