Лучший механизм хранения MySQL для хранения сессий PHP
Я хочу использовать MySQL для хранения переменных сеанса. Из того, что я понимаю, это означает, что на каждом запросе страницы будет одно чтение и одна запись в таблицу.
Какой механизм хранения MySQL лучше всего подходит для этой задачи? MyISAM, InnoDB, MariaDB (чего я не вижу в PHPMyAdmin), память или что-то еще полностью?
4 ответа
"Лучший" ничего не значит. Вы должны выразить свои ограничения: вам нужна последовательность? Долговечность? Высокая доступность? Спектакль? Сочетание всех этих свойств? Можете ли вы позволить себе потерять свои сессии? Могут ли они уместиться в памяти? Нужно ли вам поддерживать одновременный доступ к одним и тем же данным?
Без большего контекста я бы выбрал InnoDB, который является наиболее сбалансированным механизмом хранения. Он обеспечивает правильную производительность для приложений OLTP, транзакций ACID, хорошую надежность и разумное управление параллелизмом. Доступ к переменным сеанса, скорее всего, будет осуществляться с использованием первичных ключей, и эта операция очень эффективна с InnoDB.
Теперь, если производительность действительно является ограничением, я бы предпочел использовать движок NoSQL (т.е. не MySQL). Для хранения данных сеанса Redis обычно выполняет очень хорошую работу, и его достаточно легко интегрировать и развертывать.
Движок для хранения памяти звучит как лучший вариант. Имейте в виду, что это хорошо для временных сеансов.
http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
Если вы не хотите накладных расходов на соединение SQL, рассмотрите возможность использования сеанса MemCached. Смотрите http://php.net/manual/en/memcached.sessions.php
Это зависит от того, как вы оцениваете "лучшее":
MyISAM является наиболее распространенным (многие пакеты общего хостинга позволяют использовать только MyISAM). Кроме того, он довольно ограничен в аспекте управления отношениями, поэтому вы настраиваете его очень быстро и легко. если вам нужна мобильность и быстрая реализация в нескольких сценариях хостинга, MYISAM IS BEST.
InnoDB позволяет создавать отношения и сохранять целостность данных, связывая ключи в разных таблицах, что означает больше работы, но гораздо более профессиональный дизайн БД. многие пакеты общего хостинга не поддерживают InnoDB, поэтому при экспорте структуры таблиц из одной среды в другую вам может потребоваться дополнительная работа. если вы хотите управление и контроль за реализацией, INNODB IS BEST.
Что касается переносимости данных, база данных InnoDB будет полностью принята MyISAM (поскольку MyISAM не проверяет целостность данных: "есть ли номер пользователя 4 в базе данных пользователей, когда я, например, вставляю новую запись в user_car"), Если вы начинаете с MyISAM, экспорт в полноценную базу данных InnoDB станет кошмаром, даже если ваши данные имеют все ключи, данные таблицы должны быть импортированы в правильном порядке (пользователь и машина, перед user_car).
MariaDB? никогда, просто потому, что его используют меньше людей, поэтому у вас будет меньше поддержки по сравнению с MyISAM и InnoDB.
Итог клинчер: INNODB.