PR

データベース(Database/DB)の種類と使い分けについて

5. インフラ

こんにちは。Tomoyuki(@tomoyuki65)です。

Webサービスを開発する際は、何らかのデータベース(Database/DB)を使ってデータの保存や更新などをする必要がありますが、そんなDBには様々な種類があり、作るものによって使い分けも必要です。

この記事では、そんなデータベース(Database/DB)の種類と使い分けについてまとめます。

 

データベース(Database/DB)の種類と使い分けについて

主なデータベース(Database/DB)の種類や特徴は以下の通りです。

カテゴリ 分類 主なサービス名 特徴 強み 弱み 主な用途
リレーショナルDB RDB MySQL
PostgreSQL
Oracle
テーブル構造 + SQLによるデータ管理 ・高い整合性
・成熟した技術
・単一サーバー前提であり、水平スケール(サーバーを増やす)が難しい
・大量データを扱うのは苦手(特に書き込み処理)
・業務システム
・会計/決済
分散リレーショナルDB NewSQL Google Spanner
TiDB(MySQL互換)
YugabyteDB(PostgreSQL互換)
ACID特性(整合性)を維持した分散DB ・水平スケール可能
・高可用性
・設計・運用が複雑
・コストが高い
・大規模Webサービス
・金融・決済システム

・ゲーム
・グローバルサービス
非リレーショナルDB NoSQL Google Cloud Firestore
AWS DynamoDB
MongoDB
スキーマレスな分散DB ・柔軟な構造
・高スケーラビリティ
・JOIN不可/弱い
・整合性に注意
・リアルタイム分析系
・SNSやメッセージング系
・柔軟なデータ管理
インメモリDB/キャッシュ キー・バリュー型 Redis メモリ常駐の高速Key-Value ・非常に高速
・実装が簡単
・メモリ依存
・永続用途に不向き
・キャッシュ
・セッション管理
検索・分析エンジン 分散全文検索 OpenSearch
Elasticsearch
全文検索・分析特化エンジン ・高速検索
・柔軟な検索条件
・更新が重い
・正規DB不可
・ログ検索
・全文検索

※RDBについては、AWSならRDS(または高可用性のAurora)、GoogleならCloud SQLが該当のサービスになります。性能的には「Aurora > RDS ≒ Cloud SQL」のような感じです。Google Cloudの方でのより高性能なDBはNewSQLのSpannerとなります。

 

RDBとNoSQLはどっちを使えばいい?

データの整合性(データがおかしな状態にならないようにルールを守ること)を重視する場合は RDB を使います。

そのため、一般的なWebサービスで重要なデータ(顧客情報、契約情報、在庫情報、お金など)を扱う部分は、基本的にRDBを使うことが多いです。

一方で、データ形式が変化しやすかったり、高速で柔軟な読み書きが必要になる場合はNoSQLをの利用を検討します。

例えばリアルタイム性が高いチャットアプリのメッセージ保存などでは、NoSQLの方が最適です。

 

NewSQLはどんな時に使うべき?

NewSQLについては、RDBと同様にデータの整合性を重視しつつ、大量のデータやアクセスを分散して高速に処理できるデータベースです。

そのため、従来のRDBでは処理が追いつかないような大規模Webサービスや、金融・決済システム、そしてグローバル展開するようなサービスなどで使われます。

ただし、高性能な分コストも高くなるため、導入するかどうかは慎重に判断する必要があります。

 

MySQLとPostgreSQLはどっちを使えばいい?

MySQLは手軽さや速度、そしてWeb用途を重視したデータベースであり、シンプルなCRUD中心のアプリやCMS(WordPressなど)に向いています。

一方、PostgreSQLは正確さや一貫性、そして拡張性を重視したデータベースであり、SQL標準に忠実で、複雑なクエリ(問い合わせ)やトランザクション(一連のまとまった処理)、将来の仕様変更に強い(最初から厳密・標準準拠・拡張前提で作られている)のが特徴です。

そのため、これから新規開発する場合や、業務システムなどの場合、そして将来要件が増えそうな場合においては、PostgreSQLを使うのが最適です。

 

RDBとしてSQLiteは使わないの?

SQLiteは軽量で組み込み向けのリレーショナルデータベースで、MySQLやPostgreSQLのようなサーバーを必要とせず、一つのファイルとして動作するのが最大の特徴です。

デスクトップアプリやスマートフォンアプリ、Webブラウザ内部などでは広く利用されていますが、同時アクセスやスケーラビリティの制約があるため、一般的なWebアプリケーションのDBとして採用されることはほとんどありません。

 

Redisはどんな時に使うべき?

