1


0

リレーショナルデータベースは、多くの種類(木、有向グラフ、無向グラフなど)でグラフを保存するためによく使用されます。

それでは、主要なDBMS(Microsoft、MySql、Oracle、PostgreSQL、SqlLiteなど)に、関係をグラフとして扱うためのライブラリサポートがないのはなぜでしょうか。

例として、いくつかの望ましい機能。

  • 制約チェック(結合性、非周期性、平面性など)

  • 一般的に必要な関数(最短経路、最小全域木、推移閉包、最大流量/最小カット、クリーク検出、ハミルトニアン/オイラーサイクル…​)

  • 上記のいずれかのパフォーマンスを向上させるために必要な補助データ構造

データベースの外でこれらのことのいくつかに対するサポートを構築することは、(他の理由の中でも)理由で複雑です。

  • それは本質的に複雑です(ライブラリはここで助けになります)

  • 短い答えは多くのデータによってサポートされています。最短パスアルゴリズムを実行している外部クライアントは、データベースに対して非常に「おしゃべり」しているか、必要以上に大量のデータを取得する必要があります。どちらの選択もネットワークにとって悪い

  • 完全性がグラフ理論的制約に依存するときの完全性の維持はすべての提案された更新へのアクセス、それゆえトリガを必要とし、トリガから既存のグラフライブラリへのアクセスは多くのシステムで複雑

  • DBMSストレージマネージャとオプティマイザは、インデックスの場合と同様に、補助データ構造の問題に対処するために独自の位置にあります。

これは修辞的な質問ではありません、私は実際に興味深い技術的な(または歴史的な)理由があるかどうか知りたいと思います。

3 Answer


2


私はhttp://139.91.183.30:9090/RDF/[research group]で働いていましたが、RDF(S)データのデータベースを削除することに興味を持っていました。これは基本的にラベル付きグラフ、またはトリプルです。これは基本的にグラフの辺である[sourceNode、edgeLabel、targetNode]。

問題の難しさを理解するために尋ねる質問:あなたはラベル付きグラフのためにどんな種類の指標を構築しようとしていますか? 一般的な「プロパティ」(それぞれの「述語」は主語のプロパティで、objectの値を持つ)を利用し、それに応じてエッジにインデックスを付ける必要があります。 '値が18より大きいPersonの場合

説明のために、ここではスキーマに依存しない単純なアプローチを示します(そして、スキーマが持つべきことに全会一致で同意するという従来のデータベース研究とはまったく反対の方向に進みます)。 スキーマ情報は完全に無視されます(http://www.csee.umbc.edu/691m/papers/RDFScalableIndexing.pdf [この論文]は有用な文脈を提供します)。 すべてを3つの大きなテーブル(s:subject、p:predicate、o:object)に格納するだけです。

  1. [s、p、o]

  2. [p、o、s]

  3. [o、s、p]

これらの3つは、(多くても)主語、(多くても)述語、および(多くても)オブジェクト(すなわち、最大でも)を用いて任意のクエリを効率的に評価することに答えるのに十分である。 (s、*、*)(*、p、*)(*、*、o)+(s、p、*)+という形式のクエリ、` (s、*、o) (*、p、o) (s、p、o) `)。 複雑なクエリは、多くの「パス式」で構成されています。 いくつかの基準を満たす特定のパスを見つけることができるデータを記述します。各パスは、これらの(大きな!)テーブルの1つで自己結合に変換されますが、それほど効率的ではないため問題です。

そこに、それはポケットの中の簡単なグラフデータベースです。 :)

結論として、これは活発な研究の分野です。 私は現在の最先端技術に最新ではありませんが、http://www.franz.com/agraph/allegrograph/[AllegroGraph]のような製品や非常に良い結果を出す製品を目にしました。


0


Oracleは、グラフ機能(Oracle Locator / Oracle Spatial)とセマンティックWeb機能をサポートしています。


0


あなたの質問にはそれ自身の答えの始まりが含まれていると思います。

あなたがリストアップした_一般的に必要とされる機能_は、一般的な目的のデータベースのために、一般的に全く必要とされません。 はい、彼らは確かにグラフ操作のために必要とされます、しかし、めったに、例えば顧客請求のために。 もちろん、リレーショナルデータベースはグラフをテーブルに格納することができますが、グラフ操作は私が見たどのバージョンのSQLの能力をも超えています。

あなたは、データベースの外でこれらのことのいくつかに対するサポートを構築することは複雑です。 そうです、そしてそれが私たち全員がそんなに高い収入を得ている理由です。 しかし、それらのサポートをデータベースに組み込むのも同じくらい複雑でしょう。