2012-01-30 30 views
2

我正在爲我的網站創建Facebook應用程序,其中包括需要用戶朋友列表的功能。是否存儲大會話減慢響應時間和服務器

找回朋友是沒有問題的,我正在努力的決定是如何存儲它們。

  1. 選項1 -儲存在我的MySQL數據庫的用戶,我選擇沒有去這是我的數據庫將變得非常沉重,非常快。另外,我需要爲每個Facebook用戶創建一個表格!
  2. 選項2 -將Facebook朋友陣列存儲在每半小時更新一次的會話中,以確保包含新朋友。 忽略會話每半小時更新一次的事實,在會話中存儲什麼可能是非常大的數組是一個壞主意?

該網站很可能會收到大量的流量,因此會存儲很多這些會話。

儘管我是一位經驗豐富的開發人員,但在這些情況下,我對會話沒有太多經驗。我只想知道這是否是一個壞主意?

只給你的朋友的典型陣列上的一點信息:

  1. 每個數組的格式爲{0多維[UID:1,名稱:喬布羅格斯,圖片:test.jpg放在] ,1 ...}
  2. 朋友列表的範圍通常從100個項目到5000個項目,儘管平均約爲700個。這些不算小!

如果這是一種存儲朋友的不好方法,那麼還有什麼其他選項(不包括MySQL)?

會話是否影響內存(RAM)的使用?

+5

'我需要爲每個Facebook用戶創建一個表格!' - 你不需要這樣做。如果你認爲你這樣做,你的計劃數據庫模式是有缺陷的。 – DaveRandom 2012-01-30 10:55:02

+1

是的,會話對內存使用有影響,因爲它們在運行/讀取時可用於php。我會使用session_save_handler將會話存儲在數據庫中。 (如果真的很重的數據存儲到會話中,您可以將數據拆分到另一個表中以保持「正常」會話訪問和表格的小)。 – djot 2012-01-30 10:55:27

+1

使用數據庫,就是這麼做的。不要認爲陣列不會變得沉重。至於每個人的桌子,不是問題。這就是爲什麼他們發明了創建查詢。另外,你不需要。將它們存儲在一個雜亂無章的時尚中,你們都很棒。 – 2012-01-30 10:55:47

回答

1

爲了您的要求,我強烈建議您在服務器上安裝MemCacheD。請參閱:http://memcached.org/瞭解更多信息。

會話僅適用於當前登錄的用戶,因此在會話之間共享信息會很困難。當會話消失時,用戶數據也會消失。

對於memcached數據存儲在鍵/值對中。

因此,對於一個關鍵,您可以使用Facebook ID,併爲值,用戶數據的序列化對象。

+0

看來,memcached是爲'小塊數據'。我存儲的數組非常大!這是一個問題嗎? – 2012-01-30 21:24:03

+0

我已經得到了兆字節數量級的對象。但是,您只需存儲從API獲取的一些信息,這樣就不必浪費已經加載過的項目的電話。假設user1有好友user2,user3,user4。而user5有朋友user2,user6。因此,當user5在user1之後進入您的應用程序時,您不必查詢API以獲取user2的信息,因爲您從緩存中獲取它的副本。正確?因此,您現在可以將朋友的ID存儲在每個用戶對象中(而不是用於朋友的完全膨脹的用戶對象數組)。 – DMCS 2012-01-30 22:16:06

+0

它不那麼簡單,因爲當他們第一次登錄時,你不知道X是否是Y的朋友。此外,memcached將這些數據存儲在RAM中,隨後我可能會反彈,因爲我正試圖減少服務器上的RAM消耗。你提出的建議非常有幫助,但我認爲它並不實際相關,因爲它只是加速查詢,而不是以有效的方式存儲用戶朋友。 – 2012-01-30 22:22:38

相關問題