データベース(KVSとRDB)の選択

TemPlatではデータベースはKVSの『Datastore』もしくはRDBの『Cloud SQL』からデータベースを選択出来ます。
ここではケース別にどちらを選択するべきかの考え方とそれぞれの特徴を説明します。

TemPlatを使う上でどちらのデータベースを使うか迷った場合に参考にしてください。
なお、どちらのデータベースを選んだ場合でもTemPlat自体の利用料金や利用できる機能に違いはありません。

基本的な選択方法

最初にTemPlatを使う上で、KVSの『Datastore』とRDBの『Cloud SQL』どちらを選択すべきかのついて、簡単な考え方を記載します。
ここでは、

  • 運用コスト
  • 処理速度(処理コスト)
  • クエリの複雑さ

の三つの観点からどちらを選択するべきかを考えていきます。

運用コストを抑えたい … Datastore

運用コストではDatastoreが圧倒的に有利です。
Cloud SQLでは無料枠が存在しないのに対し、Datastoreは無料枠が存在します。
また、Cloud SQLはマシンを常時起動するための待機コストも発生するので、無料で使うということは事実上不可能です。
逆にDatastoreではデータ量や読み取り書き込みの量が増えない限り無料で使うことができます。
(データ量や読み取り書き込みの量が増えた場合でも従量課金制のため、いきなり高いコストが発生することはありません。)

料金の詳細は公式のリンクを記載しますので、必要に応じてご確認ください。
Datastoreの料金
Cloud SQLの料金

上記の理由から、TemPlatを試しに使ってみたいという方にはDatastoreをお勧めします。
TemPlatを使ってDatastoreでアプリケーションを組むことにより運用コストが無料のアプリケーションも構築可能です。

高速なクエリを維持したい … Datastore

クエリ自体の処理速度はDatastoreが有利な場合が多いです。
簡単に説明すると、DatastoreではKey(≒クエリ)に対してValue(≒データ)が紐付いているシンプルな作りなため、クエリがデータを常に参照出来るような状態にあります。
それに対し、Cloud SQLではINDEXを使わない限り、クエリに対してデータを検索する必要があるため処理コストが高くなってしまいます。

また、Cloud SQLがテーブル間のリレーションを保つため分散処理が難しいのに対し、Datastoreはシンプルな作りため、分散処理が可能なことも高速に処理できる理由の一つです。
言い換えるとDatastoreはスケーラビリティが高く、処理を分散させられるため高速処理を維持することが出来ます。

複雑なクエリを行いたい … Cloud SQL

複雑なクエリを行いたい場合はCloud SQLを選択する必要がある可能性が高いです。
ここでいう複雑なクエリを一概に説明するのは難しいですが、アプリケーション開発でよく使うクエリの中でDatastoreでは難しいクエリを列挙します。

  • SUM(合計)やAVG(平均)などの集計クエリ
  • 文字列を部分一致で取得するクエリ
  • テーブルAとテーブルBを結合するようなクエリ
  • 条件A or 条件Bのようなクエリ

なお、ここで説明するのはクエリとして実現不可能なだけで、プログラムを組めば実行可能なものも含まれます。
例えば、集計クエリは別で集計用のテーブルを実装することにより実現可能ですし、文字列を部分一致はn-Gramのようなものを構築すれば実現可能です。
ただし、そのようなクエリをメイン機能として提供するアプリケーションではプログラムの処理コストが上がってしまい、結果的にアプリケーションの処理コストが上がってしまうので、Cloud SQLの利用をお勧めします。

KVS(Datastore)の特徴

次に、KVS(Datastore)の特徴を説明します。

KeyとValueが紐づいている

KVS(Key-Value Store)を簡単に説明すると、Keyに対してValueが設定されるシンプルなデータベースです。
JavaScriptのObjectやMap、連想配列のようなものをイメージして頂ければ理解しやすいと思います。
どのようなクエリに対してもインデックス(Keyの”組み合わせ”)に対して結果が紐づいているため、クエリが高速です。

言い換えると、インデックス(Keyの”組み合わせ”)に紐づかないクエリは実行出来ないという特徴があります。
こちらが前途したような複雑なクエリが実行出来ないという理由の答えです。

フィールドの型に配列やオブジェクトが設定出来る

Datastoreではフィールドの型に配列やオブジェクトが設定可能です。
どちらもRDBの場合は、二つ以上のテーブルを組み合わせて実現する必要がありますが、Datastoreでは一つのテーブルで実現可能です。また、配列に対してクエリを行うことも可能です。

結果的にDatastoreで構築するアプリケーションは関連テーブル等を作る必要がない(作ることが出来ない)ためデータ構造もシンプルになる特徴があります。

RDB(Cloud SQL)の特徴

次に、RDB(Cloud SQL)の特徴を説明します。

テーブル間にリレーション(関係)を構築できる

RDB(Relational Database)はテーブル間にリレーション(関係)を構築できるデータベースです。
エクセルを使ったことがある人であれば、エクセルの複数のシートがそれぞれ関連しているようなものをイメージして頂ければ理解しやすいと思います。
テーブル間にリレーション(関係)を構築できるので、管理するべき項目が多い時にそれらを構造的に管理することができるのが特徴です。

そのため、リレーション(関係)を意識したクエリが実行可能で、基本的に実行出来ないクエリはありません。
つまり、KVSがシンプルなデータベースだとすると、RDBは高機能なデータベースと言うことが出来ます。

デファクトスタンダードなデータベース

RDBはアプリケーション開発で歴史が長く、現行のデファクトスタンダードと言えます。
データベース=RDBと思っているエンジニアも少なくありません。
なので、前途したKVSに比べ、Webの情報や書籍も圧倒的に多く、扱えるエンジニアも多い傾向にあります。

また、RDBはデファクトスタンダードかつ高機能なので、RDBで出来ること(KVSで出来ないこと)がシステムの要件になっていることもあります。

まとめ

ここまでの特徴をまとめると以下のようになります。

  • 運用コストが安くて高速なKVS(Datastore)
  • 出来ないことが無い高機能なRDB(Cloud SQL)

どちらのデータベースを選ぶのが最適かは作りたいシステムの要件によって異なり、一概にどちらが良いか判断するのは難しいです。
判断が難しい場合は、まず、Datastoreでシステムに合わせたERDを設計し、実際に何が出来て何が出来ないかを実感してもらうことが最適です。TemPlatではシステム構築を全て自動で行うので、ERDを設計するだけで、画面から実際のデータを操作して試すことが出来ます。
ERD設計時や画面から操作を行なってDatastoreでは要件を満たせないと判断した場合は、データベースをCloud SQLに変更すれば、それぞれの特徴をより深く理解することが可能です。