データベース(DB)の種類や選択時の考え方、PostgreSQLとRedisの違い、MySQLとPostgreSQLの違いなどについて簡単にまとめています。
DB選択の考え方
アプリケーションの応答速度を早めたり、負荷を低くすることでDBサーバー費用を安く抑えるため、データの種類にあったDBサーバーを使う。
大事なデータはサーバー使用料は高いが高機能なMySQLやposgreSQLを使い、さほど重要でもないデータはより高速で大容量を処理できる簡易的なRedisを使う。
MySQLやPostgreSQLの主な特徴
- RDBMS
- 物理ディスク(処理速度遅い、上限達しやすい)
- 高機能(複数の表を紐付け可能)
- 信頼性高い(データ永続保持)
- サーバー使用料高め
Redisの主な特徴
- NoSQL(Key-Value型)
- メインメモリDB(速い)
- 一時保存(一定時間後に消える)
- データバックアップ機能もある - サーバー費用を抑えられる
PostgreSQLやMySQLとRedisの違い
ストレージ(保存領域)の違い
PostgreSQLやMySQLは他のRDBMSと同じく、保存領域(ストレージ)に物理ディスクを使用。データは永続的に保存され信頼性も高い。メモリに比べ処理速度は遅い。
Redisはメモリを使うため、処理速度が早い(数千〜数万倍早い)
機能の違い
MySQLやPosgreSQLは複数の表を関連づけることが可能。データ量は多くなるが、複雑な処理もできるので高機能。
Redisはデータ保存に、一対になったキーと値を使う(Key-Value型)。RDBに比べるとかなりシンプルな作りになる。
言語の違い(RDBMSとNoSQL)
PosgreSQLやMySQLでDBやテーブルのデータを扱うときには、RDB用の決まったフォーマットであるSQL言語を使う。
一方、Redisの表はRDBではないため言語はSQLではない。これらのSQLを使わないDBをNoSQLと呼ぶ。
ちなみに、NoはNotではなく、Not Onlyの略。
PostgreSQLやRedisに関する豆知識
それぞれの名称
PostgreSQL: ぽすぐれ
- フルネームはポストグレスキューエル。
- 初期のPJ名がPostgres(ポストグレス)だった。
- SQL言語をサポートするようになってから、PostgreSQLになった。
Redi: レディス
- REmote DIctionary Serverの略。
- 外部辞書型サーバー
- 辞書型:key-valueの組み合わせのこと
MySQLとPostgreSQLの違い
PostgreSQLはオープンソース、MySQLはOracle社が運営管理している。
PostgreSQLは拡張機能が充実している。
特にPostGISという地理情報(GIS)を扱う拡張機能を使いたい場合はPostgreSQLを使用。
大量データを捌く場合、MySQLよりもPostgreSQLの方が上限に達しにくい。
SideqikとRedis
Rubyアプリにsideqikというライブラリがあるが、このsideqikを使うためにredisのインストールが前提条件となる。
sideqikは、処理のスケジューリング(cron)、メール送信、サーバーの割り当てなどができる便利ツール。
管理画面もあり使いやすい機能。
RedisとMemcachedの違い
インメモリ型DBはRedisの他にMemcachedが有名。どちらもAWSでサポートしている。
Memcachedの方がシンプル、軽量で早い。使える型はstringのみ。
Memory Cached Demon(常駐型メモリキャッシュ)の略。
Redisは機能が豊富。取り扱える型もstring以外にlist, set, hashなど様々。AWSでバックアップ(スナップショット)もできる。
キャッシュデータしか扱わない場合はmemchashedが最適。もしものときを考えたり、sideqikを使いたい場合はRedisを使用。
ログデータ保存DB(Google BigQuery)
RDBMSとメインメモリDBは、ログのように時間が立つごとにどんどん増加していき、かつある程度長期的に保存する必要があるデータにはいずれも適していない。
適さない理由としては、負荷が高く費用がかかりすぎること、データ抽出に時間がかかってしまうこと。
このため、ログデータの保存にはGoogleが提供するBigQueryを使う。BigQueryはより大量のデータを高速で処理することができる。
BigQueryの概念
データ検索
RDBMSは行で表を管理するのに対し、BigQueryは列で管理する。ログ管理の場合、列を日単位(キーをtimestamp)にすることで、期間指定によるデータ抽出をしやすくしている。
ある期間を指定した場合、RDBMSは全データを検索して、その中から該当するデータを抽出する。一方、BigQueryは指定した期間のデータのみをバサっと抽出できる。
まとめ
それぞれのDBの特徴に合わせてツールを選択することで、パフォーマンスが高く、料金を抑えることができる。
RDBMS(PostgreSQL)
- 重要なデータの保存。
- ユーザー情報や、書き込み内容など。
- 消えたら困る重要なデータ。
インメモリDB(Redis)
- 一時的にしか使わないデータ。
- キャッシュやセッション情報など。
- データが消えたとしても、不便にはなるが致命傷にはならない。
BigQuery
- ログデータ
- 時間が立つごとに増え続ける巨大なデータ
- dailyなどまとめて管理