2013-03-02 74 views
-1

我正在開發一個我的項目,該項目需要搜索網絡中某個人的位置。基本上我需要定義一個包含具有不同連接的用戶的數據庫。將數據庫表示爲網絡

作爲像的網絡中,用戶是節點連接是邊緣。假設友誼是一種邊緣。可能有一些其他類型的連接。連接可能有某種權重/優先級

現在,當用戶搜索另一個用戶時,結果的排列順序應使頂層結果成爲最近的節點,而最遠的節點最終將取決於連接及其權重/優先級。

我無法找到從哪裏開始呢?我不需要任何現成的代碼,但我需要學習。所以,如果你知道這個,請建議教程或文章。你也可以建議我在這裏學習代碼。

另一個問題:MySQL數據庫可以用來表示這種類型的網絡還是我需要一些特殊的數據庫?

+0

圖形數據庫。檢查Neo4j:http://www.neo4j.org/。 – ryan1234 2013-03-02 00:54:25

回答

1

如果你可以自由選擇你想要的數據庫引擎,圖形數據庫是最好的解決方案。 您可以在維基百科上找到一個相當完整的列表在這裏:http://en.wikipedia.org/wiki/Graph_database

看看也是在這個視頻: http://www.youtube.com/watch?v=UodTzseLh04

我曾與Neo4j的(http://www.neo4j.org/)很好的經驗。它用Java編寫,但提供了許多語言的綁定(JMV語言可以嵌入模式運行)。 您也可以通過REST界面使用它。 查詢圖形的語言是Cypher(http://docs.neo4j.org/chunked/milestone/cypher-query-lang.html),與SQL沒什麼不同。

然而,在您的評估中考慮的一個關鍵點是圖形的大小。模擬如此複雜的數據的能力有一個主要缺點,即難以在多臺機器上高效擴展(分區圖是NP難題)。 Neo4J可以在一臺機器上處理大量的節點,但是如果你需要一個非常大的圖表,我建議你試試泰坦(http://thinkaurelius.github.com/titan/)。

約泰坦更多信息:http://www.slideshare.net/slidarko/titan-the-rise-of-big-graph-data

而且如果將來需要大量處理:http://thinkaurelius.github.com/faunus/