RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

RDBMSとDBMSについて【初心者向け】

f:id:tech-rakus:20210806152612p:plain

はじめに

こんにちは。楽楽精算開発チームのyk_itgです。

これまで6回の投稿で主にPostgreSQLについての記事を書いてきましたが、今回はPostgreSQLをはじめとするデータベースを管理するDBMSや、リレーショナルデータベースを管理するRDBMSについてまとめました。
初心者の方でも分かりやすい内容になっていると思いますので、ご参考いただけますと幸いです。

DBMSとは

DBMS(DataBase Management System)はデータベース管理システムのことで、データベースの検索や整理を行う専門のソフトウェアです。
システムの開発者が自前でデータと記録や管理を実装しようとすると、整合性を考えたり、検索速度を考えたり、データを復元させたりなど考えることが多くかなり大変です。DBMSを使えばそういったことはDBMSに任せて、自分が作っているソフトウェアはやりたいことに専念することができます。

データベースって?

データベースは整理して使いやすい形にしたデータの集合のことです。
データベースを使うと大量のデータを整理して保存することが可能で、必要なデータを素早く検索することができます。

DBMSの分類と特徴

DBMSにはRDBMSとNoSQLといった大きく2つの分類があり、それぞれ特徴があります。
ここではそれぞれの得意なことや苦手なことを紹介していきたいと思います。

RDBMSとは

RDBMS(Relational DataBase Management System)はリレーショナルデータベースを管理します。DBMSの中でRDBMS(リレーショナルデータベース)が現在一番普及しています。
RDBMS(リレーショナルデータベース)は表のような関係モデルを扱い、データは行と列で構成されています(テーブルと呼びます)。例として以下の社員テーブルは「社員番号」や「社員名」等の列は項目を示しており、行はデータを表しています。

社員テーブル

社員番号 社員名
1 Aさん
2 Bさん

RDBMSの特徴

柔軟な検索ができる

RDBMS(リレーショナルデータベース)の一番大きな特徴として、リレーショナル(関係)の名前の通り複数の関係したデータをまとめて検索できることが挙げられます。 例えば、上記の社員テーブルに関係している「社員番号」と「電話番号」を持っている電話番号テーブルがあるとします。
RDBMS(リレーショナルデータベース)ではSQLという専用の言語を使って、これらの関係するデータをまとめて一度に検索することができます。
例えば社員テーブルと電話番号テーブルを結合することで「社員名」とそれに紐づく「電話番号」をまとめて検索することができます。

電話番号テーブル

社員番号 電話番号
1 03…
1 090…
2 080…

社員テーブルと電話番号テーブルを結合したテーブル

社員番号 社員名 電話番号
1 Aさん 03…
1 Aさん 090…
2 Bさん 080…

結合以外にも、SQLを使えば複雑な条件で検索することもできます。
例えば、社員番号が1、電話番号が03から始まるといった条件で検索することもできます。

社員番号が1、電話番号が03 から始まるデータ

社員番号 社員名 電話番号
1 Aさん 03…

まだまだSQLでできることはたくさんありますが、このようにRDBMS(リレーショナルデータベース)ではSQLを使って、検索したいデータを柔軟に検索することが可能です。

SQLの使い方については当社の別ブログにまとめておりますので、是非ご参照ください。
SQLの基本【まとめ】

整合性を完全に保てる

RDBMS(リレーショナルデータベース)にはもう一つ特徴があり、トランザクションという機能を使ってデータの整合性を完全に保つことができます。例えば、「名義」と「残高」を持つ以下の口座テーブルがあったとします。

口座テーブル

名義 残高
Aさん 100,000
Bさん 200,000

BさんからAさんに5万円の振込を行う場合を考えて以下の順番でデータを更新していくとします。

  • ①Bさんの残高から5万円減らす
  • ②Aさんの残高に5万円増やす

この順番で処理して①が成功した後に②が失敗してしまった場合、Bさんの残高のみが減ってしまい不整合な状態になってしまいます。

そこでトランザクションを使うと①と②の処理を一纏めすることで、一纏めにした処理が全て成功する、又は全て失敗すると整理できます。
上記の例だと②が失敗した場合に①の処理をロールバック(戻す)ことで、不整合な状態になることを防ぎます。

NoSQLとは

