最近のDB事情について何もわからないので調べるメモ
最近のDB事情が全然わからないので調べる。気になってるのは以下
- Spannerが使われてるのをよく見るけどどうなのか
- TiDBとかCokarochdbについて何も知らない
- AWS Auroraはそれらとは違うのか?
- 今から新規でサービス立ち上げする時に何使えばいいのかの判断基準が欲しい
- 個人開発でよく使われるPlanetScaleも気になる
AWS Aurora
Spanner系の分散データベースの類ではなさそう。厳密にはRDSの一種でMySQLやPostgresと互換性がある。ストレージがオートスケーリングしたり、ストレージがマルチリージョン配置だったり、リードレプリカが最大15個使えて、セカンダリインスタンスを必要としなかったりと高トラフィックを運用負荷なく捌いたり、耐障害性を備えていたりといった利点が望める。
以下の記事がわかりやすかった。RDSとAuroraで比べるなら基本的にはAuroraを推したい。ただし、Auroraはリクエストあたりの従量課金があり、それが高いのでRDSよりも高くなることが考えられる。Auroraはストレージを3AZに跨って配置し、十分耐障害性はあるのでマルチリージョン構成をなくすなどコストを抑える工夫もできなくはない。
コスト的に何が何でも安くしたとかでなければAuroraの方が良さそう。何もしないで勝手に増えてくれる系のマネージドが今のトレンドな気がする。
Cloud Spanner
Spanner自体はけっこう前からあったみたい。高いスケーラビリティ、高可用性といった今時の特徴を持ったマネージドなRDBMS。RDBMSといっても内部的にはKVでMySQLやPostgres互換で実際はGoogle標準SQLを使うらしいのでSpannerを使うなら今までのRDBMSのマネージドと違う点も多いかもしれない。
Spanner特有の特徴として以下の記事がわかりやすかったがクエリの方言やインデックスの仕組みから違うらしい。
また、Aurora同様コスト的に高くなるんじゃないかというのが一番気になるがSpanerの場合、3年くらい使いますよという長期契約みたいなので40%くらい安くなるらしいし、オートスケールで使われていないときにはコストが抑えられるようになってるようでそんなにコストが高くなるといったことはないのかもしれない。
スタートアップでSpannerを使ってるのをちょこちょこ見たけどそのタイミングで将来的なスケールのことも視野に入れてDBインスタンスを立てるのにSpannerはちょうどいいのかもしれない。
Auroraはリードレプリカにより最大15台までの水平スケールをすることができる。しかし、あくまでリードレプリカのため書き込み処理に関してはスケールしない。RDBMSの水平スケールはデータの整合性やトランザクションの難しさがあり、垂直スケールの方が適している。
一方Spannerは分散ストレージとして完全な水平スケールを実現することができる。Spannerは分散ストレージのためストレージは複数のDBノードに分散される。また自動シャーディングやマルチリージョン構成、分散システムでありながらも強力なトランザクション機能などを有することで水平スケールを実現している。
TiDB・コカローチなど
Spannerの論文が発表されたことで分散DBがOSSとして作られるようになた。TiDBやCockarochDBなどが代表的。TiDBはOSSというか企業がサービス展開しており、SaaSみたいに使えて、利用中のDBのモニタリングっぽいこともwebでできる、たぶん。Spanner同様、完全なMySQL互換ではないのでそれぞれ特有の特徴がありそうだが利点はSpannerの利点そのままのはず。
TiDBは国内でも注目されているのを感じ、特にDBが高負荷になりやすいゲーム業界から注目されているように感じる。
PlanetScale
ここらへんがよくまとまってる
サーバーレスのマネージドなDB。MySQL互換。水平スケールもサポートしており、無料枠も十分にあり、コストがあまりかからずにサクッとDBを用意できるのが最大の利点の気がする。なのでフロント主体のスタートアップや個人開発で採用されている気がする。
特徴としては他にもノンブロッキングにテーブルのマイグレーションを実行できたりなどするがその関係で外部キー制約はサポートしていない。RDBMSとしてDBを求めてる時に外部キー制約が使えないと話にならない気がするのでとりあえずDB立てたいみたいな時ならいいだろう。
プロダクションとしてはシンプルなデータ構成であればPlanetScaleでも問題ないかもしれないというか爆速でDB立てれる。ドメインがある程度複雑だとその分DBも複雑になりがちなのでそういった場合はSpannerやTiDB、Auroraを選択するのが今時かもしれない。
調べていく中でオライリーの詳説 データベースにたどり着いたので買った。SQLやパフォーマンスチューニング的な技術書が多い中、DBの仕組み的なところを学ぶ、と思う。
スタートアップ界隈AWSよりGCPの方が使われてる印象がある。Cloud Runにアプリのせるのが快適だからだと思う。なのでDB必要であれば必然的にSpannerが候補に上がる。フロントエンド目線だと余計なことを考えずにサクッとDB立てられるのでPlanetScaleも上がるんだろうが、プロダクションレベルで考えるとそんな単純なデータ構造になることは少ないだろうし、それならSpannerの方がいい気がする。もっと、尖ってフロント目線だとCloudfrare上でD1使って完結させるムーブもあるかもしれない。ただ尖ってる
クラウドがAWSならAuroraがいいだろう。ただし、あえてRDSやCloudSQLを使う選択肢もある。コストやプロダクトの現在地やその先のことなどいろいろ考えた上で。
正解はないが極力運用コストを0にするようにしていくのが今の開発現場ではいい気がする。
TiDBはまだ事例が少ないのでこれからどうなるかだとおもうけどスタートアップなどの新規開発であえて採用されるケースはあまりない気がする。