Вы предполагаете, что хранилище сеанса и хранилище базы данных являются эксклюзивными. Это не так. Но давайте начнем с предположения, что они есть.
Преимущество хранения сеансов в три раза:
- Нет необходимости явно вставлять данные в базу данных. Вы просто устанавливаете переменную сеанса, и все готово. Простой и с низким уровнем риска функционально.
- Нет необходимости управлять жизненным циклом посещения пользователя и корзины покупок, поскольку контейнеры / фреймворки делают это за вас
- Обычно автоматическая очистка старых сессий выполняется за вас.
Недостатки хранения сессии:
- Привязанность сеанса, если вы не исследуете репликацию
- Нет аварийного переключения, если только вы не исследуете репликацию или ручное сохранение состояния сеанса на диск, что может стать сложным.
- Все сеансы должны храниться в памяти. Это усиливается, если вы используете репликацию.
Преимущества хранения базы данных:
- Не нужно беспокоиться о схожести сеанса или репликации состояния. Вы можете округлить все запросы.
- Меньше накладных расходов памяти в приложении.
- Если заказ выполнен, все в конечном итоге попадает в базу данных, так что это может упростить завершение, поскольку данные уже присутствуют.
Недостатки хранения базы данных:
- Заброшенные корзины - какой-то анонимный пользователь добавил товар в корзину и исчез. Эти данные сохраняются навсегда, если у вас нет какого-либо процесса истечения срока действия.
- Вам нужно найти способ отслеживать пользователей и выяснить, представляет ли это для данного запроса существующий или новый сеанс просмотра. (да, это, вероятно, легко, если вы используете cookie, но как вы гарантируете, что два пользователя не получат одинаковый идентификатор?).
- Больше кода
Вы не упомянули, какую платформу вы используете. Я бы искал подход, который использует сеанс, поддерживаемый базой данных, где данные сеанса существуют только в памяти в течение жизненного цикла запроса / ответа, загружая их из базы данных и сохраняя обратно в базу данных. Это хорошо послужило мне в прошлом.
Преимущества сеанса, поддерживаемого базой данных:
- Нет необходимости в привязке к серверу.
- Легко в памяти сервера приложений
- Данные незанятого / заброшенного сеанса очищены для вас.
- Жизненный цикл первого посещения пользователя, повторного посещения, завершения сеанса - все для вас.
- Легко кодировать
Недостатки сеанса, поддерживаемого базой данных:
- Конфигурация - вам нужно исследовать свой контейнер, будь то PHP, Java EE (Tomcat, Jetty, JBoss и т. Д.), Node.js + express.js или еще что-то, поддерживающее это, и предоставить правильную конфигурацию.
- Вам может потребоваться загрузить это тестирование, так как вы добавляете 2 операции с базой данных на запрос.
Есть третья возможность, о которой кто-то упоминал ранее. Вы можете вообще отказаться от использования сессий и использовать хранилище на стороне клиента, либо встраивая все в cookie, либо в локальное html-хранилище.
Я оставлю плюсы и минусы этого в качестве упражнения для вас, но я дам вам подсказку, что для хранения html5 совместимость браузера может быть чем-то, что нужно тщательно изучить.
Я изложил факты для вас. Надеюсь, это поможет вам принять правильное решение для вашей ситуации.