хранить в массиве или использовать несколько запросов БД - PullRequest
1 голос
/ 01 июня 2009

В системе php / mysql у нас есть несколько значений конфигурации (около 200) - это в основном булевы или целочисленные значения, которые хранят такие данные, как количество результатов на страницу и 2 или 3 столбца страниц. Все это хранится в одной таблице mysql, и мы используем одну функцию, чтобы возвращать эти значения по мере их запроса, при загрузке определенных страниц может быть около 100 запросов к этой таблице конфигурации. С количеством сайтов, использующих эту систему, это потенциально может означать тысячи запросов каждую секунду для получения этих значений. Вопрос в том, имеет ли этот метод смысл или было бы предпочтительнее выполнить один запрос на страницу, сохранить все конфиги в массиве и извлекать их здесь каждый раз вместо этого.

Ответы [ 4 ]

1 голос
/ 01 июня 2009

Используйте кеш, такой как memcache, APC или любой другой. Загрузите настройки один раз, кэшируйте их и делитесь ими в сеансах с одноэлементным объектом.

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

1 голос
/ 01 июня 2009

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

Это превосходно как для производительности, так и для управляемости.

Результаты запроса могут быть повторно использованы между сеансами: это означает, что если у вас есть 1000 сеансов, вам не нужно хранить 1000 копий ваших данных.

0 голосов
/ 25 ноября 2009

Я бы определенно рекомендовал memcache для этого. У нас похожая настройка, и она заметно снизила использование ресурсов на этом сервере.

0 голосов
/ 01 июня 2009

Возможно, вы захотите использовать memcache для этого. Я думаю, что это будет быстрее, чем несколько запросов к БД (даже с включенным кэшированием запросов), и вам не понадобится соединение с базой данных для их получения.

Возможно, вы захотите просто загрузить их из плоского файла в память, это даст вам возможность контроля версий ваших значений конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...