Redisについては、メモリ上にデータを置いて高速に読み書きできるデータベースで、頻繁にアクセスされるデータや一時的に保持するデータを扱う場面に向いています。

データはキーと値(Key-Value) の形式で管理されるため、単純な読み書き操作が非常に高速に行えます。

主にキャッシュや、ログインセッション管理などに使われることが多く、データの永続保存には向いていません。

 

OpenSearch(Elasticsearch)はどんな時に使うべき?

OpenSearch(Elasticsearchのフォーク)については、大量のデータを高速に検索・分析するためのデータベースで、全文検索、ログの検索・集計、イベントデータの分析などに向いています。

ユーザーが検索するようなデータがある場合、RDBとは別に検索用データをOpenSearchに登録しておくことで、検索処理を効率的に行うことができます。

ただし、元のRDBなどのデータとの整合性を保つためには、データの同期方法や更新のタイミングを工夫して設計する必要があります。

 

スポンサーリンク

DBとストレージサービスとの違いについて

データの保存に関しては、上記で説明したDBの他にもストレージサービス(AWS S3、Google Cloud Storageなど)があります。

ストレージサービスは、データを安全に保管することを目的としており、非構造的なデータ(PDFファイルなど)や大容量データ(写真、動画など)の保存に向いています。

ただし、データベースのように検索や集計、更新などの操作は基本的にできないため、一般的なデータ管理には向きません。

 

Go言語で各種データベースを試すための関連記事まとめ

Dockerでローカル開発環境を構築し、Go言語(Golang)でサンプルAPIを作って試す方法については、以下の関連記事にまとめていますので、よければ参考にしてみて下さい。

 

【関連記事】

DockerとGo言語(Golang)からPostgreSQLとORM「Bun」を使う方法
こんにちは。Tomoyuki(@tomoyuki65)です。Webサービスの開発では何らかのRDB(リレーショナルデータベース)を使うことが多いですが、これから新規開発をするなら将来の複雑化を見越してPostgreSQLを使うケースが増えて...
Go言語(Golang)でGoogle Cloud Firestore(NoSQL)の使い方|Docker環境構築+CRUD APIサンプル
こんにちは。Tomoyuki(@tomoyuki65)です。WebサービスにおけるデータベースといえばRDB(リレーショナルデータベース)が基本ですが、非構造的なデータを扱いたい場合や、頻繁にデータ更新が必要な場合、そしてリアルタイム性(低...
Go言語(Golang)でAWS DynamoDB(NoSQL)の使い方|Docker環境構築+CRUD APIサンプル
こんにちは。Tomoyuki(@tomoyuki65)です。Webサービス開発にあたり、アクセスが一気に増えても、とにかく速くさばきたいといった特定のユースケースにおいては、一般的なRDB(リレーショナルデータベース)ではなくNoSQLが使...
Go言語(Golang)でRedisの使い方|Docker環境構築+サンプルAPI
こんにちは。Tomoyuki(@tomoyuki65)です。データベースには様々な種類がありますが、キャッシュによるパフォーマンス改善やセッション管理などの一時的なデータ保存、そしてリアルタイム性が求められる場面で利用されるデータストアとし...
Go言語(Golang)でOpenSearch(Elasticsearch)の使い方|Docker環境構築+サンプルAPI
こんにちは。Tomoyuki(@tomoyuki65)です。データベースには様々な種類がありますが、検索エンジンとして利用したり、ログ分析を行うような場面で利用されるものとして、『OpenSearch(Elasticsearch)』がありま...

 

DB設計について学ぶ

また、これからのAI時代を踏まえて、DB設計についても体系的に学んでおくのがいいと思います。

私も試しに本「達人に学ぶDB設計徹底指南書 第2版」を買って読んでみましたが、DB設計の部分に関して体系的に学ぶことができ、「こういうのもあるんだ〜」というような感じで知識も深められたので良かったです。

私の場合は過去にOracle DBなどの実務経験があったのでサクサク読み進められましたが、経験が無かったり、まだ浅い場合はちょっと難しいかもしれません。

その場合は入門や初級者向けの本(DBやSQL)を読んでからこの本を読むといいかなと思います。

 

スポンサーリンク

最後に

今回はデータベース(Database/DB)の種類と使い分けについてまとめました。

Webサービスの開発においては、まずはリレーショナルDB(MySQLやPostgreSQLなど)を使うのが基本になりますが、必要に応じてNoSQL、Redis、OpenSearch(Elasticsearch)も使ったりします。

DBの種類に応じて向き不向きがあるため、それらの使い分けについては理解しておくようにしましょう。

 

コメント

タイトルとURLをコピーしました