RDBMSとNoSQLを学ぶ。

データベースの違いがわからない。rails newする時のデータベースって何がいいの、、

分からないのなら調べちゃおう。

という事で、今回は個人開発によく使われているMySQLPostgreSQL特徴についてまとめていきたい。

データベースとは

データベースとは「構造化した情報の集合体 」であり、データベース管理システム(DBMS)によって管理されます。データベースは構造によって主に「階層型」「ネットワーク型」「リレーショナル型」に分けられます。

今まで学んできたのは、RDBMSというリレーショナルデータベースだった。

RDBMSでは、正規化されたデータベースを関連づけるために、主キーと外部キーという概念が使われている。

Oracle Databaseとは?世界シェアNo.1のRDBMS!

それぞれの特徴は?

MySQL

高速で信頼性が高く、汎用的なリレーショナルデータベース管理システム

世界シェアがOracle Databaseに続いてNo.2のRDBMS

高い堅牢性と安全性に定評がある。

世界で多く使われているということは、それだけ文献や知見がネットに転がっていることを暗に示唆しているので、自身でアプリを作成する時にエラーと対峙しても大抵先人がエラーの解決方法をTeratailやSack Overflowに乗っけているそう。

だから、個人開発PFに使われることが多い。

Postgresql

複雑で大量のデータ操作を行うための最適なソリューション。WEBアプリケーションと相性がいい。

オブジェクトリレーショナルなので高度な同時実行性を持ち、NoSQLをサポートしている。

MySQL(RDBMS)は1台のサーバーで設計されているのに対し、PostgreSQL(NoSQL)は処理能力を向上させるために対応するサーバーの数を増やす際のスケールアウトに対応している。なので、大量データ操作に強い。

https://pgdash.io/blog/postgres-features.html

NoSQLって?

Not only SQLの略。関係データベース管理システム (RDBMS) 以外のデータベース管理システムを指すおおまかな分類語

下記のような特徴を持つ

・キーバリュー型:キーとバリューのみのシンプルな組み合わせのモデル

・カラム指向型:キーバリュー型にカラムの概念をもたせたモデル

・ドキュメント指向型:JSONXML形式で記述されたドキュメントの形で管理するモデル

・グラフ指向型:データとデータ間のつながりを管理するモデル

ちなみにRedisはNoSQL。

NoSQLの種類

NoSQLは下記のように分類される。

  • どのような形でデータを持つか (データモデル)
  • どのように分散してデータを持つか (アーキテクチャ)

データモデル

NoSQLのデータモデルには大別して次の4つがある。

  • キー・バリュー型
    • Key : Valueを単位としてデータを格納する。
    • シンプルで応答が早い。
  • カラム指向型
    • 一般の行指向型DBと同様に表の構造を持ちつつ、カラム単位でデータを保持する。
    • 行指向では苦手な列単位の大量集計、大量更新が得意。
  • グラフ型
    • ノード、リレーションシップ、プロパティによって定まるデータを単位とし、全体でグラフを形成する。
    • グラフ型の名前の通り、Facebookの知り合い機能等で有効に利用できる。
  • ドキュメント指向型
    • JSONXMLのような構造を持ったドキュメントを単位としてデータを格納する。
    • スキーマレスで格納できる。

アーキテクチャ

アーキテクチャは次の3種類。

  • マスタ型

    • マスタ型では分散データベースクラスタを形成するノードのうち、メタ情報などを管理するマスタが存在する。
    • マスタがクラスタの状態を管理するため、マスタに対する障害耐性が低かったり、マスタの処理性能がクラスタ全体の性能に影響を与えたりする。
  • P2P

    • P2P型ではマスタ型と異なり、クラスタを構成するノードが全て等価な役割を持つ。
    • 全ノードで等価なため、障害耐性の偏りがなく、スケールアウトがほぼリニアに実現する場合が多い。
    • ただし、ネットワーク分断が発生した場合にはいわゆる スプリットブレイン の危険性がある。
  • イネーブラ型

    • 正確にはアーキテクチャではないけれどEnablerということで、他者との組み合わせによって効果を発揮する型。
    • オンメモリ型はデータの永続性という点でデータベースと呼ぶには不十分なものの、NoSQLの持つ応答性の遅さを改善することができる。

    (引用:「NoSQLについて勉強する」 https://qiita.com/t_nakayama0714/items/0ff7644666f0122cfba1)

 

railsと相性がいいのは?

railsというより、個人開発程度の大規模ではない開発をするのであれば、データ量が肥大化しすぎる恐れがないので、RDBMSであるMySQLで事足りると思う。

で、どれ使う?

PostgreSQLMySQLの使い分け方が下記のようにまとめられています。

  • 複雑なクエリや大規模なデータベースを扱うことができる機能豊富なデータベースが必要か?複雑なクエリや大規模なデータベースを扱うことができる機能豊富なデータベースが必要ですか?PostgesSQLが良いでしょう。

  • 比較的簡単に設定・管理でき、高速で信頼性が高く、ナレッジが普及しているシンプルなデータベースが必要ですか?MySQLが良いでしょう。

ナレッジが普及している方がエラーと対峙した時にググる力で対応できそうだからMySQLを採用することにする。

3種類のデータベースを徹底解説!(PostgreSQL、MySQL、SQLite)|BigData tools

https://bigdata-tools.com/sql-db/

PostgreSQL vs MySQL: その違いとは