2011-12-15 54 views
1

我正在構建一個Web應用程序,我正在考慮一種將Facebook與我的應用程序集成的方法,我在用戶的會話數據中臨時緩存用戶朋友的FBID的json數組到我的應用程序。我正在使用數據庫來跟蹤會話數據。數據庫會話存儲大小限制

這是CodeIgniter的數據庫表,用於跟蹤用戶會話:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL, 
    ip_address varchar(16) DEFAULT '0' NOT NULL, 
    user_agent varchar(120) NOT NULL, 
    last_activity int(10) unsigned DEFAULT 0 NOT NULL, 
    user_data text NOT NULL, 
    PRIMARY KEY (session_id), 
    KEY `last_activity_idx` (`last_activity`) 
); 

對於那些熟悉FQL,我想緩存有這個查詢的結果:

SELECT uid, is_app_user FROM user 
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = xxxxxxxx) 
ORDER BY is_app_user DESC 
LIMIT 0,1000 

這將返回用戶朋友的列表,以及這些朋友是否是我的Facebook應用程序的用戶。我有大約770個Facebook好友,並且由此查詢返回的json編碼數組的大小約爲33kb。

我爲我的應用程序的後端使用CodeIgniter,並且我想知道是否爲每個會話存儲〜33kb值的數據可能會產生任何不利影響。我打算讓會議在一段合理的時間後過期,以防止我的桌子永遠增長。任何人有任何見解?

UPDATE

只是想補充的是,發動機運行我的會話表的MyISAM(不知道這是最好的,表級鎖與InnoDB的行級鎖......總得看個明白),並且FBID自然會作爲序列化JSON存儲在user_data(TEXT)列中

回答

1

我沒有看到此方法是性能問題。問題來自可擴展性和併發用戶數量。一旦你的會話死亡,內存被釋放。因此,這是一個你期望得到多少流量的問題。如果您希望大量的併發用戶,那麼這可能會導致服務器停止運行(因爲每個用戶都會在活動期間阻止其會話所需的內存)。

我的問題是將這些數據保存在會話中而非緩存文件或數據庫表中的重要性。您可以隨時根據請求檢索數據,而不是將它保留在會話中。

+0

由於我使用負載均衡,文件緩存不適用於我的情況,但在數據庫表中緩存列表也可能起作用。我必須多看看它。 –