Лучший механизм хранения MySQL для хранения сеансов PHP

Я хочу использовать MySQL для хранения переменных сеанса. Насколько я понимаю, это означает, что при каждом запросе страницы будет одно чтение и одна запись в таблицу.

Какой механизм хранения MySQL лучше всего подходит для этой задачи? MyISAM, InnoDB, MariaDB (чего я не вижу в PHPMyAdmin), память или что-то еще?


person qwertymk    schedule 16.09.2012    source источник


Ответы (4)


«Лучшее» ничего не значит. Вам необходимо выразить свои ограничения: нужна ли вам последовательность? Долговечность? Высокая доступность? Представление? Комбинация всех этих свойств? Можете ли вы позволить себе потерять свои сессии? Могут ли они уместиться в памяти? Вам нужно поддерживать одновременный доступ к одним и тем же данным?

Без дополнительного контекста я бы выбрал InnoDB, который является наиболее сбалансированным механизмом хранения. Он обеспечивает правильную производительность для приложений OLTP, транзакций ACID, хорошую надежность и разумное управление параллелизмом. Доступ к переменным сеанса, скорее всего, будет осуществляться с использованием первичных ключей, и эта операция очень эффективна с InnoDB.

Теперь, если производительность действительно ограничивает, я бы предпочел использовать движок NoSQL (то есть не MySQL). Для хранения данных сеанса Redis обычно очень хорошо справляется со своей задачей, и его достаточно легко интегрировать и развернуть.

person Didier Spezia    schedule 16.09.2012

Механизм хранения памяти кажется лучшим вариантом. Имейте в виду, что это хорошо для временных сеансов.

http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

person Geordee Naliyath    schedule 16.09.2012
comment
Разве это не проблема, если у меня есть балансировщик нагрузки, поскольку движок не записывает данные на диск, а серверы не разделяют память? Кроме того, если сервер выйдет из строя или будет перезапущен, я потеряю все свои данные? - person qwertymk; 16.09.2012

Это зависит от того, как вы оцениваете «лучшее»:

MyISAM является наиболее распространенным (многие пакеты виртуального хостинга позволяют использовать только MyISAM). Кроме того, он довольно ограничен в аспекте управления отношениями, поэтому вы настраиваете его очень быстро и легко. Если вам нужна переносимость и быстрая реализация в нескольких сценариях хостинга, MYISAM - САМЫЙ ЛУЧШИЙ.

InnoDB позволяет создавать отношения и сохранять целостность данных, связывая ключи в разных таблицах, что означает больше работы, но гораздо более профессиональный дизайн базы данных. многие пакеты виртуального хостинга не реализуют InnoDB, поэтому при экспорте структуры таблиц из одной среды в другую вам может потребоваться дополнительная работа. если вы хотите управление и контроль над недвижимостью, INNODB - САМЫЙ ЛУЧШИЙ.

Что касается переносимости данных, база данных InnoDB будет полностью принята MyISAM (поскольку MyISAM не проверяет целостность данных: «есть ли в пользовательской базе данных номер пользователя 4, например, когда я вставляю новую запись в user_car») . Если вы начнете с MyISAM, экспорт в полноценную базу данных InnoDB будет кошмаром, даже если у ваших данных есть все ключи, данные таблицы должны быть импортированы в правильном порядке (пользователь и автомобиль, перед user_car).

MariaDB? никогда, просто потому, что им пользуется меньше людей, поэтому у вас будет меньше поддержки по сравнению с MyISAM и InnoDB.

Итог: INNODB.

person tony gil    schedule 16.09.2012
comment
Если вы сильно отговариваете Марию, возможно, стоит сказать почему - иначе это предложение не будет очень полезным! Не могли бы вы отредактировать свой пост и немного подробнее остановиться на этом вопросе? - person halfer; 16.09.2012
comment
@quertymk и halfer, следили за вашими запросами и редактировали. спасибо! :) - person tony gil; 16.09.2012

Если вам не нужны накладные расходы от SQL-соединения, подумайте об использовании MemCached session sorage. См. http://php.net/manual/en/memcached.sessions.php

person JvdBerg    schedule 16.09.2012