17
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NoSQL入門

Last updated at Posted at 2019-05-27

はじめに

こちらの記事はNoSQLを勉強した時の備忘録です。RDBMSとの違いや、NoSQLを使う事によるメリットなどを記載したいと思います。

NoSQLとは何か

NoSQL = Not only SQLの略。

関係データベース管理システム(以下RDBMS)以外のデータベース管理システムの総称です。
Untitled Diagram.png

NoSQLの特徴

スキーマレス
NoSQLはスキーマを定義しないでデータを格納することができます。
RDBMSにおけるスキーマとは、データベースの構造です。以下はwikipediaからの引用です。

関係データベースでは、スキーマは関係 (表) と関係内の属性 (フィールド) 、属性や関係の関連の定義である。
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E_(%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9)

結合が無い
他データとの関係を持たないため、NoSQLには結合がありません。
結合が無いことによってパフォーマンスの向上が見込めます。

トランザクションが無い
RDBMSではおなじみのトランザクションが無い場合が多いです。
トランザクションは、分離できない複数の処理を1つにまとめたものです。トランザクションによって、複数の処理を行った場合のデータの整合性を正しく保ちます。

NoSQLの種類

NoSQLの種類は大きく分けてデータモデルとアーキテクチャがあるようです。

データモデルによる違い

データをどう保管するかの違いです。

キーバリューストア型(KVS)

キーとそれに対応する値を格納するタイプ。

key value
1 aaaa
2 bbbb
3 cccc

代表例

  • redis
  • memchached
  • dynamodb

ドキュメント型

JSON形式に代表されるような階層構造を持ったデータを取り扱う。

[
  {
    "名前": "鈴木",
    "情報": { "生年月日":"1990年1月20日", "性別": "男" },
    "趣味" : [ "映画", "音楽", "ドライブ" ]
  },
  {
    "名前": "佐藤",
    "情報": { "生年月日":"1990年5月1日", "年齢": 29, "住所":"東京都豊島区" },
    "趣味": [ "ビリヤード", "映画" ]
  },
  {
    "名前": "田中",
    "情報" : { "身長":172, "出身": "東京"},
    "職歴": [ "SE", "営業" ]
  }
]

代表例

  • MongoDB
  • CouchDB

カラム型

1つのkeyに対して、複数のカラムを持たせることができ、リレーショナルモデルに近いデータ構造を持つことが出来る。

test.png

代表例

  • Cassandra
  • HBase

グラフ型

データをグラフで表現するタイプ。
Untitled Diagram (1).png

代表例

  • Neo4j

アーキテクチャによる違い

マスタ型

マスタノードが配下のノードを管理するパターン。マスタノードが停止するとシステムも停止する。
RDBMSでもマスター/スレーブの構成があるが、あれと同じようなものだと認識しています。

Untitled Diagram (2).png

P2P型

配下などの概念がなく対等にお互いを管理する。
RDSのMultiAZのような機構だという認識。

Untitled Diagram (3).png

なぜNoSQLを使うのか

NoSQLのメリットについてまとめてみたいと思います。

非構造化データを格納するのに向いている

NoSQLは非構造化データを格納するのに向いています。それに対して、RDBMSは構造化データを取り扱うのに向いています。

非構造化データ (Unstructured Data) とは、構造定義されておらず、主に関係モデルにうまく適合しないデータモデルに分類されるデータを指す。
https://ja.wikipedia.org/wiki/%E9%9D%9E%E6%A7%8B%E9%80%A0%E5%8C%96%E3%83%87%E3%83%BC%E3%82%BF

非構造化データに分類されるのは以下のようなものがあります。

  • XMLファイル
  • JSONファイル
  • テキストファイル
  • 画像ファイル

故に、非構造的なデータであるビッグデータを扱うのに向いているでしょう。

パフォーマンスの性能が良い

NoSQLはそのシンプルの作りから、RDBMSに比べ高速です。NoSQLにはトランザクションや結合がないのもその要因となっています。

特にキーバリュー型は、非常に高速な読み書きが可能になります。

スケールアウトがしやすい

スケールアウトは、システムを動作させるサーバの台数を増やすことで、処理能力を高めることです。

RDBMSでは、データの整合性が必要とされるため、サーバの台数を増やすと、それだけ整合性が保てなくなる可能性が高くなります。

一方、NoSQLでは、データの整合性を考えず、柔軟で高速な処理を実現しています。整合性を気にしなくても良いということはスケールアウトもしやすいということだと認識しています。

NoSQLのデメリット

RDBと比べた場合のNoSQLのデメリットについて書いていこうと思います。

整合性が担保されない

NoSQLの場合、結合をサポートしていないものも存在し、データのコピーが必要になり、冗長性が生まれやすくなっています。
その中で、データの更新などが発生した場合、一方では更新がされ、もう一方では更新が漏れていたということは往々にして存在します。

その場合、データの一貫性がない状態に陥り、どちらのデータが正しいのか判別が困難になります。

検索能力が比較的低い

NoSQLでは、結合やトランザクションなどの仕組みがないものが多いので、複雑な検索に耐えられないというデメリットも存在します。

参考サイト

17
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?