Отвечу сразу: не надо хранить сессии в базе данных. Для большинства сайтов достаточно использовать стандартные методы хранения PHP, в файлах.
На некоторых высоконагруженных проектах используется многосерверная конфигурация. То есть запросы от пользователей попадают на балансировщик нагрузки, а потом на один из серверов-обработчиков. А чтобы у пользователя не пропадала сессия от запроса к запросу, все сессии хранятся на отдельном сервере. Но даже в такой конфигурации может быть использована не база данных, а простые файлы для хранения сессии. Ведь для базы данных нужна оперативная память (ОЗУ).
Где хранить сессии?
База данных обрабатывает таблицы внутри оперативной памяти сервера. Если таблица занимает 1 терабайт, а у сервера нет такого количества ОЗУ, то таблица будет жить «в раскаряку» между диском и ОЗУ. При этом прироста скорости по сравнению с хранением в файлах не будет.
Оперативная память всегда была и будет дороже, чем дисковое пространство. Следовательно, её будет меньше. Если не хранить данные сессий в базе данных, которая обрабатывается в ОЗУ, то сайт сможет положить в ОЗУ что-то полезное. К примеру, ОЗУ используется для хранения данных ускорителей PHP. В ОЗУ хранятся скомпиллированные PHP файлы, что ускоряет процесс их выполнения. А если забить ОЗУ мёртвым грузом в виде сессий, то ускорения файлов не будет.
Для хранения сессий есть стандартный механизм PHP — хранение сессий в файлах. Оно выгоднее, потому что файлы читаются с диска, а не из оперативной памяти. А учитывая, что современные серверы используют SSD, данные сессий читаются очень и очень быстро (по 100 000 файлов сессий в секунду).
Сколько занимают данные сессий?
Размер данных сессий пользователей зависит от посещаемости ресурса, периода жизни сессии и усилий программистов. Ведь внутри сессионных данных можно хранить всё, а не только PHP идентификатор сессии. К примеру, можно хранить список товаров в корзине пользователя или настройки аккаунта (какой язык использует пользователь: ru, en…).
У проекта на 1С-Битрикс с настройками жизни сессии в 90 дней и посещаемостью 5 тысяч человек в сутки суммарный размер файлов сессий составляет 30 гигабайт. Очевидно, что если хранить сессии внутри базы данных, то потребуется таблица размером 30 гигабайт, которая всегда будет висеть мёртвым грузом внутри оперативной памяти.
Зачем вообще хранить сессии в ОЗУ?
Хранение данных сессий пользователей в ОЗУ — это фетишизм, который в последнее время зашёл очень далеко. Люди используют всевозможные способы хранения сессий, лишь бы не файлы и стандартные методы PHP.
Владельцы сайтов сами замедляют свои проекты в погоне за красивыми фразами: «У меня сессии в базе данных!» или «У меня сессии хранятся в Redis!». Но смысл этих фраз всегда один: «Я храню статичные данные внутри ОЗУ, отнимая место у информации, которая действительно должна быть в ОЗУ».
Ещё большую печаль нагоняет то, что такие люди используют виртуальный хостинг для своих сайтов. А ведь на виртуальном хостинге всего менее 1 Гб ОЗУ! Это означает, что если на сайт придёт несколько тысяч человек, то он ляжет из-за недостатка ОЗУ: в памяти будут только данные сессий. И переубедить такого любителя новомодного просто невозможно…