ドキュメント指向データベース、またはドキュメントストアは、半構造化データとも呼ばれるドキュメント指向情報を保存、取得、管理するために設計されたコンピュータプログラムおよびデータストレージシステムです。[ 1 ]
ドキュメント指向データベースはNoSQLデータベースの主要なカテゴリの一つであり、「ドキュメント指向データベース」という用語の人気はNoSQLという用語自体の使用とともに高まっています[ 2 ] 。XMLデータベースはドキュメント指向データベースのサブクラスであり、 XMLドキュメントの処理に最適化されています。グラフデータベースも同様ですが、リレーションシップという別のレイヤーが追加されており、これによりドキュメント間のリンクが可能になり、高速なトラバーサルが可能になります。
ドキュメント指向データベースは、本質的には、NoSQLデータベースの別の概念であるキーバリューストアのサブクラスです。その違いはデータの処理方法にあります。キーバリューストアでは、データはデータベースにとって本質的に不透明であると考えられていますが、ドキュメント指向システムでは、ドキュメントの内部構造に基づいてメタデータを抽出し、データベースエンジンはそれをさらなる最適化に使用します。システム内のツールによってこの違いは無視できる場合が多いですが、[ a ]概念的には、ドキュメントストアは最新のプログラミング技術を用いてより豊かなエクスペリエンスを提供するように設計されています。
ドキュメントデータベース[ b ]は、従来のリレーショナルデータベース(RDB)とは大きく異なります。リレーショナルデータベースは通常、プログラマーが定義した個別のテーブルにデータを保存し、単一のオブジェクトが複数のテーブルにまたがる場合があります。一方、ドキュメントデータベースは、特定のオブジェクトのすべての情報をデータベース内の単一のインスタンスに保存し、保存される各オブジェクトは互いに異なる可能性があります。そのため、データベースにデータをロードする際に オブジェクトリレーショナルマッピングを行う必要がありません。
ドキュメント指向データベースの中心概念は、ドキュメントの概念です。ドキュメント指向データベースの実装によってこの定義の詳細は異なりますが、一般的には、ドキュメントがデータ(または情報)を何らかの標準フォーマットまたはエンコーディングでカプセル化し、エンコードすることを前提としています。[ 3 ] [ 4 ]使用されているエンコーディングには、 XML、YAML、JSON、そしてBSONのようなバイナリ形式が含まれます。[ 5 ]
ドキュメントストア内のドキュメントは、プログラミング概念におけるオブジェクトとほぼ同等です。標準スキーマに従う必要はなく、セクション、スロット、パーツ、キーもすべて同じになるわけではありません。一般的に、オブジェクトを使用するプログラムには多くの異なるタイプのオブジェクトがあり、それらのオブジェクトには多くのオプションフィールドが含まれることがよくあります。同じクラスのオブジェクトであっても、見た目は大きく異なる場合があります。ドキュメントストアは、単一のストアに異なるタイプのドキュメントを格納できること、ドキュメント内のフィールドをオプションにできること、そして多くの場合、異なるエンコードシステムでエンコードできることという点で似ています。例えば、以下はJSONでエンコードされたドキュメントです。
{"firstName" : "ボブ" ,"姓" : "スミス" ,"住所" :{「タイプ」:「ホーム」、"street1" : "5 オーク通り." 、「都市」:「男の子」、「状態」: 「AR」、「郵便番号」: 「32225」、「国」:「米国」},「趣味」:「セーリング」、"電話" :{「タイプ」: 「セル」、「番号」:「(555)-123-4567」}}2 番目のドキュメントは、次のように XML でエンコードされる可能性があります。
<contact> <firstname>ボブ</firstname> <lastname>スミス</lastname> <phone type= "Cell" > (123) 555-0178 </phone> <phone type= "Work" > (890) 555-0133 </phone> <address> <type> Home </type> <street1> 123 Back St. </street1> <city> Boys </city> <state> AR </state> <zip> 32225 </zip> <country> US </country> </address> </contact>これら2つの文書は、構造要素の一部を共有していますが、それぞれ独自の要素も持っています。文書内の構造、テキスト、その他のデータは通常、文書コンテンツと呼ばれ、検索や編集のメソッド(下記参照)によって参照できます。すべてのレコードに同じフィールドが含まれ、未使用のフィールドは空のままになるリレーショナルデータベースとは異なり、上記の例ではどちらの文書(レコード)にも空の「フィールド」は存在しません。このアプローチにより、データベース内の他のすべてのレコードが同じ構造を共有する必要なく、一部のレコードに新しい情報を追加できます。
ドキュメントデータベースは通常、ドキュメントコンテンツに関連付けられ、一緒に保存される追加のメタデータを提供します。これらのメタデータは、ドキュメントの整理、セキュリティの提供、その他の実装固有の機能のためにデータストアが提供する機能に関連する場合があります。
ドキュメント指向データベースがドキュメントに対してサポートするコア操作は他のデータベースと同様であり、用語は完全に標準化されていませんが、ほとんどの実践者はそれをCRUDとして認識します。
データベース内の文書は、その文書を表す一意のキーによってアドレス指定されます。このキーは単純な識別子(ID)で、通常は文字列、URI、またはパスで表されます。このキーを使用して、データベースから文書を取得できます。通常、データベースは文書の取得を高速化するためにキーのインデックスを保持しており、場合によっては、文書をデータベースに作成または挿入するためにキーが必要になります。
ドキュメント指向データベースのもう一つの特徴は、ドキュメントを検索するための単純なキーからドキュメントへの参照だけでなく、コンテンツ(またはメタデータ)に基づいてドキュメントを検索できるAPIまたはクエリ言語が提供されていることです。[ 3 ]例えば、特定のフィールドに特定の値が設定されているすべてのドキュメントを取得するクエリが必要な場合があります。利用可能なクエリAPIまたはクエリ言語の機能セット、およびクエリの期待されるパフォーマンスは、実装ごとに大きく異なります。同様に、利用可能なインデックス作成オプションと設定の具体的なセットも、実装ごとに大きく異なります。
ドキュメントストアがキーバリューストアと最も異なるのは、この点です。理論上、キーバリューストア内の値はストアにとって不透明であり、本質的にブラックボックスです。ドキュメントストアと同様の検索システムを提供する場合もありますが、コンテンツの構成に関する理解度は低い場合があります。ドキュメントストアはドキュメント内のメタデータを使用してコンテンツを分類します。例えば、ある数字列は電話番号で、別の数字列は郵便番号であることを理解できます。これにより、これらの種類のデータ、例えば「555」を含むすべての電話番号を検索できますが、郵便番号55555は無視されます。
ドキュメント データベースは通常、ドキュメント全体またはドキュメントの個々の構造部分の置き換えを可能にすることによって、ドキュメントのコンテンツ (またはメタデータ) を更新または編集するための何らかのメカニズムを提供します。
文書データベースの実装は、文書を整理するためのさまざまな方法を提供します。
場合によっては、これらの組織の概念は、論理的であるか物理的であるか (たとえば、ディスク上またはメモリ内) の表現の程度によって異なります。
ドキュメント指向データベースは、特殊なキーバリューストアであり、それ自体がNoSQLデータベースの別のカテゴリです。単純なキーバリューストアでは、ドキュメントの内容は不透明です。ドキュメント指向データベースは、ドキュメントの内部構造に基づいてクエリや更新を行うためのAPIまたはクエリ/更新言語を提供します。[ 4 ]この違いは、ドキュメントデータベースで一般的に提供されるより豊富なクエリ、検索、編集APIを必要としないユーザーにとっては些細なことかもしれません。現代のキーバリューストアにはメタデータを操作する機能が含まれていることが多く、ドキュメントストア間の境界が曖昧になっています。
Apache SolrやElasticsearchなどの一部の検索エンジン (別名、情報検索) システムは、ドキュメント指向データベースの定義に適合するのに十分なドキュメントのコア操作を提供します。
リレーショナルデータベースでは、まずデータがいくつかの定義済みタイプに分類され、各タイプの個々のエントリ(レコード)を保持するためのテーブルが作成されます。テーブルは各レコードのフィールド内のデータを定義します。つまり、テーブル内のすべてのレコードは全体的に同じ形式になります。管理者はテーブル間の関係も定義し、検索で最もよく使用されると思われる特定のフィールドを選択して、それらのインデックスを定義します。リレーショナル設計の重要な概念は、繰り返される可能性のあるデータは通常、独自のテーブルに配置され、これらのインスタンスが互いに関連している場合は、それらをグループ化するための列(外部キー)が選択されるというものです。この設計はデータベースの正規化として知られています。[ 6 ]
例えば、アドレス帳アプリケーションでは通常、連絡先名、オプションの画像、1つ以上の電話番号、1つ以上の郵送先住所、1つ以上の電子メールアドレスを保存する必要があります。標準的なリレーショナルデータベースでは、これらの行ごとにテーブルが作成され、各データビットごとに定義済みのフィールドが設定されます。CONTACTテーブルにはFIRST_NAME、LAST_NAME、IMAGE列が含まれ、PHONE_NUMBERテーブルにはCOUNTRY_CODE、AREA_CODE、PHONE_NUMBER、TYPE(自宅、勤務先など)が含まれます。PHONE_NUMBERテーブルには、連絡先の作成時に割り当てられた一意のID番号を保持する外部キー列「CONTACT_ID」も含まれています。元の連絡先を再作成するために、データベースエンジンは外部キーを使用してテーブルグループ全体から関連項目を検索し、元のデータを再構築します。
対照的に、ドキュメント指向データベースでは、テーブルの概念に直接対応する内部構造が存在しない可能性があり、フィールドやリレーションシップも通常、定義済みの概念として存在しません。代わりに、オブジェクトのすべてのデータは単一のドキュメントに配置され、データベースに単一のエントリとして保存されます。アドレス帳の例では、ドキュメントには連絡先の名前、画像、その他の連絡先情報がすべて単一のレコードとして格納されます。このエントリにはキーを介してアクセスされ、データベースはキーを使用してドキュメントを取得し、アプリケーションに返すことができます。関連データを取得するために追加の作業は必要ありません。これらすべてが単一のオブジェクトで返されます。
ドキュメント指向モデルとリレーショナルモデルの重要な違いは、ドキュメントの場合、データ形式が事前に定義されていないことです。ほとんどの場合、あらゆる種類のドキュメントをあらゆるデータベースに保存でき、それらのドキュメントの種類や形式はいつでも変更できます。例えば、CONTACTにCOUNTRY_FLAGフィールドを追加したい場合、このフィールドは新しいドキュメントを挿入する際に追加できます。データベースや既に保存されている既存のドキュメントには影響しません。データベースからの情報検索を容易にするために、ドキュメント指向システムでは通常、管理者がデータベースに特定の種類の情報を検索するためのヒントを提供することができます。これは、リレーショナルモデルにおけるインデックスと同様に機能します。また、ほとんどのシステムでは、ドキュメント自体の内容とは別にメタデータを追加することもできます。例えば、エントリをアドレス帳の一部であることを示すタグを付けることで、プログラマーは「すべてのアドレス帳エントリ」など、関連する種類の情報を取得できます。これはテーブルに似た機能を提供しますが、概念(データのカテゴリ)と物理的な実装(テーブル)が分離されています。
古典的な正規化リレーショナルモデルでは、データベース内のオブジェクトは個別のデータ行として表現され、取得時に付与される構造以外に固有の構造は持たない。そのため、プログラミングオブジェクトとそれに対応するデータベース行を相互に変換する際に問題が発生し、これはオブジェクト・リレーショナル・インピーダンス・ミスマッチと呼ばれる。[ 7 ]ドキュメントストアは、プログラミングオブジェクトをより密接に、あるいは場合によっては直接的にストアにマッピングする。これらはしばしばNoSQLという用語で販売されている。
| 名前 | 出版社 | ライセンス | サポートされている言語 | 注記 | RESTful API |
|---|---|---|---|---|---|
| エアロスパイク | エアロスパイク | AGPLとプロプライエタリ | C、C#、Java、Scala、Python、Node.js、PHP、Go、Rust、Spring Framework | Aerospikeはフラッシュに最適化されたインメモリ分散キーバリューNoSQLデータベースであり、ドキュメントストアモデルもサポートしています。[ 8 ] | はい[ 9 ] |
| アレグログラフ | フランツ株式会社 | 独自の | Java、Python、Common Lisp、Ruby、Scala、C#、Perl | データベースプラットフォームは、単一のデータベースでドキュメントストアとグラフデータモデルをサポートします。JSON 、 JSON -LD、RDF、全文検索、ACID、2フェーズコミット、マルチマスターレプリケーション、Prolog、SPARQLをサポートします。 | はい[ 10 ] |
| アランゴDB | アランゴDB | ビジネスソースライセンス | C、C#、Java、Python、Node.js、PHP、Scala、Go、Ruby、Elixir | データベース システムは、1 つのデータベース コアと統合クエリ言語 AQL (ArangoDB Query Language) を使用して、ドキュメント ストア、キー/値、グラフ データ モデルをサポートします。 | はい[ 11 ] |
| ベースX | BaseXチーム | BSDライセンス | Java、XQuery | XML、JSON、バイナリ形式のサポート、クライアント/サーバーベースのアーキテクチャ、同時構造検索と全文検索および更新。 | はい |
| キャッシュ | インターシステムズ株式会社 | 独自の | Java、C#、Node.js | 健康、ビジネス、政府のアプリケーションでよく使用されます。 | はい |
| 雲母 | クラウドアント株式会社 | 独自の | Erlang、Java、Scala、C | Apacheが支援するCouchDBプロジェクトのオープンソースフォークであるBigCouchをベースにした分散データベースサービス。JSONモデルを使用します。 | はい |
| クラスターポイントデータベース | クラスターポイント株式会社 | 無料でダウンロードできる 独自の | JavaScript、SQL、PHP、C#、Java、Python、Node.js、C、C++、 | ACID準拠のトランザクション、高可用性データ レプリケーションおよびシャーディング、関連性ランキングを備えた組み込みの全文検索エンジン、JS/SQLクエリ言語、GISを備えた分散ドキュメント指向 XML/JSON データベース プラットフォーム。サービスとしての従量課金制データベースとして、またはオンプレミスの無料ソフトウェア ダウンロードとしてご利用いただけます。 | はい |
| カウチベースサーバー | カウチベース株式会社 | Apacheライセンス | C、C#、Java、Python、Node.js、PHP、SQL、Go、Spring Framework、LINQ | 分散型 NoSQL ドキュメント データベース、JSON モデル、および SQL ベースのクエリ言語。 | はい[ 12 ] |
| カウチDB | Apacheソフトウェア財団 | Apacheライセンス | HTTPリクエストを送信できる言語 | REST/HTTP経由のJSON。マルチバージョン同時実行制御と限定的なACID特性を備えています。ビューとクエリにはmapとreduceを使用します。[ 13 ] | はい[ 14 ] |
| クレートDB | Crate.io株式会社 | Apacheライセンス | ジャワ | 使い慣れたSQL構文を使用して、クラスター全体にわたるリアルタイム分散クエリを実行できます。バイナリオブジェクト(BLOB)のサポートが組み込まれたLucene / Elasticsearchエコシステムをベースとしています。 | はい[ 15 ] |
| コスモスDB | マイクロソフト | 独自の | C#、Java、Python、Node.js、JavaScript、SQL | Microsoft Azureプラットフォームの一部である Platform-as-a-Service (PaaS) です。従来の Azure DocumentDB を基盤として拡張されています。 | はい |
| ドキュメントDB | アマゾンウェブサービス | 独自のオンラインサービス | 各種、REST | 完全に管理されたMongoDB v3.6互換データベースサービス | はい |
| ダイナモDB | アマゾンウェブサービス | 独自の | Java、JavaScript、Node.js、Go、C# .NET、Perl、PHP、Python、Ruby、Rust、Haskell、Erlang、Django、Grails | キーバリュー型およびドキュメント型データ構造 をサポートする、完全に管理された独自のNoSQLデータベースサービス | はい |
| エラスティックサーチ | シェイ・バノン | Server Side Public Licenseと Elastic License の二重ライセンスです。 | ジャワ | JSON、検索エンジン。 | はい |
| 存在する | 存在する | LGPL | XQuery、Java | XML over REST/HTTP、WebDAV、Lucene 全文検索、バイナリデータのサポート、検証、バージョン管理、クラスタリング、トリガー、URL 書き換え、コレクション、ACLS、XQuery 更新 | はい[ 16 ] |
| インフォミックス | IBM | 独自版、無料版あり[ 17 ] | 各種(MongoDB APIと互換性あり) | JSON、レプリケーション、シャーディング、ACID 準拠を備えた RDBMS。 | はい |
| ジャックラビット | アパッチ財団 | Apacheライセンス | ジャワ | Javaコンテンツリポジトリの実装 | ? |
| HCL ノート( HCL ドミノ) | 塩酸 | 独自の | LotusScript、Java、Notes 式言語 | マルチバリュー | はい |
| マークロジック | マークロジックコーポレーション | 開発者向け無料ダウンロード付きの 独自仕様 | Java、JavaScript、Node.js、XQuery、SPARQL、XSLT、C++ | JSON、XML、RDFトリプルに対応した分散ドキュメント指向データベース。フルテキスト検索、ACIDトランザクション、高可用性と災害復旧、認定セキュリティ を内蔵。 | はい |
| モンゴDB | MongoDB株式会社 | DBMSにはサーバーサイドパブリックライセンス、クライアントドライバにはApache 2ライセンス[ 18 ] | C、C++、C#、Java、Perl、PHP、Python、Go、Node.js、Ruby、Rust、[ 19 ] Scala [ 20 ] | レプリケーションとシャーディング、BSONストア (バイナリ形式JSON ) を備えたドキュメント データベース。 | はい[ 21 ] [ 22 ] |
| MUMPSデータベース | ? | プロプライエタリとAGPL [ 23 ] | おたふく風邪 | 健康アプリケーションでよく使用されます。 | ? |
| オブジェクトデータベース++ | Ekkyソフトウェア | 独自の | C++、C#、TScript | バイナリネイティブC++クラス構造 | ? |
| オープンリンク ヴァーチュオーソ | オープンリンクソフトウェア | GPLv2とプロプライエタリ | C++、C#、Java、SPARQL | ミドルウェアとデータベースエンジンのハイブリッド | はい |
| オリエントDB | オリエントテクノロジーズ | Apacheライセンス | ジャワ | JSON over HTTP、SQL サポート、ACIDトランザクション | はい |
| Oracle NoSQLデータベース | オラクル社 | Apacheライセンスと独自ライセンス | C、C#、Java、Python、node.js、Go | シェアードナッシング(共有なし)で水平スケーラブルなデータベース。スキーマレスJSON、固定スキーマテーブル、キー/バリューペアをサポートします。ACIDトランザクションもサポートします。 | はい |
| クイズ | クアルコム | 独自の | REST、Java、XQuery、XSLT、C、C++、Python | 統合されたフルテキスト検索、 JSON、テキスト、バイナリ のサポートを備えた分散ドキュメント指向XML データベース。 | はい |
| レイヴンDB | レイヴンDB株式会社 | AGPL、商用、無料 | C#、C++、Java、NodeJS、Python、Ruby、PHP、Go | RavenDBは、RavenDB Ltd.が開発したC#で書かれたオープンソースのドキュメント指向のクロスプラットフォームデータベースです。Windows 、Linux、Mac OS、AWS、Azure、GCPでサポートされています。 | はい |
| RedisJSON | レディス | Redis ソース利用可能ライセンス (RSAL) | パイソン | 全文検索機能を統合したJSON。[ 24 ] | はい |
| DBを再考する | ? | Apacheライセンス[ 25 ] | C++、Python、JavaScript、Ruby、Java | レプリケーションとシャーディングを備えた分散ドキュメント指向JSONデータベース。 | いいえ |
| SAP ハナ | SAP | 独自の | SQLのような言語 | ACIDトランザクションをサポート、JSONのみ | はい |
| セドナ | セドナ | Apacheライセンス | C++、XQuery | XMLデータベース | いいえ |
| シンプルDB | アマゾンウェブサービス | 独自のオンラインサービス | アーラン | ? | |
| アパッチソル | Apacheソフトウェア財団 | Apacheライセンス[ 26 ] | ジャワ | JSON、CSV、XML、その他いくつかの形式。[ 27 ]検索エンジン。 | はい[ 28 ] |
| ターミナスDB | ターミナスDB | Apacheライセンス | Python、Node.js、JavaScript | データベースシステムは、1つのデータベースコアと統合されたデータログベースのクエリ言語WOQL(Web Object Query Language)を使用して、ドキュメントストアとグラフデータモデルをサポートしています。 [ 29 ] | はい |
ほとんどの XML データベースはドキュメント指向データベースです。
ドキュメント指向データベース、またはドキュメントストアは、データをドキュメントの形式で保存するNoSQLデータベースです。ドキュメントストアはキーバリューストアの一種で、各ドキュメントには一意の識別子(キー)があり、ドキュメント自体が値として機能します。