2012-04-01 67 views
2

我正在開發約會應用程序爲vk.com(這是俄羅斯的臉書),所以我需要保持社會圖表(通過共同興趣,朋友,喜愛的音樂,電影等鏈接的配置文件)。它看起來像「比用戶C更接近用戶B的用戶A,因爲他們有2個共同朋友和5個共同興趣VS 1共同朋友和4個共同興趣」,「用戶C最接近...」等。 什麼是好解決這個問題? 我從數學知道圖的理論,但我從未在計算機科學中使用過圖(我是web開發人員),我認爲可以通過爲任何用戶生成圖並將其保存在NoSQL數據庫中來解決此問題(如mongo或redis),但這是一個糟糕的解決方案(沒有實時更改,生成需要很長時間)。 你對這個問題有什麼看法?良好的解決方案,以保持圖(數據庫)

+0

我不太瞭解他們,但我知道,訪問Facebook數據時,他們使用它的API。因此,請嘗試checkint VKontakte的API:http://vk.com/developers.php – 2012-04-01 22:01:03

+0

謝謝,但我的問題不是關於api,而是關於如何在任何數據庫中保留圖數據結構。 – 2012-04-01 23:46:52

回答

2

你可以考慮的一個選項是FlockDB(Neo4j已被提及)通過Twitter。如果你的問題空間是大規模的簡單查詢,這可能是合適的。它不支持像Neo這樣的圖形步行查詢,但被Twitter用來存儲他們的社交圖,並支持諸如「誰跟隨」等查詢。

2

還有比基於鍵值的數據庫更專門的NoSQL解決方案。看看圖形數據庫,如neo4j。圖形數據庫很容易讓您以直觀的方式存儲和操作圖形。許多基於圖形的算法運行得非常快(與sql相比)。

您還應該看看大型社交網絡是如何做的,特別是如果您有興趣分析整個圖表(對於數據挖掘,這超出了單個用戶的實時計算)。據我所知,Facebook使用高度緩存的MySQL數據庫進行Web請求,並使用Hadoop/HBase和Hive進行大量計算。除了他們的消息傳遞平臺之外,大部分facebook的實時部分都不需要NoSQL。

1

我真的不認爲Facebook存儲他們的主要數據在圖形數據庫中。我認爲他們存儲朋友列表和興趣列表等。查看他們的文檔至少會告訴你它是如何組織的。如果「我喜歡電影」的信息與我的帳戶和興趣「電影」相關聯,則可以輕鬆查找我喜歡的內容以及喜歡看電影的人。

要計算總體「親密度」......如果您只需要至少有一個共同朋友的人,那麼直接評估所有這些人的親密度可能足夠快。否則,我會考慮尋找一個更高維的近似k-d樹搜索,在您的搜索空間中將維度嵌入到維度中。

相關問題