こんにちは。DIGGLEのエンジニアのchikugoです。
はじめに
弊社プロダクトのDIGGLEの成長に伴い、先々も見据えてパフォーマンス改善を行う必要性が生じました。そのパフォーマンス改善の一貫で、DBやDWHの技術選定を行っています。今回はDBやDWHの技術選定の際に行った、一次調査についてお話できればと思います。
パフォーマンス改善の要件としては特定処理で数倍程度の速度改善が必要で、参照だけでなく追加など更新系の速度改善も求められます。 既存DBがAurora PosgreSQLになりますので、それに比べての改善効果や改善・移行コストが主な選定基準となります。
DB選定
Azure Cosmos DB for PostgreSQL vs AlloyDB で比較を行います。
Azure Cosmos DB for PostgreSQL
citusdataをMicrosoftが買収後、Azure Cosmosとしてリリースされました。マルチテナント型のSaasに最適と謳われています。弊社DIGGLEもマルチテナント型のSaasなのでプロダクト形態としてはマッチします。
citusdataの利用実績としてはSmartHRさんの事例をご存知の方もいるかもしれません。
つらくないマルチテナンシーを求めて: 全て見せます! SmartHR データベース移行プロジェクトの裏側 / builderscon 2018 - Speaker Deck
citusdataの方ではクエリを20倍から300倍 (またはそれ以上) 高速化可能と謳われており、この性能アピールは魅力的です。
Azure Cosmos DB for PostgreSQL のアーキテクチャの概要としては以下のような概念図となります。
- コーディネーターノード
- 分散テーブルのメタデータを格納し、分散計画を担当します
- ワーカーノード
- 実際のデータが格納されます
- 分散テーブルが複数のワーカーノードに分散されて格納されます
- ノード数を指定してスケーリング可能です
こちらは分散テーブルという概念があり、性能担保する為には以下のようなSQLで分散テーブルに対して分散列を指定してやる必要があります。
SELECT create_distributed_table( 'table_name', 'distribution_column');
また性能劣化させない為に分散テーブルの参照には分散列の指定(Where句)が必要になります。
こういった特徴により、Azure Cosmos DB for PostgreSQLはベンダーロックイン要素が多少有り、移行コストはそれなりにあると思われます。
料金については以下で算出可能です。
価格 - Azure Cosmos DB | Microsoft Azure
1ノード辺り、8vCPUs、64 GiBメモリで ¥130,139/月 の料金となっています。
(2023/2/21現在)
AlloyDB
AlloyDBはGoogleが昨年(2022)リリースしたカラム型エンジンを備えたDBになります。トランザクションは4倍、分析クエリは最大100倍高速になると謳われており、こちらの性能アピールも魅力的です。
AlloyDB のアーキテクチャの概要としては以下のような概念図となります。
- Cluster
- ルートリソースになります
- Primary instance
- クラスター内のデータベースの読み取り/書き込み接続ポイントを提供します
- Read pool instance
- クラスター内のデータベースの読み取り接続ポイントを提供します
- ノード数を指定してスケーリング可能です
- 参照系性能が必要でなければRead pool instanceがなくても動作します
AlloyDBはPostgreSQLとの完全互換が謳われており、Aurora PostgreSQLからの移行コストは低そうです。
ただAlloyDBの売りの一つであるカラム型エンジンを有効にした場合は、以下のようにjson型などはサポートされなくなるようなので注意が必要です。
About the AlloyDB columnar engine | AlloyDB for PostgreSQL | Google Cloud
カラム型エンジンについては以下で詳しく紹介されていますので、興味がある方は参照してみてください。
AlloyDB for PostgreSQL の仕組み: カラム型エンジン | Google Cloud 公式ブログ
料金についてはvCPUsやメモリによって決まっています。
料金 | AlloyDB for PostgreSQL | Google Cloud
月単位で1vCPUが$61.7434、メモリ1GBが$10.4682 の料金になっています。
(2023/2/21現在)
DWH選定
Redshift vs SnowFlake vs BigQuery で比較を行います。
DWHのそれぞれの性能面の比較については今回は一旦おいています。その理由としては以下の記事で紹介されているようにそれぞれのベンダー間でベンチマーク戦争が行われているのと、利用のユースケースによって性能が変わってくると思われるためです。
Redshift vs. BigQuery - 選択ガイド | Integrate.io
DB選定にも言えることですが、弊社プロダクトのユースケースに沿った性能検証は別途行います。
またDWHのコスト比較についてもSnowFlakeやBigQueryは従量課金で算出しずらく、ある所ではRedshiftが安いと言われていたり、ある所ではBigQueryが安いと言われていたりするので、こちらも今回は比較対象外にしています。
Redshift
Redshiftは以下の特徴があります。
- フェデレーテッドクエリを使用するとRedshiftからAurora PostreSQLのデータが参照可能
- Aurora PostreSQL側からもリンクテーブルでRedshitを参照可能
- 月額制の通常プランと従量課金のサーバーレスプランがある
- PostgreSQL8.xに基づいて作られている
他のDWHにいえることだと思いますが、更新系はそこまで早くないのとデータ量が少ないと検索速度の優位性は小さくなります。逆にデータ量が多くなれば爆速が期待できます。
また同時実行についても同時実行増加オプションはありますが、デフォルトの同時実行推奨数が15とそちら方面も強くありません。
尚、Redshift Serverlessについては同時実行スケーリングがデフォルトで含まれています。
SnowFlake
SnowFlakeの特徴は以下になります。
- PostgreSQLとの互換性はない
- 従量課金制
- WebUIは洗練されている
- データはAmazon S3に保存
- リンクテーブルは使えない
SnowFlakeはAurora PostgreSQLでのリンクテーブルが使えないのと、PostgreSQLとの互換性はないことから移行コストは高そうです。
また、弊社ではRubyがメイン言語で使われているのですが、SnowflakeではRuby用のネイティブコネクタが用意されていないのでそちらはマイナス要因となります。
Snowflake Community
BigQuery
BigQueryの特徴は以下になります。
- PostgreSQLとの互換性はない
- 従量課金制
- GCP関連のDBサービスならほぼリアルタイムにレプリケーションできると謳われている
- 内部的なサーバーリソースの振り分けはBigQueryが自動でやってくれ、DWHの中ではよりマネージドなサービスに分類される
- リンクテーブルは使えない
BigQueryもAurora PostgreSQLからの移行コストは高そうですが、AlloyDBを選定した場合にはほぼリアルタイムにレプリケーションできると謳われているのは魅力的です。
おわりに
今回はDBとDWHの技術選定調査についてお話ししました。
今回の調査の結果、弊社開発チームとしてはAlloyDBとRedshift Serverlessに対して、弊社プロダクトのユースケースに沿った性能検証を行うこととなりました。
理由としてはAlloyDBは移行コストが低そうで性能改善が見込まれること。Redshift Serverlessも性能改善が見込まれることと、フェデレーテッドクエリなどが利用できる所から移行コストが比較的低そうだというのが主な理由となります。
弊社プロダクトのユースケースに沿った性能検証については現在行っているところですので、また機会があれば記事にしたいと思います。
We're hiring!
今あるものを更により良くするための方法を、我々と一緒に模索してくれる開発メンバーを募集しています!少しでも興味があれば、ぜひ下記採用サイトからエントリーください。