20

グラフデータベースを掘り下げ始めていますが、これらのグラフがどのように内部に保存されているかわかりません。このグラフがあるとしましょう (ウィキペディアから取得):

このグラフをキー値オブジェクトとしてシリアル化するにはどうすればよいですか? (たとえば、Python dict)

1 つは頂点用、もう 1 つはエッジ用です。

{'vertices':
 {'1': {'Name': 'Alice', 'Age': 18},
  '2': {'Name': 'Bob', 'Age': 22},
  '3': {'Type': 'Group', 'Name': 'Chess'}},
 'edges':
 {'100': {'Label': 'knows', 'Since': '2001/10/03'},
  '101': {'Label': 'knows', 'Since': '2001/10/04'},
  '102': {'Label': 'is_member', 'Since': '2005/7/01'},
  '103': {'Label': 'Members'},
  '104': {'Label': 'Members'},
  '105': {'Label': 'is_member', 'Since': '2011/02/14'}},
 'connections': [['1', '2', '100'], ['2', '1', '101'],
                 ['1', '3', '102'], ['3', '1', '103'],
                 ['3', '2', '104'], ['2', '3', '105']]}

しかし、これが最も実用的な実装であるかどうかはわかりません。たぶん、「接続」は「頂点」辞書内にあるはずです。では、キー値オブジェクトを使用してグラフ データストアを実装する最良の方法は何ですか? 詳細については、どこで何を読むことができますか?

おそらく関連していますが、重複していません:データ構造で奇妙なグラフを表現する方法

4

6 に答える 6

12

通常のパターンは、別のconnections構造を持つのではなく、その情報を構造に入れることedgesです。これにより、次のような結果が得られます。

{
'vertices': {
    '1': {'Name': 'Alice', 'Age': 18},
    '2': {'Name': 'Bob', 'Age': 22},
    '3': {'Type': 'Group', 'Name': 'Chess'} },
'edges': [
    {'from': '1', 'to': '2', 'Label': 'knows', 'Since': '2001/10/03'},
    {'from': '2', 'to': '1', 'Label': 'knows', 'Since': '2001/10/04'},
    {'from': '1', 'to': '3', 'Label': 'is_member', 'Since': '2005/7/01'},
    {'from': '3', 'to': '1', 'Label': 'Members'},
    {'from': '3', 'to': '2', 'Label': 'Members'},
    {'from': '2', 'to': '3', 'Label': 'is_member', 'Since': '2011/02/14'} ] }
于 2013-11-18T07:04:37.183 に答える
5

大丈夫そうです-各オブジェクトにはそれがあり、重複はありません。「読み取りと処理の目的」に適しています。しかし、「最良の」表現はありません。それは常にあなたの目的に依存します。頂点を名前ですばやく検索できるようにしたいですか? または日付によるエッジ?それとも、2 つの頂点が接続されているかどうかをすばやくテストしたいですか? またはその逆 - グラフの一部をすばやく変更したいですか? それぞれの目的には、データベース テーブルの異なるデータ構造が必要です

于 2012-07-15T23:02:15.367 に答える