NoSQL(Not Only SQL)は非リレーショナルなデータベースを管理するシステムの大まかな分類です。 大まかな分類の中には例えば以下のようなデータモデルを扱うDBMSが含まれています。ざっくり言うとRDBMS(リレーショナルデータベース)のように関係モデルを扱わなければNoSQLになります。

  • キーバリュー型
  • カラム指向
  • ドキュメント指向
  • グラフ指向

NoSQLはその名前の通りSQLを使わないのですが、SQLや関係モデルを使わないことでRDBMS(リレーショナルデータベース)の弱点を解消する特徴を持っています。

NoSQLの特徴

処理が速い

RDBMS(リレーショナルデータベース)は柔軟な検索が可能ですが、それを実現するために検索速度が比較的遅いという弱点が挙げられます。
柔軟な検索に対応するために複雑な検索処理がとられているので、少ないデータであればそこまで遅くはならないのですが多くなってくると遅くなってしまいます。

そこで、NoSQLを使えばこの問題を解消することができます。
例えば、画像ファイルのようなファイル名と画像データのようなシンプルなデータを扱うシステムがあるとします。キーバリュー型DBMSを使うと一致するキーのみの検索を行うため、シンプルな検索処理で高速な検索を行うことができます。

キーバリュー型DBMSのデータモデルのイメージ

キー バリュー
ファイル名A ファイルデータA
ファイル名B ファイルデータB
拡張性が高い

RDBMS(リレーショナルデータベース)には、データ形式やサイズの変化に対応しづらいという弱点もあります。
RDBMS(リレーショナルデータベース)のテーブルは列に項目を定義してデータ形式を定めますが、あとからデータ形式を変更する場合には

  • テーブルにあるすべてのデータに項目を追加する必要がある
  • 関係する他のテーブルへの影響を考えたりする必要がある

と、変更するのがかなり大変です。

この問題もNoSQLを使えば解消することができます。
例えば、ドキュメント指向DBMSRDBMS(リレーショナルデータベース)のテーブルのような決まったデータ構造は持たずにデータごとに別々の項目を持つため、項目を増やす場合でも他のデータへの影響を考えずに自由に追加することができます。以下の例ではメール2のデータでメール1にはなかったccの項目を増やしています。

ドキュメント指向DBMSのデータモデルのイメージ

{
  "title": "メール1",
  "from": "Aさん",
  "to": "Bさん"
}
{
  "title": "メール2",
  "from": "Bさん",
  "to": "Aさん",
  "cc": "Cさん"
}

また、データのサイズが増えた場合にはサーバのデータ容量を増やす必要がありますが、サーバ単体のデータ容量を増やすよりも別のサーバを増やす方が簡単です。しかし、現在のRDBMS(リレーショナルデータベース)では基本的に複数のサーバがあってもデータを複製することしかできず、それぞれのサーバで別のデータを持つことができないため、サーバを増やしてデータ容量を増やすことが難しいです。
そこで、分散データベースという仕組みを持っているNoSQLでは複数のサーバにあるデータを一つのデータベースのデータとして扱えるようにすることができるため、サーバを増やすことでデータベースに保存可能なデータを簡単に増やすことができます。

NoSQLの方がRDBMSより優れている?

このようにNoSQLにはRDBMS(リレーショナルデータベース)と比較して優れている点がありますが、すべてのRDBMS(リレーショナルデータベース)がNoSQLに置き換わるかというと現実そんなことはないです。 それは、NoSQLにもRDBMS(リレーショナルデータベース)が得意としている柔軟な検索が苦手だったり、整合性を保つのが難しい弱点があるためです。
RDBMS(リレーショナルデータベース)とNoSQLにはそれぞれ得意なこと、苦手なことがあるので、用途によって使い分けたり、併用するのが現在の主流だと思います。

RDBMSDBMSについて まとめ

データベースを管理するDBMS、リレーショナルデータベースを管理するRDMBS、非リレーショナルデータベースを管理するNoSQLについてまとめてみましたがいかがでしたでしょうか。
どのDBMSも触ったことがない方は、まずはどれか一つを使ってみることをオススメします。

参考文献

冒頭の画像について:Photo on iStock


  • エンジニア中途採用サイト
    ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
    ご興味ありましたら是非ご確認をお願いします。
    20210916153018
    https://career-recruit.rakus.co.jp/career_engineer/

  • カジュアル面談お申込みフォーム
    どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
    以下フォームよりお申込みください。
    forms.gle

  • イベント情報
    会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください! rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.