Ограничения размера хранилища сессии базы данных - PullRequest
1 голос
/ 15 декабря 2011

Я создаю веб-приложение и обдумываю подход к интеграции facebook с моим приложением, в котором я временно кэширую в данных сеанса пользователя массив jBB FBID друзей пользователя, когда они входят в мое приложение. Я использую базу данных для отслеживания моих данных сеанса.

Это таблица базы данных от 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

Возвращает список друзей пользователей и их пользователей. У меня около 770 друзей в Facebook, и размер массива в кодировке json, возвращаемого этим запросом, составляет около 33 КБ.

Я использую CodeIgniter для серверной части моего приложения, и мне интересно, может ли потенциально хранение данных объемом ~ 33 КБ для каждой сессии иметь какой-либо вредный эффект. Я планирую позволить сессиям истекать через некоторое разумное время, чтобы предотвратить бесконечный рост моей таблицы. У кого-нибудь есть идеи?

UPDATE

Просто хочу добавить, что механизм, управляющий моей сеансовой таблицей, является MyISAM (не уверен, что это лучше, блокировка на уровне таблицы или блокировка на уровне строки для InnoDB ... надо посмотреть на это), и FBID, естественно, будут сохранены как сериализованный JSON в столбце user_data (TEXT)

1 Ответ

1 голос
/ 15 декабря 2011

Я не вижу в этом методе проблемы с производительностью. Проблема заключается в масштабируемости и количестве одновременно работающих пользователей. Как только ваш сеанс умирает, память освобождается. Поэтому вопрос в том, сколько трафика вы ожидаете. Если вы ожидаете массу одновременных пользователей, это может привести к зависанию вашего сервера (поскольку каждый пользователь будет блокировать память, необходимую для его сеанса, пока он активен).

Мой вопрос заключается в том, какова важность сохранения этих данных в сеансе, а не в кэшированном файле или таблице базы данных. Вы всегда можете получить данные по запросу, вместо того, чтобы задерживать их в сеансе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...