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&Java)

MySQL触りだして3年ぐらいたつんですがいまだに整理できないことが多いです。(特に日付がらみ) ちょっとJavaのネタと合わせて整理しておこうかなーと思います。 Contents1 MySQLの日付 …

no image

MySQL小ネタ テーブル単位のリストア・SQLの小ネタ(バックスラッシュの検索)

MySQLのちょい小ネタ。 Contents1 テーブル単位でバックアップ&リストア2 バックスラッシュの入ったSQLについて テーブル単位でバックアップ&リストア 1 通常のdump(データベース単 …

no image

インデックスについて(SQLServer)

DBのインデックスについて、今までぼんやりと検索条件の効率化についてはしっていたのですが、もう少し掘り下げて理解する必要があるなと思い、メモります。 SQLServerのインデックスについてすごくまと …

no image

EXISTSと集合

前回に引き続きEXISTSの問題です。 下記のようなテーブル(projects)があり、 project_id | step_nbr | status ———&#8 …

no image

論理設計のアンチパターン

今回からは論理設計のアンチパターンについて。 やってはいけない設計のパターンですね。これはまわりがやっていると気づかずにやっている可能性があるのでしっかりメモしておきたいです。 Contents1 非 …

アーカイブ