Очень часто тянет очень большое количество строк - мне нужно здесь memcached? - PullRequest
0 голосов
/ 04 марта 2012

У меня есть около 10 таблиц с ~ 10000 строк в каждой, которые нужно очень часто вытягивать.

Например, список стран, список всех школ в мире и т. Д.

PHP не может сохранить этот материал в памяти (насколько мне известно), поэтому мне придется каждый раз запрашивать на сервере запрос SELECT * FROM TABLE. Должен ли я использовать memcached здесь? Во-первых, хотя это совершенно очевидно, что да, но во-вторых, разве mysql уже не будет кешировать для меня, и это будет почти избыточно?

Я не очень хорошо понимаю, как mysql кеширует данные (или даже кеширует целые таблицы).

Ответы [ 3 ]

1 голос
/ 04 марта 2012

Вы можете использовать кеш запросов MySQL, но тогда вы все еще используете ресурсы БД для установления соединения и выполнения запроса. Другой вариант - кэширование кода операции , если ваши страницы относительно статичны. Однако я думаю, что memcached - самое гибкое решение. Например, если у вас есть список стран, к которым необходимо обращаться из различных кодовых точек в вашем приложении, вы можете извлечь данные из постоянного хранилища (mysql) и сохранить их в memcached. Затем данные доступны для любой части вашего приложения (включая пакетные процессы и cronjobs) для любых бизнес-требований.

1 голос
/ 04 марта 2012

Я бы предложил прочитать в кеше запросов MySQL:

http://dev.mysql.com/doc/refman/5.6/en/query-cache.html

0 голосов
/ 04 марта 2012

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

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

Какие данные, кроме содержимого этих запросов, используются во время генерации вывода? Будет ли смысл иметь кэш страницы или фрагмент страницы (или кэширование обратного прокси-сервера впереди)? Действительно ли необходимо выполнять эти запросы "часто"? Как часто меняются базовые данные? Есть ли у вас какие-либо события, когда это происходит?

Кроме того, SELECT * запросы без предложения WHERE являются «запахом кода» (означающим, что, возможно, что-то делается неправильно), особенно если не все извлеченные данные отображаются непосредственно пользователю.

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