1

ドキュメント管理システムを作成するために、MongoDB のようなドキュメント ストアを検討していますが、通常のデータベース (Firebird、Sql Server、Mysql) の経験が豊富であるため、リレーショナル データベースの上にドキュメント ストアをモデル化できるかどうか疑問に思っています。

ドキュメント ストア、スキーマレスの利点:

  • ファイルに関する任意のメタデータを保存するタスクに適しています
  • スキーマをアップグレードする必要はありません
  • mongodbによると、BLOBのようなビデオの優れたパフォーマンス
  • 容易なスケーラビリティ

しかし、リレーショナルなものでは:

  • 参照整合性
  • より良いツーリング
  • クラッシュや破損に対する耐性が向上
  • SQL

では、この場合、リレーショナル データベースはどのように機能するのでしょうか?

4

2 に答える 2

5

MartinFowlerのシリアル化されたLOBパターンについて考えてみます。

CREATE TABLE Documents (
  documentid SERIAL PRIMARY KEY,
  -- fixed relational attributes ...
  document TEXT -- contains XML, YAML, whatever
);

動的属性を持つ任意の半構造化データをdocument列に入れることができます。SQL述語を使用して、そのBLOB内のフィールドで検索またはソートすることは簡単にはできません。しかし、とにかくできませんでした。変数属性は非リレーショナルの概念であり、SQLでそれらをサポートするのは厄介です。

ハイブリッドアプローチを使用して、いくつかの固定属性を従来の列に格納し、すべての可変属性をblobに格納できます。

これは、ドキュメント指向データベースが存在する理由を示しています。これらは、リレーショナルパラダイムがサポートしないことを選択した問題を解決するように設計されています。しかし、ドキュメント指向データベースは、参照整合性やデータ型の一貫性など、リレーショナルデータベースのような優れた機能の一部を実行しません。

于 2009-12-18T19:42:20.903 に答える
3

簡単なMySQLの例:

CREATE TABLE Docs (
  id INT,
  attr VARCHAR(255),
  value BLOB,
  PRIMARY KEY (id, attr),
  KEY attr_index (attr)
)

これができたら、ドキュメントに任意の属性を追加して値に何でも詰め込むことができます。また、ドキュメントテーブルで自己結合を使用して、次のような複雑なクエリを実行できます。

SELECT * FROM Docs AS d1, docs AS d2 WHERE d1.attr = "foo" AND d2.attr = "bar"

これは、foo属性とbar属性の両方を持つドキュメントを返します。

于 2009-12-18T21:21:39.797 に答える