プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • NoSQL
  • 【データ設計】ドキュメントDBの特徴、ユースケース
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【データ設計】ドキュメントDBの特徴、ユースケース

11.21

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

特徴

  • JSONをデータモデルとして格納するデータベース
  • キーや値で絞り込むことができる。
  • 負荷が増えてきた場合は簡単にスケールアウトすることができるので性能の心配はない。

ドキュメントDBは、KVSの特徴に加えてJSONを扱う機能が豊富です。スキーマレスである特性も相まって開発効率アップが期待できます。

スキーマレスとは?

データ構造を事前に定義する必要がなく、値の型が固定されないこと。RDBでは逆に完全に型を固定する。

突然データ構造の変化があってもJSONをそのまま格納できるのでデータロストのせずに貯めて置ける。

スキーマが変わったとしてもとりあえず貯めておける。必要になったらアプリケーションを修正すれば良い。

これによりスキーマが突然変わってからデータを取得できないというリスクを低減できる。

高速な開発が可能

昨今のビジネス要件として高速にプロトタイプを開発することが望まれている。

ドキュメントDBとスクリプト言語を用いることによりRDBとコンパイル言語を用いる開発に比べて非常に高速に開発ができます。

テーブル定義することもなく、データの挿入ができる。

ORマッパーも使う必要がない。

そのままオブジェクトや配列が入っているので、わざわざオブジェクト(プログラム言語で処理する形)に変える必要がありません。取得したらそのままプログラム内でデータ処理が可能になります。

ユースケース

外部のデータを集めてきて付加価値をつけたいケース(例:TwitterAPIのデータを集める)

TwitterAPIを使うのは誰がも考えつくでしょう。

データ項目が多い。(100個くらいもある。)

単純に定義量が大変です。配列構造になっている箇所は、正規化してテーブルの数も増やさないといけない。

列定義が大変

キーがわかっても、値の型がたくさんありすぎる。英語で書かれたAPI仕様書を読めばまあ分かるが。

必要な情報だけ格納するのはどうか?

RDBだと後から必要な情報が足りてないことに気づいた場合に列を追加するのが大変。

JSONの特性上難しい部分もある。

JSONは1:多の構造が入れ子になって格納される。JSONのデータの型や値の型は同じであるとは限らない。これを表形式に無理やり変換しようとするのは難しい部分がある。

RDBでは大量データ処理に耐えられない。

インターネット上のサービスは秒間で何百件ものデータ処理がなされます。RDBにそんな件数を一度に登録しようとするとすぐにタイムアウトしてしまいます。

業務システムではデータ量の予測を立てやすいが、インターネットのデータは全人類が対象になるのでデータ量の予測が難しい。

変更に弱い

後からAPIの仕様変更があってカラムが一つ減った場合に登録エラーになる。(まあ、昨今のAPIであればパスにバージョンの記載があって、特定バージョンを指定できるようになっているケースもある。)

RDBでALTER TABLEコマンドによりスキーマ変更が行えるが、膨大なデータベースに対してこのコマンドを発行すると非常に時間がかかるし、データベースに莫大な負荷がかかります。(ALTER TABLEを打つたびにシステムを停止させなければならなくなる。)

結論

このケースではドキュメントDBを使う。深い階層を持つデータをRDBにすると結合の多用になり大変だが、JSONであれば一つのJSONの中に階層構造まで格納することができる。

要は、自分の手の内にはない外部のデータスキーマを定義することは簡単ではないのです。

大量のログを集めておき価値ある情報を提供したいケース

注意点

スキーマ管理(ER図の発行、全ての型を定義したドキュメントのメンテナンス)自体はするべき。とりあえずプロトタイプで高速に開発して欲しいという要求があるのであれば、スキーマ管理は不要だが、ちゃんと本番アプリケーションとして運用する実装をする場合はしっかりとスキーマ管理はするべき。

スポンサーリンク
  • 2021 11.21
  • miyabisan2
  • コメントを書く
  • NoSQL
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 10.03

    【設計】RDBの基本思想(ソートが苦手)、大きなデータをソートしたい場合

  2. 2023 06.09

    【NoSQL】MongoDBの基本

  3. 2021 09.20

    【NoSQL】概要(ビッグデータ、活用事例、本番運用時の注意)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【AWS】「ElasticCache」、「Dynamo…

【Redis】データ型の種類と用途、ユースケース(キャ…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー