PostgreSQLとCockroachDBの徹底比較――どちらを選ぶべきか?
本記事は2019年8月15日にObjectRocket.com/blogで公開された記事をもとにしています。
リレーショナルデータベースの分野において、CockroachDB®とPostgreSQL®はそれぞれ確固たる地位を築いており、「どちらを選べばよいのか」という疑問を持つ方も多いのではないでしょうか。CockroachDBは分散トランザクションと水平方向の読み書きスケーリングを標準搭載し、真にグローバルなスケールを実現するSQLデータベースとして、かつてない規模・耐障害性・パフォーマンスをSQLワークロードにもたらします。一方で、PostgreSQLの方が適しているシナリオも依然として存在します。
CockroachDBとPostgreSQLの共通点
この2つの技術には多くの重なりがあります。まず何よりも、両者とも以下の特徴を備えています。
- SQL準拠
- ACIDトランザクション
- PostgreSQLワイヤプロトコル互換
- 幅広いクライアントドライバおよびORMサポート
これらの機能が主要なポイントをほぼカバーしているため、選択の決め手となるのはより細かな判断基準になります。例外的なケースを除けば、どちらのデータベース上でもアプリケーションを試し、後からアプリを書き換えることなくもう片方へ移行することも可能です。
CockroachDBを試してみたものの、PostgreSQLの方が合っていると判断した場合でも、トラブルに遭遇する可能性は低いでしょう。逆に、PostgreSQLで稼働中のアプリがあり、より優れたスケーラビリティやフェイルオーバーを求めているなら、CockroachDBが適しているかもしれません。
選択を助ける違いのポイント
互換性、複雑なクエリ、スケーラビリティ、柔軟性という4つの観点が、どちらを選ぶべきかの判断材料になります。
スケーラビリティ
最大の違いは、スケーリング、レプリケーション、高可用性(HA)の扱い方です。CockroachDBは当初から分散トランザクションを備えたグローバルなSQLデータストアとして設計されました。データをクラウドやリージョン間に分散させ、どのリージョンやクラウドにどのデータを配置できるかを細かく制御できます。PostgreSQLにも同様の機能を提供するソリューションや拡張機能は存在しますが、CockroachDBほど完成度は高くなく、設定や管理も容易ではありません。
グローバルスケールに重点を置くCockroachDBは、クラウドとの相性も抜群です。多数の小規模で使い捨て可能なノードを前提として設計されているため、スケーリングとHAは背後で自動的に処理されます。
一方のPostgreSQLも、マルチマスターやスケーリング、HAのためのソリューションを数多く提供していますが、その大半はPostgreSQL本体には含まれておらず、サードパーティ製の拡張機能が必要です。また、HA構成のPostgreSQLでは、セットアップ、設定、日々の運用管理がやや複雑になります。
柔軟性
PostgreSQLの大きな強みは、長年にわたる実戦での磨き上げと、豊富なチューニング項目や拡張機能です。PostgreSQLのサーバー設定に関するドキュメントを見れば、クラスタに対する膨大なオプションやチューニングパラメータが確認できます。分離レベルは4種類から選べます(CockroachDBは1種類のみ)。レプリケーションも8つの方式から選択可能ですが、CockroachDBでは自動的に処理されます。
さらにPostgreSQLは、製品を拡張する巨大なエコシステムを備えています。公開されている拡張機能は数百あり、独自の拡張を作成することもできます。クラスタリング(Citusなど)、新しいデータ型やオブジェクト(PostGIS)、特定ユースケース向けの最適化(Timescale)まで、その範囲は多岐にわたります。ただしこの柔軟性には代償も伴います。複雑さが増し、インスタンスのパフォーマンスや安定性に影響を与えたり、環境を誤って設定してしまうリスクもあります。CockroachDBのアプローチはシンプルで、クラスタの構築と管理が直感的に行えます。
互換性
完全なPostgreSQL互換性や、より高いSQL準拠度が必要な場合は、PostgreSQLを選ぶのが賢明です。レガシーアプリケーションや、標準的なCMS・Webフレームワークのバックエンドストアとして利用する場合、CockroachDBがまだサポートしていないPostgreSQLやSQLの細部に大きく依存している可能性があります。Cockroach Labsは継続的に機能を追加していますが、現時点でPostgreSQLと100%互換というわけではありません。また、ロール、ユーザー、グループ、認証の扱い方にも違いがあります。PostgreSQLの認証オプションは非常に堅牢で、CockroachDBもRBACを提供していますが、両者には重要な違いがいくつかあります。
互換性の課題は克服可能ですが、最終的にはアプリケーション次第であり、潜在的な非互換性を特定し対処できるかどうかにかかっています。
複雑なクエリ
Cockroach Labsが多大な投資を行ってきた分野の一つが、コストベースのSQLクエリオプティマイザによる結合処理とパフォーマンス向上です。しかし、極めて複雑なクエリや複数の結合、ビュー、集計、式評価を含むBI(ビジネスインテリジェンス)や分析ワークロードの場合は、PostgreSQLの方が適しているかもしれません。
この点は評価版やPoC(概念実証)で簡単にテストできます。ユースケースが分析クエリやOLAPに近づくほどPostgreSQLが有利になり、高速なOLTP型トランザクションであればCockroachDBが最大の効果を発揮します。
比較まとめ
| CockroachDB | PostgreSQL | |
|---|---|---|
| 初回リリース年 | 2015年 | 1996年 |
| 現在の安定版 | 20.1.0 | 13 |
| ライセンス | BSL(Business Source License、コアコンポーネント)/ CCL(Cockroach Community License、エンタープライズ機能) | PostgreSQL License |
| SQL準拠度* | SQL:2011の約244機能に完全または部分的に準拠 | SQL:2011の約385機能に準拠 |
| 特長 | オンラインスキーマ変更、分散トランザクション | ストアドプロシージャ、カーソル、トリガー、マテリアライズドビュー |
| ワイヤプロトコル | PostgreSQLワイヤプロトコル | PostgreSQLワイヤプロトコル |
| クライアントドライバ | 検証済みオプションに加え、PostgreSQLワイヤプロトコルにより広範なエコシステム | 公式およびコミュニティ提供の幅広いドライバ群 |
| CMS/フレームワーク互換性 | PostgreSQLワイヤ互換経由で部分的に対応 | 主要フレームワークへの幅広いサポートと互換性 |
| プラグイン/拡張機能 | エンタープライズ機能パック | コミュニティ拡張の大規模エコシステム |
| レプリケーション/HA | あり(組み込み) | オープンソースの追加/拡張経由 |
| マルチマスター/クラスタリング | あり(組み込み) | オープンソースの追加/拡張経由 |
| マルチデータセンター/地理分散 | あり(組み込み) | カスタムまたはオープンソースの追加/拡張経由 |
| 認証 | パスワード、証明書 | パスワード、証明書、GSSAPI、SSPI、Ident、LDAP、RADIUS、PAM、BSD |
| 権限管理 | ユーザーベースの権限とRBAC | 行・列レベル権限を備えたRBAC、SQL:2011権限の完全サポート |
| 強み | クラウドネイティブなスケーリング、高可用性、地理分散、シンプルな設定とデプロイ | 柔軟性、チューニング性、互換性、エコシステム |
| 弱み | レイテンシ、SQLサポート/機能の充実度 | 大規模時の複雑さ、読み取り性能 |
| 結論 | 高度なトランザクション処理型(OLTP型)ワークロードを構築する場合や、スケールアウト(ローカルまたはグローバル)が重要な場合はCockroachDBを選択 | 分析クエリの比重が高いワークロードや、豊富な機能セット、エコシステム、互換アプリへのアクセスが必要な場合はPostgreSQLを選択 |
* SQL:2011仕様に100%準拠したデータストアは現状存在しないため、各製品が仕様のどれだけをサポートしているかを比較しています。
目の前には2つの優れた選択肢があります。両者を組み合わせて、優れたデータストアポートフォリオを構築することも可能です。今まさにゼロから構築を始めるのであれば、極めて特殊な要件やPostgreSQL固有のニーズがなく、スケーラビリティが重要であるなら、CockroachDBを真剣に検討する価値は十分にあります。一方、必要なものがすでに明確で、PostgreSQLの幅広い柔軟性に焦点を当てたい場合にも、私たちがお手伝いいたします。
PostgreSQLとCockroachDBはどちらも現在利用可能です。自分に合った方を見つけてください。
まとめ
ご意見やご質問がある場合は、フィードバックタブをご利用ください。また、Sales Chatをクリックすれば、今すぐチャットで会話を始めることもできます。
-
パソコンとAndroidスマホ間でファイルを転送する5つの方法【初心者向けガイド】
最近Androidスマートフォンに機種変更した方や、新しいパソコンを購入した方は、いずれファイルのやり取りが必要になる場面に直面するでしょう。「やり方がわからない…」と不安になる必要はありません。この記事では、パソコンとAndroidスマホの間でファイルを転送するための基本的な方法を、初心者にもわかりやすく解説します。スマホとパソコンの間でファイルを移動したい理由はさまざまです。大切なデータをバックアップとしてパソコンに保存しておきたい、Androidスマホで編集したい画像ファイルをパソコンから受け取りたい――そんなときに役立つのがファイル転送です。ここでは、最もよく使われている代表的な方法を
-
MacとWindows PC間でファイルを共有・移行する6つの方法
新しいMacを購入したものの、Windows PCからデータをどう移せばいいのか悩んでいませんか?OSが異なるためデータ転送が難しいのでは、と考えるのは自然なことです。しかし実際には、正しいソフトウェアを使ったり適切な手順を知っていれば、ドキュメントやメディアファイル、写真などをMacとWindowsの間で簡単にやり取りできます。ただし、後でアクセスしやすいように、転送したいデータをあらかじめ整理しておくことをおすすめします。 事前準備:PCのIPアドレスを確認する 転送作業を始める前に、自分のコンピュータのIPアドレスを把握しておく必要があります。IPアドレスがわからない場合は、以下の手順で