2012-03-26 69 views
0

假設我們有一個社交網絡的朋友列表表。如何最好地結合鍵值存儲和數據庫的數據

大部分用例將需要的朋友名單表被加入到你持有的個人信息,比如另外一個表:姓名,年齡,市檔案圖片URL,上次登錄時間等信息。

一旦好友列表在100M行範圍內。查詢這樣的JOIN可能需要幾秒鐘的時間。如果您引入其他幾個WHERE條件,它甚至可能會變慢。

一個鍵值存儲系統可以很快引入朋友列表。

讓我們假設我們想顯示最近登錄的10個用戶的朋友。 計算此輸出的最佳方法是什麼?我一直在想的幾個方法如下。它們中的任何一個都有意義嗎?

  • 我們應該保存鍵值存儲環境中的所有數據嗎?每次新登錄更新 鍵值存儲?
  • 或者我們應該拉朋友列表ID的第一個。然後使用「IN()」等數據庫命令並查詢數據庫?
  • 合併客戶端級別的數據?一個javascript解決方案?
+0

我會在快速存儲中的朋友列表部分,並使用'IN'查詢而不是聯接 – njzk2 2012-03-26 14:28:46

回答

0

在Users表中,您有一個字段用於保存上次登錄的時間戳。在你的表格中,朋友關係被存儲,每個關係有一行,這使得表格非常長。

因此,加入這些表似乎不好,我們應該優化這個過程?答案是:不,不一定。構建數據庫管理系統的人遇到同樣的問題,他們會實施這些工具來解決這些問題。每個DBMS都有一些比你和我更聰明的查詢優化。

所以加入長表並不是件可恥的事。如果你想嘗試優化你可能:

  • 獲取用戶的朋友的ID。
  • 獲取你想要的信息,前10位朋友按last_login desc排序,其中id適合(以及其他條件)。

你不需要加入表格,但是你會使用兩個查詢,所以也許如果你的數據庫管理系統是聰明的聯接更快(也許運行測試)。

如果你願意,你可以在加載頁面後使用ajax加載這些數據,這樣可以改善用戶的體驗,但數據庫中的流量將是相同的。

我希望這有助於。

編輯:噢,如果你已經知道朋友ID(你需要他們的其他東西),你甚至不需要加入。您可以將ID傳遞給JavaScript,稍後通過AJAX加載上次登錄列表。

相關問題