Когда речь идет о написании настраиваемого управления сеансами PHP на основе базы данных MySQL для ОЧЕНЬ динамического веб-сайта, какова наилучшая структура (самый быстрый доступ для чтения / записи) для таблицы сеансов?
Плохой пример (не оптимизирован):
CREATE TABLE `session` (
`session_id` VARCHAR(32) NOT NULL,
`session_data` TEXT NOT NULL,
`t_created` DATETIME NOT NULL,
`t_updated` DATETIME NOT NULL,
PRIMARY KEY (`session_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
Я предполагаю, что использование Memory Engine было бы лучше / быстрее, но я не уверен. Я не могу придумать хороший способ объяснить все на английском языке, поэтому я составил список требований / деталей, которые я считаю важными:
подробности:
- Категория: Оптимизация
- Подкатегория: Производительность запросов MySQL
- Цель: быстрая схема таблицы с произвольным доступом и однорядный запрос
- Распространенное использование: управление пользовательскими сеансами, временное хранилище
- Операционная система: * nix, точнее: Centos 5+ (на x86_64)
- База данных: версия MySQL: 5+ (версия для сообщества)
Результаты:
- SQL-запрос: создание таблицы
- SQL-запрос: выберите одну строку по случайному ключу (например, идентификатор сеанса PHP)
- SQL-запрос: вставка одной строки со случайным ключом (например, идентификатор сеанса PHP)
- SQL-запрос: обновить одну строку по случайному ключу (например, идентификатор сеанса)
- SQL-запрос: удаление нескольких строк по метке времени (сборка мусора, например сеансы с истекшим сроком действия)
Ожидаемая продолжительность жизни в строке (например, продолжительность сеанса):
- 30%: от 0 до 30 с
- 20%: 30 с-5 м
- 30%: 5 м-1 ч
- 20%: 1ч-8ч
Ожидаемое количество строк (например, активных сессий):
- Низкий: 128
- Средний: 1024
- Высокий: 100000
Если кто-то может придумать лучший способ сформулировать все это, пожалуйста, не стесняйтесь редактировать.