数据库会话存储大小限制

时间:2011-12-15 03:45:34

标签: codeigniter session caching

我正在构建一个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的数据可能会产生任何不利影响。我打算让会话在一段合理的时间后到期,以防止我的桌子永远长大。有人有任何见解吗?

更新

只是想补充说,驱动我的会话表的引擎是MyISAM(不确定是否最好,表级锁定与InnoDB的行级锁定......必须查看)并且FBID自然会被存储作为user_data(TEXT)列中的序列化JSON

1 个答案:

答案 0 :(得分:1)

我认为这种方法不是性能问题。问题来自可伸缩性和并发用户数。会话终止后,内存将被释放。因此,这是一个你期望的流量的问题。如果你期望大量的并发用户,那么这可能会使你的服务器停滞不前(因为每个用户在活动期间会阻止他们的会话所需的内存)。

我的问题是在会话而不是缓存文件或数据库表中保存此数据的重要性。您始终可以按照请求检索数据,而不是在会话中将其压抑。