データベース(DB)の種類や選択時の考え方|MySQLやPostgreSQLとRedisの違い、MemcachedやBigQueryとの違い・メリット・デメリット

database-kv-prograshi(プロぐらし)-kv Database
記事内に広告が含まれていることがあります。

データベース(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はメモリを使うため、処理速度が早い(数千〜数万倍早い)

RDBMSとは何か?

PosgreSQLやMySQLなどのテーブルは、それぞれの関連付け(relational)を行うことができます。このため、リレーショナルデータベースと呼びます。英語でRDB。relational databaseの略です。このRDBを管理するシステムをマネージメントシステムという単語をつけて、RDBMSと呼びます。

RDB=RDBMSとして使う場合もよくあります。


機能の違い

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などまとめて管理
タイトルとURLをコピーしました