Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: mysql_query

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
alxfro
Отправлено: 16 Июля, 2012 - 15:16:41
Post Id



Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




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

Т.е. взять $x = mysq_qury(бла бла бла) и засунуть этот $x куда-либо в кэш, например в переменную типа varchar.

Можно так сделать в теории? Или я фантазер? Улыбка
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Июля, 2012 - 15:35:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Сериализуем результат и пишем в файл.
(Добавление)
Я имею в виду результат выполнения функций mysql_fetch_assoc и т.д.
 
 Top
alxfro
Отправлено: 16 Июля, 2012 - 16:12:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




armancho7777777 пишет:
результат выполнения функций mysql_fetch_assoc


а можно ли тоже самое проделать с ресурсом который отправляется на съедение функции mysql_fetch_assoc?

(Отредактировано автором: 16 Июля, 2012 - 16:13:12)

 
 Top
LIME
Отправлено: 16 Июля, 2012 - 20:52:32
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




alxfro имхо в этом мало смысла
мускул очень хорошо сам кэширует запросы
и основные потери идут на перегон результатов(рядов)
их и имеет смысл кэшировать на стороне пхп
и быстрее будет если получится пользовать memcached
http://php.net/manual/ru/book.memcache.php
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Июля, 2012 - 20:58:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




LIME пишет:
быстрее будет если получится пользовать memcached

Не стал предлогать в силу того, что далеко ни все хостинги предоставляют это удовольствие.
 
 Top
DlTA
Отправлено: 16 Июля, 2012 - 21:01:49
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




alxfro, то что собираетесь кешировать не содержит результата, это всего лишь указатель который при следующей сессии уже будет не валидным.
 
 Top
alxfro
Отправлено: 17 Июля, 2012 - 11:13:29
Post Id



Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Дело вот в чем.

Я для доступа к базе использую класс sql. Там у мну есть функция, открывающая соединение (постоянное, одно) и соответственно другие функции выборки/вставки и так далее.

Так вот есть мнение, что стоит внедрить туда кэширование (вместо реального запроса запрос к кэшу). Вот я и спрашиваю, можно ли поверх mysql_fetch_assoc это сделать, чтобы вместо очередной выборки из стопятисот миллионов строк обращаться к кэшу. Причем сделать эту возможность для всех функций выборки сразу, вне зависимости от того, что отдает mysql_fetch_assoc.

Сейчас гляну в сторону memcashed....... или как его там.


Глянул.
Цитата:
http://www.php.net/manual/ru/memcache.examples-overview.php пишет:
В этом примере происходит сохранение объекта в кеше и его последующее чтение. Объекты и другие не скалярные типы сериализируются перед сохранением, что делает невозможным хранение ресурсов наподобие идентетификаторов подключений в кеше.


т.е. не получится кэшировать

?

PHP:
скопировать код в буфер обмена
  1. function primer($x)
  2. {
  3.                 $this->connect_if_need();
  4.                 $x=intval($x);
  5.                 $sql="SELECT * FROM `objects` WHERE `id`='$x' LIMIT 10 ORDER BY RAND()";
  6.                 $res = mysql_query($sql);
  7.         // вот тут я хочу допустим кэшировать, каким образом лучше сделать?
  8.                 return $res;
  9. }

(Отредактировано автором: 17 Июля, 2012 - 11:28:07)

 
 Top
EuGen Администратор
Отправлено: 17 Июля, 2012 - 12:10:52
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




alxfro
Следует понимать, что возвращаемое функцией mysql_query() значение - это ресурс, его нельзя сериализовать, так как существует оно только в контексте породившего его процесса. Даже если бы представить, что его удалось закешировать - выигрыша это не принесет, так как с ним ровно так же нужно работать. Если вопрос в количестве соединений, то стоит использовать паттерн "одиночка".
alxfro пишет:
(вместо реального запроса запрос к кэшу)

- а это вообще иная функциональность, и она предоставляется самой СУБД. Если запрос возможно закешировать, то СУБД в следующий после кеширования раз не будет исполнять его полностью внось, а выдаст вместо этого результат из кеша.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 17 Июля, 2012 - 12:43:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




EuGen пишет:
а это вообще иная функциональность, и она предоставляется самой СУБД. Если запрос возможно закешировать, то СУБД в следующий после кеширования раз не будет исполнять его полностью внось, а выдаст вместо этого результат из кеша.

Вернее сказать - это удивительная штука MySQL. Другие СУБД кэшируют план запроса (как самую компактную, но энергоёмкую часть) и оперируемые данные, а не результат каждого запроса.

alxfro пишет:
// вот тут я хочу допустим кэшировать, каким образом лучше сделать?

Вытаскиваете весь результат в массив (или иную структуру, которая может сериализоваться) - и пишете в кэш.


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 17 Июля, 2012 - 12:51:14
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Мелкий
А, ну верно, но, поскольку речь идет о mysql_query, я опустил эти подробности.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
alxfro
Отправлено: 20 Июля, 2012 - 10:23:06
Post Id



Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




EuGen пишет:
стоит использовать паттерн "одиночка".

с этим проблем нет
EuGen пишет:

- а это вообще иная функциональность, и она предоставляется самой СУБД. Если запрос возможно закешировать, то СУБД в следующий после кеширования раз не будет исполнять его полностью внось, а выдаст вместо этого результат из кеша.

ну вот я делаю select * from x where 1 и мне никакой кэш не отдает. выдает на живую.

Приведите пож-ста пример по вашим словам выше, в каком случае используется кэш?
 
 Top
tuareg
Отправлено: 20 Июля, 2012 - 10:28:10
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




А Вы прямо так и не узнаете. Смотрите время выполнения скрипта. Если запрос в КЭШЕ то время будет на порядок меньше. Но надо учитывать, что объем КЭШ-а не безграничен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB