半構造化データとドキュメントデータベース
ドキュメントデータベースはなぜ「ドキュメント」が特徴なのか。そもそもドキュメントっていったいなんだっけ、など個人的に整理したくなったので書き連ねてみました。
そもそもドキュメントとは?
日本語では文書あるいは書類。
「データ」と比べたときに何が違うのか・・?
ドキュメントは基本的には人間が読む用途で叙述されたデータを指していると思います。
計算機の世界では、XML文書、HTML文書、という言葉があるように、人間でも読んで解釈できる(いわゆるヒューマンリーダブルな)半構造化データも、ドキュメントの一種であると捉えられてきました。
それで、なぜ MongoDB や CouchDB は「ドキュメント」データベースと呼ばれるのか、key-value store と何が違うのかしら・・?
key-value store との共通点
スキーマレス
従来的なデータベースにおける関係モデルのような厳密な定義(スキーマ)は持たない、という意味。
ただし、利便性のためドキュメント向けのスキーマを併用することもあるよ。
JSON Schema など。
1つのデータベースに様々な種類のデータを許容する。
key-value store との相違点
ドキュメントデータベースではデータに含まれる構造を利用
データの構造からメタデータを抽出して、効率的な動作のために利用する。
単なるkeyによる検索だけでなく、構造に対応したクエリ言語を持つ。
ただし、このような差は少なくなりつつある、という話もある。
https://en.wikipedia.org/wiki/Document-oriented_database#Relationship_to_other_databases
具体的に言えば、ドキュメントというのは半構造化データ (semi-structured data)のこと。
半構造化データも、上のスキーマレスと同様、従来のデータベースとは異なるデータ群の隆盛(1990年代のXMLやHTML)に伴う命名・・と思う。
(誰が命名したのか?)
区切り構造や相互関係を示す印(タグ等)を備えるが、従来的な関係モデルのような厳密なスキーマは持たない。
XML、HTML、JSON、YAML、BSON等
HTMLはドキュメントデータベースでは通常、使用されない。
ヒューマンリーダブルであることが多かったが、ドキュメントデータベースにおいてはそうとも言えない(MongoDBのBSONはバイナリ)。
BSONは計算機向けのデータをヒューマンリーダブルにしたJSONを再び計算機向けに戻している点が面白いですね。
たしかバイナリXMLというのもありましたが。
JSONをドキュメントと呼ぶのは、分類の粒度の上では食い違うこともある。JSONはドキュメントモデルでないことを標榜して生まれた。JSON の項参照。
ドキュメントデータベースの長所
人間寄りの観点では、
半構造化データは実世界の雑多なデータを表現するのに向いている。
これは90年代以降、基本的にはHTMLで実証されてきたと思う。
現在のドキュメントデータベースに色濃く反映されてる、とは言えないが。
現状は、HTMLよりも計算機寄りの(よりマシンリーダブル側に寄った)JSON等が採用されている。
計算機寄りの観点では、
ひとつのドキュメントがプログラム上のオブジェクトの概念に相当する利便性。
Web開発(JavaScript)における JSON Object の利便性。
API における JSON の普及。
ビッグデータと呼ばれる大量の雑多なデータが計算機処理の対象となったこと。
上記の結果として、計算機の世界で半構造化データを扱うことが増えてきた。
半構造化データはRDBよりもドキュメントデータベースのほうが管理しやすい。
個人的には、人間が生み出し続けている雑多なドキュメントを計算機処理でどうにかしようとする点にときめく。
HTMLやXMLが登場したときに感銘を受けた、ヒューマンリーダブルとマシンリーダブルの中間のようなデータという概念が、いまでもわたしの中に響き続けています。
代表的な実装
https://db-engines.com/en/ranking/document+store
呼び方のゆらぎ
ドキュメントデータベース
ドキュメント指向データベース
ドキュメント型データベース