【问题标题】:Database session storage size restrictions数据库会话存储大小限制
【发布时间】:2011-12-15 03:45:33
【问题描述】:

我正在构建一个 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

【问题讨论】:

    标签: codeigniter session caching


    【解决方案1】:

    我不认为这种方法存在性能问题。问题来自可伸缩性和并发用户的数量。一旦会话结束,内存就会被释放。因此,这是您期望的流量的问题。如果您预计会有大量并发用户,那么这可能会使您的服务器陷入瘫痪(因为每个用户都会在他们处于活动状态时阻塞会话所需的内存)。

    我的问题是将这些数据保存在会话中而不是缓存文件或数据库表中的重要性。您始终可以根据请求检索数据,而不是在会话中保留它。

    【讨论】:

    • 文件缓存不适用于我的情况,因为我正在使用负载平衡,但在数据库表中缓存列表也可能有效。我得再研究一下。
    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多