簡體   English   中英

實現LinkedIn的有效方式,如“你如何連接”功能?

[英]Efficient way to implement LinkedIn like “How you are connected to” feature?

LinkedIn有這個很酷的功能,在訪問某些用戶的個人資料時,LinkedIn會提示你如何通過網絡連接到該用戶。

假設訪問者和配置文件所有者是圖的兩個節點,其中節點表示用戶,邊表示友誼,一個簡單的解決方案可以是從兩個節點開始直到某個級別的bfs並查看是否存在任何交叉點。 交叉點將是網絡鏈路節點。

雖然這聽起來很整潔,但問題在於,為了確定每個人的朋友,需要單獨的數據庫查詢。 當網絡深度超過2級時,算法將是非常耗時的。 有更好的有效替代方案嗎? 如果沒有,我們如何才能增加更好的硬件支持(並行計算,網格,分布式數據庫等)以減少計算所需的時間?

您可以在數據庫中的圖形文章中看到如何做到這一點:SQL與 Lorenzo Alberton的社交網絡相遇 示例代碼是使用CTE為PostgreSQL編寫的。 但是,我懷疑使用RDBMS會很好。 我寫了一篇關於如何使用本機圖形數據庫執行相同內容的文章,在這種情況下Neo4j數據庫中的社交網絡:使用圖形數據庫 除了性能上的差異之外,圖形數據庫還通過提供圖形API簡化了任務,該圖形API使得在SQL中(或通過使用存儲過程)編寫極其復​​雜的遍歷變得容易。 我在這個帖子中寫了一些關於圖形數據庫的內容,並且也看到了這個

如果沒有某種遞歸存儲過程(SQL Server 2005+中的CTE),隨着關卡的深入,你需要多次往返。 但是,良好的緩存基礎結構可以真正幫助提高性能,因為最熱門/活躍用戶的連接列表將保持緩存狀態。 讀/寫緩存機制會使事情變得更好(緩存更新級聯到db更新,緩存讀取級聯到db讀取)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM