Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
alxfro имхо в этом мало смысла
мускул очень хорошо сам кэширует запросы
и основные потери идут на перегон результатов(рядов)
их и имеет смысл кэшировать на стороне пхп
и быстрее будет если получится пользовать memcached http://php.net/manual/ru/book.memcache.php
armancho7777777
Отправлено: 16 Июля, 2012 - 20:58:27
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
LIME пишет:
быстрее будет если получится пользовать memcached
Не стал предлогать в силу того, что далеко ни все хостинги предоставляют это удовольствие.
DlTA
Отправлено: 16 Июля, 2012 - 21:01:49
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
alxfro, то что собираетесь кешировать не содержит результата, это всего лишь указатель который при следующей сессии уже будет не валидным.
alxfro
Отправлено: 17 Июля, 2012 - 11:13:29
Частый гость
Покинул форум
Сообщений всего: 208
Дата рег-ции: Июль 2011
Помог: 0 раз(а)
Дело вот в чем.
Я для доступа к базе использую класс sql. Там у мну есть функция, открывающая соединение (постоянное, одно) и соответственно другие функции выборки/вставки и так далее.
Так вот есть мнение, что стоит внедрить туда кэширование (вместо реального запроса запрос к кэшу). Вот я и спрашиваю, можно ли поверх mysql_fetch_assoc это сделать, чтобы вместо очередной выборки из стопятисот миллионов строк обращаться к кэшу. Причем сделать эту возможность для всех функций выборки сразу, вне зависимости от того, что отдает mysql_fetch_assoc.
Сейчас гляну в сторону memcashed....... или как его там.
В этом примере происходит сохранение объекта в кеше и его последующее чтение. Объекты и другие не скалярные типы сериализируются перед сохранением, что делает невозможным хранение ресурсов наподобие идентетификаторов подключений в кеше.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
alxfro
Следует понимать, что возвращаемое функцией mysql_query() значение - это ресурс, его нельзя сериализовать, так как существует оно только в контексте породившего его процесса. Даже если бы представить, что его удалось закешировать - выигрыша это не принесет, так как с ним ровно так же нужно работать. Если вопрос в количестве соединений, то стоит использовать паттерн "одиночка".
alxfro пишет:
(вместо реального запроса запрос к кэшу)
- а это вообще иная функциональность, и она предоставляется самой СУБД. Если запрос возможно закешировать, то СУБД в следующий после кеширования раз не будет исполнять его полностью внось, а выдаст вместо этого результат из кеша.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Мелкий
Отправлено: 17 Июля, 2012 - 12:43:35
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
EuGen пишет:
а это вообще иная функциональность, и она предоставляется самой СУБД. Если запрос возможно закешировать, то СУБД в следующий после кеширования раз не будет исполнять его полностью внось, а выдаст вместо этого результат из кеша.
Вернее сказать - это удивительная штука MySQL. Другие СУБД кэшируют план запроса (как самую компактную, но энергоёмкую часть) и оперируемые данные, а не результат каждого запроса.
alxfro пишет:
// вот тут я хочу допустим кэшировать, каким образом лучше сделать?
Вытаскиваете весь результат в массив (или иную структуру, которая может сериализоваться) - и пишете в кэш.
----- PostgreSQL DBA
EuGen
Отправлено: 17 Июля, 2012 - 12:51:14
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Мелкий
А, ну верно, но, поскольку речь идет о mysql_query, я опустил эти подробности.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
alxfro
Отправлено: 20 Июля, 2012 - 10:23:06
Частый гость
Покинул форум
Сообщений всего: 208
Дата рег-ции: Июль 2011
Помог: 0 раз(а)
EuGen пишет:
стоит использовать паттерн "одиночка".
с этим проблем нет
EuGen пишет:
- а это вообще иная функциональность, и она предоставляется самой СУБД. Если запрос возможно закешировать, то СУБД в следующий после кеширования раз не будет исполнять его полностью внось, а выдаст вместо этого результат из кеша.
ну вот я делаю select * from x where 1 и мне никакой кэш не отдает. выдает на живую.
Приведите пож-ста пример по вашим словам выше, в каком случае используется кэш?
tuareg
Отправлено: 20 Июля, 2012 - 10:28:10
Участник
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
Помог: 69 раз(а)
А Вы прямо так и не узнаете. Смотрите время выполнения скрипта. Если запрос в КЭШЕ то время будет на порядок меньше. Но надо учитывать, что объем КЭШ-а не безграничен.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.