skillup

技術ブログ

Database

NoSQLについて

投稿日:

NoSQLについて。

現在の案件ではmongoDB(NoSQL)を使っていますが、NoSQL自体が始めてだったので、これを機に少し掘り下げてみようとおもいます。

NoSQLとは?

NotOnlySQLの略のようです。

私はRedisぐらいしかしらなかったんですよね・・てっきりキャッシュで使うようなものばっかりだと思っていたんですが、今の案件ではRDBの代わりにがっつり使ってます。

NoSQLのタイプ分け

Redisのようなキーバリュー系以外にもドキュメント指向データベースというものがあるようです。

用途を分けると・・・

キーバリューストア

基本的にはkeyValue形式になっているデータの一時保存の高速な取り出しとして使われることが多いようです。

セッション管理、キャッシュ、リアルタイムデータの取り扱いなどですかね・・・

ドキュメント指向データベース

今回やっているmongoがこのケースです。先ほどのキーバリューだと補佐的な働き方になるかと思いますが、

メリット
  • ユニークキーはあるものの、スキーマが固定されておらず、フィールドの変更が容易
  • 上記のような特徴からJSONのような木構造のデータをそのまま保持できる
  • 拡張性が容易でデータ量の増加に強い
  • リアルタイム処理が得意
  • レプリケーション機能があるため、障害耐性が強い(データの同期が容易)
  • RDBより安い

などが挙げられます。

逆に、以下のようなデメリットがあります。

デメリット
  • トランザクションができないため(=一部の機能?)、複数のテーブルを更新して整合性を担保することはできない
  • JOINの代わりになるlookupという機能はあるが、複雑なJOINなどができない

全体的にデータの整合性よりは高速なレスポンスや耐久性に強いシステム向けなようです。

向いている例としては、

  • リアルタイムにパラメータが変わるため高速な書き込みとクエリレスポンスなどが要求されるゲーム
  • ログ操作
  • モバイル系のアプリケーション
  • 地理空間データのような複雑なデータ

などがあげられるようです。

逆に

  • 金融系など取引などで複数テーブルの整合性が非常に大事なシステム
  • 正規化や複雑なクエリ(主にJOIN)を多用するようなシステム
  • 厳格なスキーマ要件のあるシステム(カラムのフォーマットなどが厳密なもの)

などは向いていないため、RDBのほうが適しているようです。

参考リンク

MongoDB: ドキュメント指向型NoSQLの魅力を解説する記事

ドキュメントDBかリレーショナルDBどっち使う?

データ構造など

下記リンクがあまりにもわかりやすく綺麗にまとまっていたのでリスペクトの意味もこめて載せておきます。

MongoDBのデータ構造な簡単な操作など

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

MySQLの大文字、小文字問題について

MySQLでテーブルを作る際にカラムに重複を許さない制約(unique)を振ることがあると思います。 数字の場合は問題ないのですが、文字列の場合、なんと英語の大文字と小文字が区別されません。 つまりa …

no image

SQL基礎 case式について

case式に関して。 集約系の関数では複雑な処理を一気に行うことができる。 case式は1列のみ有効。複数の列に対して行うことはできない。 case ~ when ・・・thenではwhenが評価され …

no image

論理設計のグレーノウハウ サロゲートキー

前回まではアンチパターンやバッドノウハウについて学習してきましたが、今回はグレーノウハウについて特集します。 グレーノウハウとは読んで字のごとくホワイトともブラックとも言えないという手法ですね。 つま …

no image

SQLの高速化について&explain

本日はSQLの高速化について。 高速化といってもさまざまなテクがあると思うのですが、代表的な考え方に関して。 Contents1 高速化に関して1.1 index1.2 ディスクアクセスを減らす1.3 …

no image

JPAでのリレーション(アノテーション使用)

JPAでリレーションを管理するとき、最初はアノテーションでやろうとしたんですが、結局やり方がわからずコンストラクタ式をかいて対処してました。 JPAでのリレーションに関して 外部キー制約があるやり方は …

アーカイブ