2010-05-16 142 views
16

我想使用使用php的圖形數據庫。你能指出一些資源開始的地方嗎?那裏有沒有任何示例代碼/教程?或者在完全隨機/抽象的情況下還有其他存儲數據的方法嗎?圖形結構化數據庫和Php

-

需要的關係很抽象的例子:約翰涉及到瑪麗,既涉及到學校,約翰身材高大,瑪麗是短暫的,約翰藍眼睛,瑪麗有綠色的眼睛,詢問我要的是哪個人們都與「短的人有綠色的眼睛,上學去」 - >答案約翰

-

又如:

TrackA -> ArtistA 
      -> ArtistB 

      -> AlbumA -----> [ label ] 
      -> AlbumB -----> [ A ] 

      -> TrackA:Remix 
      -> Genre:House 

      -> [ Album ] -----> [ label ] 
    TrackB -> [ C ]  [ B ] 

考試ple查詢:

哪種流派更接近TrackB?回答:House - 因爲它與專輯C有關,專輯C與TrackA有關,並與流派有關,並且與流派有關:House

獲取所有類型:House A的相關專輯A:結果:AlbumA,AlbumB - 因爲它們都有TrackA以體裁相關:房子

-

有可能在MySQL,但它需要一個固定的一組爲每個項目和複雜的非靈活的查詢屬性/列的,而不是我需要每一個屬性是一個項目本身,而不是'屬於'的東西,是'相關'的東西。

+1

「屬於某物和」與某事有關「(除了使用不同的單詞)之間的區別是什麼? – 2010-05-16 10:48:50

+0

@Joel L:通過歸屬我的意思是像一個項目具有的屬性,並且相關的是項目如何相關除了一個是另一個的屬性之外,Like Tracks屬於Artist,但同一個Track可以有多個Artist。使用父/子方法,您需要將同一個孩子(音軌)複製到每個父母(藝術家)加上一首曲目可以在多個唱片集和多個標籤中,你如何描述這樣的關係而不使用圖形? – stagas 2010-05-16 10:57:28

回答

1

聽起來有點像「典型的」Prolog問題......這是一種與PHP完全不同的編程語言。但也許你可以和popen一起工作。

或者您定義一個列[id,predicate,atom1,atom2]的SQL表來存儲「Mary有綠眼睛」的真實性:predicate =「has」,atom1 =「Mary」,atom2 =「Green眼睛」。

現在您可以使用您選擇的SQL來加入和過濾謂詞和屬性。

+0

我認爲你需要一排關於每一種關係的行,這可能是相當多的行,如果你處理大量的數據,如音樂或電影數據庫與標籤和作者,藝術家,流派和更多的關係? – stagas 2010-05-16 10:00:36

+0

是的,但幾乎每個圖的節點(「原子」)之間往往具有指數數量的邊(「關係」),這使得使用傳統數據庫更難以解決圖問題(尤其是在使用水平分區的情況下)。 – 2012-11-23 11:07:10

1

它種聽起來像你應這樣理解:

1)代碼的圖形對象,可以讓你查詢你的數據,你想要的方式。

2)寫出你的對象

3)持久層的優化是做您的查詢的圖中的對象使用的數據庫調用調用適當的時候(例如,如果你需要節省內存)。

+0

是的,這可能是一個解決方案,我想如果有任何類已經在那裏,但似乎圖結構目前很少關注,你可以發現很少。我想我將不得不發明輪子... – stagas 2010-05-17 19:39:14

1

我的建議是選擇一個像OrientDB或neo4j的基於Java的圖形數據庫,然後通過PHP/Java bridge使用它。在不久的將來,neo4j(以及OrientDB的某個點)應該獲得原生的php支持,並且您可以用本地訪問來替換該橋。

1

也考慮到這個問題,是一歲,它仍然可能是有趣的是,你可以做這樣的查詢與每個支持sparql或類似語言的rdf數據存儲。

0

您還可以找到一個Rexster客戶端爲PHP:https://github.com/PommeVerte/rexpro-php

由於額外的信息。 Rexster可以加載來自各種其他圖形數據庫的圖形,例如Neo4j和OrientDb等。