ドキュメントデータベースには、次のようなさまざまなメリットがあります。
- 開発者がすばやく簡単に操作できる直感的なデータモデル
- アプリケーションの要件の変化に合わせてデータモデルを進化させられる柔軟なスキーマ
- 水平方向にスケールアウトする能力
これらのメリットにより、ドキュメントデータベースは、さまざまなユースケースや業界で利用できる汎用データベースとなっています。
ドキュメントデータベースは、非リレーショナル(NoSQL)データベースと見なされています。ドキュメントデータベースでは、固定された行と列ではなく、柔軟なドキュメントにデータを保存します。ドキュメントデータベースは、表形式のリレーショナルデータベースに代わる最も一般的な選択肢です。 NoSQL データベースについて詳しくご覧ください。
目次:
- ドキュメントとは何ですか?
- ドキュメントデータベースの主な機能は何ですか?
- ドキュメントデータベースと関係データベースの違いは何ですか?
- ドキュメントはテーブルと比べてどれほど扱いやすいのでしょうか。
- ドキュメントデータベースと他のデータベースの関係は何ですか?
- リレーショナルデータベースでJSONを使用するだけではなぜ不十分なのでしょうか。
- ドキュメントデータベースの長所と短所は何ですか?
- ドキュメントデータベースのユースケースにはどのようなものがありますか?
ドキュメントとは何ですか?
ドキュメントは、ドキュメントデータベース内のレコードです。ドキュメントには通常、1つのオブジェクトに関する情報と、それに関連するメタデータが保存されます。
ドキュメントは、フィールドと値のペアとしてデータを保存します。値には、文字列、数値、日付、配列、オブジェクトなど、さまざまなデータ型や構造を使用できます。ドキュメントは、JSON、 BSON、XML などの形式で保存できます。
以下は、Tom という名前のユーザーに関する情報を保存した JSON ドキュメントです。
コレクション
コレクションは、ドキュメントのグループです。コレクションには通常、類似した内容のドキュメントが保存されます。
ドキュメントデータベースは柔軟なスキーマを採用しているため、コレクション内のすべてのドキュメントが同じフィールドを持つ必要はありません。一部のドキュメントデータベースではスキーマバリデーションが提供されており、必要であればスキーマを固定できます。
上記の例では、Tom に関する情報を含むドキュメントを users という名前のコレクションに保存できます。他のユーザーに関する情報を保存するために、users コレクションにさらにドキュメントを追加することができます。たとえば、Donna に関する情報を保存した次のドキュメントは、users コレクションに追加できます。
Donna のドキュメントには、Tom のドキュメントと同じフィールドが含まれていないことに注意してください。 users のコレクションは、各ユーザーに存在する情報を保存するために柔軟なスキーマを活用しています。
CRUD 操作
ドキュメントデータベースには通常、開発者が CRUD(作成、読み取り、更新、削除)操作を実行できる API またはクエリ言語が用意されています。
- 作成(Create): データベースにドキュメントを作成できます。各ドキュメントには一意の識別子があります。
- 読み取り(Read): データベースからドキュメントを読み取ることができます。API またはクエリ言語を使用すると、開発者は一意の識別子またはフィールド値を使用してドキュメントを検索できます。読み取りパフォーマンスを向上させるために、データベースにインデックスを追加できます。
- 更新(Update): 既存のドキュメントは、全体または一部を更新できます。
- 削除(Delete): データベースからドキュメントを削除できます。
ドキュメントデータベースの主な機能は何ですか?
ドキュメントデータベースには、次のような主な機能があります。
- ドキュメントモデル: データはドキュメントに保存されます(テーブルやグラフなどの構造にデータを保存する他のデータベースとは異なります)。ドキュメントは主要なプログラミング言語のオブジェクトに対応しているため、開発者はアプリケーションを迅速に開発できます。
- 柔軟なスキーマ: ドキュメントデータベースは柔軟なスキーマを採用しているため、コレクション内のすべてのドキュメントが同じフィールドを持つ必要はありません。一部のドキュメントデータベースではスキーマ検証がサポートされており、必要に応じてスキーマを固定できます。
- 分散性と耐障害性: ドキュメントデータベースは分散型であり(水平方向のスケールアウトとグローバルなデータ分散が可能)、高い耐障害性を備えています。ドキュメントデータベースは、レプリケーションによって耐障害性を実現します。
- API またはクエリ言語によるクエリ: ドキュメントデータベースには、開発者がデータベースに対して CRUD 操作を実行できる API またはクエリ言語が用意されています。開発者は、一意の識別子またはフィールド値に基づいてドキュメントをクエリできます。
ドキュメントデータベースと関係データベースの違いは何ですか?
ドキュメントデータベースとリレーショナルデータベースを区別する主な要素は、次の 3 つです。
- データモデルの直感的な分かりやすさ: ドキュメントはコード内のオブジェクトに対応しているため、より自然に扱えます。データを複数のテーブルに分割したり、高コストな JOIN を実行したり、別途 Object Relational Mapping(ORM)レイヤーを導入する必要はありません。一緒にアクセスされるデータはまとめて保存されるため、開発者が記述するコードは少なくなり、エンドユーザーはより高いパフォーマンスを得られます。
- JSON ドキュメントの普及: JSON は、データ交換およびデータ保存の標準として広く普及しています。JSON ドキュメントは軽量で、言語に依存せず、人間が読みやすい形式です。ドキュメントは、他のすべてのデータモデルを包含するスーパーセットであるため、開発者は、リッチオブジェクト、キーと値のペア、テーブル、地理空間データ、時系列データ、グラフのノードやエッジなど、アプリケーションの要件に応じた形でデータを構造化できます。
- スキーマの柔軟性: ドキュメントのスキーマは動的で自己記述型であるため、開発者が事前にデータベースでスキーマを定義する必要はありません。フィールドはドキュメント間で異なる場合があります。開発者はいつでも構造を変更できるため、中断されるスキーマ移行を回避できます。一部のドキュメントデータベースはスキーマバリデーションを提供しているため、オプションでドキュメント構造を制御するルールを追加できます。
NoSQL データベースとリレーショナルデータベースの違いに関する詳細をご覧ください。
ドキュメントはテーブルと比べてどれほど扱いやすいのでしょうか。
開発者は一般に、テーブル内のデータよりも、ドキュメント内のデータのほうが簡単かつ直感的に扱えると考えています。ドキュメントは、主要なプログラミング言語のデータ構造に対応しています。開発者は、データを保存する際に関連データを複数のテーブルへ手動で分割したり、取得時に再び結合する必要はありません。また、データを操作するために ORM を使用する必要もありません。代わりに、アプリケーション内でデータを直接簡単に操作できます。
Tom という名前のユーザーのドキュメントをもう一度見てみましょう。
ユーザー
Tom に関するすべての情報は、1 つのドキュメントに保存されています。
それでは、同じ情報を関係データベースに保存する方法を考えてみましょう。まず、ユーザーに関する基本情報を保存するテーブルを作成します。
ユーザー
ユーザーは複数の対象に「いいね」を付けることができます(つまり、ユーザーと「いいね」の間には 1 対多の関係があります)。そのため、ユーザーの「いいね」を保存するテーブルを新たに作成します。「いいね」テーブルには、Users テーブルの ID 列を参照する外部キーがあります。
「いいね」
同様に、ユーザーは複数のビジネスを運営できるため、ビジネス情報を保存する Businesses テーブルを新たに作成します。Businesses テーブルには、 Users テーブルの ID 列を参照する外部キーがあります。
企業
この簡単な例では、ユーザーに関するデータは、ドキュメントデータベースでは 1 つのドキュメントに保存できますが、リレーショナルデータベースでは 3 つのテーブルに分けて保存することになります。ドキュメントデータベースでユーザーに関する情報を抽出または更新する場合、開発者は JOIN を使用せずに 1 つのクエリを記述するだけで済みます。データベースの操作はシンプルであり、データモデリングも直感的に行えます。
詳しくは、「SQL から MongoDB への用語と概念のマッピング」をご覧ください。
ドキュメントデータベースと他のデータベースの関係は何ですか?
ドキュメントモデルは、キーと値のペア、リレーショナル、オブジェクト、グラフ、地理空間など、他のデータモデルを包含するデータモデルです。
- キーと値のペア は、ドキュメント内のフィールドと値を使用してモデル化できます。ドキュメント内のすべてのフィールドにインデックスを作成できるため、開発者はデータをより柔軟に検索できます。
- リレーショナルデータは、埋め込みドキュメントや配列を使用して関連データを 1 つのドキュメントにまとめることで、異なる方法(より直感的だと考える人もいます)でモデル化できます。関連データを別々のドキュメントに保存し、データベース参照を使用して関連付けることもできます。
- ドキュメントは、主要なプログラミング言語のオブジェクトに対応しています。
- グラフ のノードやエッジは、ドキュメントとしてモデル化できますエッジは、データベース参照を使用してモデル化することも可能です。グラフクエリは、 $graphLookupなどの演算子を使用して実行できます。
- 地理空間データは、ドキュメント内の配列としてモデル化できます。
豊富なデータモデリング機能を備えているため、ドキュメントデータベースは、さまざまなユースケースのデータを保存できる汎用データベースです。
リレーショナルデータベースでJSONを使用するだけではなぜ不十分なのでしょうか。
ドキュメントデータベースによって開発を迅速に進められるようになったことを受け、多くのリレーショナルデータベースで JSON のサポートが追加されました。しかし、JSON データ型を追加しただけでは、JSON をネイティブにサポートするデータベースのメリットは得られません。なぜでしょうか。リレーショナルデータベースのアプローチは、開発者の生産性を向上させるどころか、低下させてしまうためです。開発者は、上記のような課題に対処する必要があります。
独自の拡張機能
ドキュメントを扱うには、ベンダー固有のカスタム SQL 関数を使用する必要があります。こうした関数は多くの開発者になじみがなく、一般的な SQL ツールでも利用できません。さらに、低レベルの JDBC/ODBC ドライバーや ORM を組み合わせることで、開発プロセスは複雑になり、生産性の低下につながります。
限られたデータ型の扱い
JSON データを、MongoDB のようなネイティブなドキュメントデータベースがサポートする豊富なデータ型ではなく、単純な文字列や数値として扱うため、データの計算、比較、並べ替えが複雑になり、エラーも発生しやすくなります。
不十分なデータ品質と固定的なテーブル
リレーショナルデータベースでは、ドキュメントのスキーマを検証する機能がほとんど提供されていないため、JSON データに対する品質管理を十分に行えません。また、通常の表形式データについてはスキーマを定義する必要があり、アプリケーションの機能が進化してテーブルを変更するたびに追加のオーバーヘッドが発生します。
低パフォーマンス
多くのリレーショナルデータベースでは JSON データに関する統計情報を保持していないため、クエリプランナーはドキュメントに対するクエリを最適化できず、開発者によるクエリのチューニングも制限されます。
ネイティブなスケールアウト機能がない
従来のリレーショナルデータベースでは、ワークロードの増加に応じてデータベースを複数のインスタンスに分割(シャーディング)するネイティブな機能は提供されていません。その代わりに、アプリケーション層でシャーディングを実装するか、高価なスケールアップシステムに依存する必要があります。
ドキュメントデータベースの長所と短所は何ですか?
ドキュメントデータベースには、次のような多くの利点があります。
- ドキュメントモデル は広く普及しており、直感的で、迅速なソフトウェア開発を可能にします。
- 柔軟なスキーマ により、アプリケーションの要件の変化に応じてデータモデルを変更することが可能です。
- ドキュメントデータベースには、開発者がデータを容易に操作できる 豊富な API とクエリ言語 が用意されています。
- ドキュメントデータベースは 分散型 であり(水平方向のスケールアウトとグローバルなデータ分散が可能)、 高い耐障害性を備えています。
これらの特長により、ドキュメントデータベースは汎用データベースとして優れた選択肢となります。
ドキュメントデータベースの弱点としてよく挙げられるのは、多くの製品がマルチドキュメント ACID トランザクションをサポートしていないことです。ドキュメントモデルを活用するアプリケーションの 80%-90% は、マルチドキュメント ACID トランザクションを必要と しない と考えられます。
なお、MongoDB などの一部のドキュメントデータベースでは、マルチドキュメント ACID トランザクションがサポートされています。
詳しくは 「ACID トランザクションとは」 をご覧ください。ドキュメントモデルによってマルチドキュメントトランザクションがほとんど不要になる理由や、必要となるまれなケースで MongoDB がどのようにトランザクションをサポートしているかについて説明しています。
ドキュメントデータベースのユースケースにはどのようなものがありますか?
ドキュメントデータベースは、トランザクション処理と分析処理の両方に対応する、さまざまなユースケースで利用できる汎用データベースです。
- シングルビューまたはデータハブ
- 顧客データ管理とパーソナライズ
- モノのインターネット(IoT)と時系列データ
- 製品カタログとコンテンツ管理
- 支払い処理
- モバイルアプリ
- メインフレームオフロード
- 運用アナリティクス
- リアルタイム分析
まとめ
ドキュメントデータベースでは、直感的で柔軟なドキュメントデータモデルを使用してデータを保存します。ドキュメントデータベースは、さまざまな業界の幅広いユースケースで利用できる汎用データベースです。
MongoDB の開発者向けデータプラットフォーム MongoDB Atlas でデータベースを作成して、ドキュメントデータベースを使い始めましょう。Atlas には、ドキュメントモデルを試したり、詳しく学んだりできる、充実した無料階層が用意されています。
