Есть выборка из таблицы вида:
SELECT * FROM table
Как сделать, чтобы каждый раз выборка происходила не из таблицы БД, а из кэша, причем кэш хранился б, например, 2 часа? И так "по кругу".
p.s. Возможно есть более продуктивный вариант, чтобы страница сайта грузилась быстрее и нагрузка на сервер была меньше ?
Спустя 9 минут, 31 секунда (12.04.2011 - 22:51) Nikitian написал(а):
А где планируете размещять кэш? Какого рода данные забираются, их размер? Сколько сейчас выполняется это запрос?
Не ответив на эти вопросы можно лишь тыкать пальцем в небо
Не ответив на эти вопросы можно лишь тыкать пальцем в небо
Спустя 1 час, 16 минут, 52 секунды (13.04.2011 - 00:08) Krevedko написал(а):
в файл кешируй. скажем серилизованный массив. и проверяй время создания файла, если 2 часа прошло, то все по "кругу"
Спустя 8 минут, 23 секунды (13.04.2011 - 00:17) Nikitian написал(а):
Krevedko
Файл не панацея. Вполне может быть, что в конкретном случае база будет работать быстрее и эффективнее файловой системы.
Файл не панацея. Вполне может быть, что в конкретном случае база будет работать быстрее и эффективнее файловой системы.
Спустя 14 минут, 22 секунды (13.04.2011 - 00:31) Krevedko написал(а):
ну если в таблице две строки, тогда да..база быстрее )
Спустя 2 часа, 22 минуты, 45 секунд (13.04.2011 - 02:54) kirik написал(а):
Krevedko
Если 2 строки, то разницы никакой
Nikitian правильно заметил:
Если 2 строки, то разницы никакой
Nikitian правильно заметил:
Цитата (Nikitian @ 12.04.2011 - 15:51) |
Не ответив на эти вопросы можно лишь тыкать пальцем в небо |
Спустя 9 часов, 24 минуты, 42 секунды (13.04.2011 - 12:18) Krevedko написал(а):
Я как-то хранил вообще уже сформированный хтмл, который обновлялся из базы два раза в день. Чтобы каждый раз не вытаскивать одно и то же.
Спустя 10 минут, 33 секунды (13.04.2011 - 12:29) T1grOK написал(а):
memcached
Спустя 36 минут, 17 секунд (13.04.2011 - 13:05) UnWind написал(а):
Хм. У каждой СУБД есть собственный кеш, можно делать выборку из него, если уж так не хочется постоянно обращаться к БД.
Например Oracle дает возможность открыть доступ к кешу определенными запросами, поставить тайм на чистку кеша, и при каких запросах сохранять кеш.
В общем все условия для работы.
По вопросу управления кешем СУБД MySQL, можно почитать ТУТ
На практике данный вариант гораздо результативней, чем хранение кеша отдельно в файлах средствами PHP.
Например Oracle дает возможность открыть доступ к кешу определенными запросами, поставить тайм на чистку кеша, и при каких запросах сохранять кеш.
В общем все условия для работы.
По вопросу управления кешем СУБД MySQL, можно почитать ТУТ
На практике данный вариант гораздо результативней, чем хранение кеша отдельно в файлах средствами PHP.
Спустя 9 минут, 35 секунд (13.04.2011 - 13:15) Krevedko написал(а):
Цитата (UnWind @ 13.04.2011 - 10:05) |
Хм. У каждой СУБД есть собственный кеш, можно делать выборку из него, если уж так не хочется постоянно обращаться к БД. Например Oracle дает возможность открыть доступ к кешу определенными запросами, поставить тайм на чистку кеша, и при каких запросах сохранять кеш. В общем все условия для работы. По вопросу управления кешем СУБД MySQL, можно почитать ТУТ На практике данный вариант гораздо результативней, чем хранение кеша отдельно в файлах средствами PHP. |
ну. хранение в файлах. о чем я тут и говорю. кстати это и есть
Цитата |
хранение кеша отдельно в файлах средствами PHP. |
file_get_contents, file_put_contents
Спустя 6 минут, 53 секунды (13.04.2011 - 13:22) UnWind написал(а):
Krevedko
Цитата |
ну. хранение в файлах. о чем я тут и говорю. кстати это и есть |
Ну просто недопонял наверное
Цитата |
file_get_contents, file_put_contents |
Ну зачем же изобретать велосипед ?
Когда можно обратится к MySQL серверу на вывод кеша за определенное время, в нужной форме ?
Или же изначально отредактировать форму сохранения кеша
А не записывать постоянно по строчно лог в файл
Спустя 35 минут, 33 секунды (13.04.2011 - 13:57) Krevedko написал(а):
что есть построчно ?
я делал как. получал селектом все нужные мне записи. потом серилизовывал полученный массив и складывал в файл (или даже сразу в темплейт распихивал данные и писал хтмл-код сразу в файл).
при загрузке сравнивается время создания и если надо, обновляет кеш.
в статье разве не также делают ?
я делал как. получал селектом все нужные мне записи. потом серилизовывал полученный массив и складывал в файл (или даже сразу в темплейт распихивал данные и писал хтмл-код сразу в файл).
при загрузке сравнивается время создания и если надо, обновляет кеш.
в статье разве не также делают ?
Спустя 17 минут, 7 секунд (13.04.2011 - 14:14) UnWind написал(а):
Krevedko
Хм. Я имел ввиду другое.
MySQL записывает результат выполнения предыдущего запроса, после чего мы делаем обращение к серверу MySQL,
он поднимает результат выполнения предыдущего запроса из кеша и если предыдущий запрос был выполнен к примеру позже 2х часов, то является недействительным и регистрируется новый запрос к таблице.
Как минимум можно создать триггер для выполнения данной операции.
У нас просто есть база населения на работе, и к ней часто обращаются множество пользователей.
База огромнейшая и для того, что бы сократить количество запросов к базе - мы написали вот такой вот триггер, точнее доработали.
Такая функция вообще стандартно есть в Oracle, в MySQL так же должна быть.
Результативность гораздо выше, чем мы записывали ранее кеш в файлы.
Такой же опыт повторял с сайтом, а именно со страничной навигацией.
Не смотря на количество извлекаемой информации и количество запросов, такой способ оказался гораздо лучше.
Хм. Я имел ввиду другое.
MySQL записывает результат выполнения предыдущего запроса, после чего мы делаем обращение к серверу MySQL,
он поднимает результат выполнения предыдущего запроса из кеша и если предыдущий запрос был выполнен к примеру позже 2х часов, то является недействительным и регистрируется новый запрос к таблице.
Как минимум можно создать триггер для выполнения данной операции.
У нас просто есть база населения на работе, и к ней часто обращаются множество пользователей.
База огромнейшая и для того, что бы сократить количество запросов к базе - мы написали вот такой вот триггер, точнее доработали.
Такая функция вообще стандартно есть в Oracle, в MySQL так же должна быть.
Результативность гораздо выше, чем мы записывали ранее кеш в файлы.
Такой же опыт повторял с сайтом, а именно со страничной навигацией.
Не смотря на количество извлекаемой информации и количество запросов, такой способ оказался гораздо лучше.
Спустя 23 минуты, 47 секунд (13.04.2011 - 14:38) Krevedko написал(а):
но ты же даешь ссылку на статью, где идет запись и чтение из файла средствами пхп. я делаю практически точно также...или я что-то не догоняю
Спустя 6 часов, 38 минут, 23 секунды (13.04.2011 - 21:17) kirik написал(а):
Цитата (Krevedko @ 13.04.2011 - 07:38) |
или я что-то не догоняю |
Нас уже два
Спустя 4 минуты, 40 секунд (13.04.2011 - 21:21) neadekvat написал(а):
Цитата (Krevedko @ 13.04.2011 - 01:08) |
серилизованный |
Сериализация.
По поводу ссылки UnWind - не смотрите на нее, читайте что он говорит. Скорее всего, по ключевикам нашел, а текст не читал (просто пруф нужен был).
Спустя 2 часа, 14 минут, 43 секунды (13.04.2011 - 23:36) kirik написал(а):
Цитата (neadekvat @ 13.04.2011 - 14:21) |
читайте что он говорит |
Я просто не совсем понимаю что он говорит..
Цитата (UnWind @ 13.04.2011 - 07:14) |
MySQL записывает результат выполнения предыдущего запроса, после чего мы делаем обращение к серверу MySQL, он поднимает результат выполнения предыдущего запроса из кеша и если предыдущий запрос был выполнен к примеру позже 2х часов, то является недействительным и регистрируется новый запрос к таблице. |
Я так понимаю что это стандартное поведение СУБД. Только что такое 2 часа? Я тонкости не знаю, но могу предположить что СУБД сбрасывает кэш не по истечению времени, а по изменению таблицы/строки.
Цитата (UnWind @ 13.04.2011 - 07:14) |
Как минимум можно создать триггер для выполнения данной операции. |
Триггер для какой операции? Опять же сброс кэша движок БД производит сам, и в этот процес нам не вклиниться AFAIK..
Спустя 12 часов, 40 минут, 15 секунд (14.04.2011 - 12:16) UnWind написал(а):
kirik
Про 2 часа - выше пример приводили, что хотелось бы сбрасывать кеш через 2 часа, от времени его создания.
Точнее удалять файлик в котором он должен был хранится. (Это то, что предлогали сделать методами PHP)
На том же примере, только с использованием Oralce - на фирме сделали то же самое, только гораздо быстрее с использованием кеш хранилища Oracle.
Там есть специальные модули и конфиги для доступа к кешу и управления им.
То же самое я предлогаю сделать на MySQL, так как уверен на процентов 70, что в нем есть то же самое.
Триггер - ну тут да, ты прав это не совсем триггер, а описанная функция, даже бы сказал подправленный конфиг (Oracle Data Bases).
В нем описанна лишь форма, в которой мы получаем кеш от базы при повторном запросе.
А кеш да, стерается при изменении поля таблицы или же как я уже сказал через опрееделенный таймаут.
Если даже прочитать руководство по Oracle, там есть руководство по настройке кеша.
Но проблема в том - что кеш сохраняется немного не правильно, а именно он записывает результат всего поиска по базе и хранит его в кеше.
При настройке как я говорю, он сохраняет только нужную запис, и выставляет тайм хранения (Так же можно добавить/убрать чистки кеша при обновлении записи) соотствественно есть разница искать ли среди всего кеша определенную запись, или уже отсортированные, часто используемые записи.
Про 2 часа - выше пример приводили, что хотелось бы сбрасывать кеш через 2 часа, от времени его создания.
Точнее удалять файлик в котором он должен был хранится. (Это то, что предлогали сделать методами PHP)
На том же примере, только с использованием Oralce - на фирме сделали то же самое, только гораздо быстрее с использованием кеш хранилища Oracle.
Там есть специальные модули и конфиги для доступа к кешу и управления им.
То же самое я предлогаю сделать на MySQL, так как уверен на процентов 70, что в нем есть то же самое.
Триггер - ну тут да, ты прав это не совсем триггер, а описанная функция, даже бы сказал подправленный конфиг (Oracle Data Bases).
В нем описанна лишь форма, в которой мы получаем кеш от базы при повторном запросе.
А кеш да, стерается при изменении поля таблицы или же как я уже сказал через опрееделенный таймаут.
Если даже прочитать руководство по Oracle, там есть руководство по настройке кеша.
Но проблема в том - что кеш сохраняется немного не правильно, а именно он записывает результат всего поиска по базе и хранит его в кеше.
При настройке как я говорю, он сохраняет только нужную запис, и выставляет тайм хранения (Так же можно добавить/убрать чистки кеша при обновлении записи) соотствественно есть разница искать ли среди всего кеша определенную запись, или уже отсортированные, часто используемые записи.
Спустя 6 часов, 8 минут, 38 секунд (14.04.2011 - 18:25) Guest написал(а):
По тех. причинам не мог попасть на форум, смотрю дискуссия идёт без меня. И так:
1) "А где планируете размещять кэш? " - не знаю где лучше или в БД или на хостинге?
2) "Какого рода данные забираются, их размер?" - так понимаю это тип данных? тогда это INT, TEXT, FLOAT. Каждая таблица содержит от 200 строк
3) "Сколько сейчас выполняется это запрос?"
а) в phpmyadmin - была выведена надпись по одной из таблиц "Отображает строки 0 - 538 (539 всего, запрос занял 0.0162 сек.)", в этом же окне все данных выводились на экран около 7 сек.
б) на сайте - эта же таблица выводится по времени сказать точно не могу, где-то 2-3 сек. рисуется страница после перехода по ссылке на содержание этой таблицы (в Опере и ФФ, ИЕ рисует гораздо дольше)
4) UnWind, прочитав предварительно пару ознакомительных статей про кэширование MySQL, узнал, что кэширование стандартными методами БД невозможно для запроса вида (возможно я ошибаюсь):
В основном информация на страницах сайта выводится запросом (который указал выше), хочу разобраться с кэшированием, чтобы перейти к следующему этапу:
Не знаю на сколько это оправдано, или вообще ли нужно - кэшировать скрипт поиска по сайту? где информация в основном выводится из этих же таблиц
1) "А где планируете размещять кэш? " - не знаю где лучше или в БД или на хостинге?
2) "Какого рода данные забираются, их размер?" - так понимаю это тип данных? тогда это INT, TEXT, FLOAT. Каждая таблица содержит от 200 строк
3) "Сколько сейчас выполняется это запрос?"
а) в phpmyadmin - была выведена надпись по одной из таблиц "Отображает строки 0 - 538 (539 всего, запрос занял 0.0162 сек.)", в этом же окне все данных выводились на экран около 7 сек.
б) на сайте - эта же таблица выводится по времени сказать точно не могу, где-то 2-3 сек. рисуется страница после перехода по ссылке на содержание этой таблицы (в Опере и ФФ, ИЕ рисует гораздо дольше)
4) UnWind, прочитав предварительно пару ознакомительных статей про кэширование MySQL, узнал, что кэширование стандартными методами БД невозможно для запроса вида (возможно я ошибаюсь):
SELECT * FROM table
В основном информация на страницах сайта выводится запросом (который указал выше), хочу разобраться с кэшированием, чтобы перейти к следующему этапу:
Не знаю на сколько это оправдано, или вообще ли нужно - кэшировать скрипт поиска по сайту? где информация в основном выводится из этих же таблиц
Спустя 1 минута, 33 секунды (14.04.2011 - 18:26) MailRes написал(а):
Аж не залогинился я
Предыдущее сообщение моё
Предыдущее сообщение моё
Спустя 1 час, 47 минут, 39 секунд (14.04.2011 - 20:14) MailRes написал(а):
UnWind, прочитал статью по твоей ссылке, счс буду пробовать, разбираться дальше
Спустя 51 минута, 26 секунд (14.04.2011 - 21:05) kirik написал(а):
UnWind
Я с Oracle не работал ни разу, но наслышан что это мощная БД. Просто ТС говорит о MySQL, а здесь тебя не пустят на уровень управления кэшем. Ты можешь отключить/включить/отдать больше памяти. А решать что записывать и как - нет.
MailRes
Судя по вашему описанию, вам нужно пересматривать структуру приложения, кэш тут не поможет.
Я с Oracle не работал ни разу, но наслышан что это мощная БД. Просто ТС говорит о MySQL, а здесь тебя не пустят на уровень управления кэшем. Ты можешь отключить/включить/отдать больше памяти. А решать что записывать и как - нет.
MailRes
Судя по вашему описанию, вам нужно пересматривать структуру приложения, кэш тут не поможет.
Цитата (Guest @ 14.04.2011 - 11:25) |
"Отображает строки 0 - 538 (539 всего, запрос занял 0.0162 сек.)", в этом же окне все данных выводились на экран около 7 сек. |
Слабо можно представить чтобы одна запись делала разницу в 7 секунд
Спустя 10 часов, 57 минут, 12 секунд (15.04.2011 - 08:03) UnWind написал(а):
kirik
Понятненько) Ну так бы сразу.
Я просто работаю только исключительно с Oracle, так как просто партнером являюсь и все их платные услуги у меня со скидкой...
ну и в общем для поддержания партнерства приходится с ней работать регулярно...
Кхе, ну тогда нужно искать другой вариант, например как в статье, что я дал
Понятненько) Ну так бы сразу.
Я просто работаю только исключительно с Oracle, так как просто партнером являюсь и все их платные услуги у меня со скидкой...
ну и в общем для поддержания партнерства приходится с ней работать регулярно...
Кхе, ну тогда нужно искать другой вариант, например как в статье, что я дал
Спустя 3 дня, 13 часов, 18 минут, 20 секунд (18.04.2011 - 21:21) MailRes написал(а):
kirik
"запрос занял 0.0162 сек." - ниже ведь выводятся результаты запроса в phpmyadmin, и они постепенно "дорисовываются", может phpmyadmin так сделана?
Может подскажете куда копать - раз кэш не поможет, а структуру приложения надо переделать???
"запрос занял 0.0162 сек." - ниже ведь выводятся результаты запроса в phpmyadmin, и они постепенно "дорисовываются", может phpmyadmin так сделана?
Может подскажете куда копать - раз кэш не поможет, а структуру приложения надо переделать???
Спустя 1 час, 41 минута, 53 секунды (18.04.2011 - 23:03) kirik написал(а):
Цитата (MailRes @ 18.04.2011 - 14:21) |
"запрос занял 0.0162 сек." - ниже ведь выводятся результаты запроса в phpmyadmin, и они постепенно "дорисовываются", может phpmyadmin так сделана? |
Реальное время запроса - 0.0162 сек. А то что данные подгружаются долго не есть проблема MySQL и кэш абсолютно не нужен. Не обращайте внимания.
Спустя 8 минут, 28 секунд (18.04.2011 - 23:11) Dr.Mars написал(а):
Цитата (MailRes @ 12.04.2011 - 23:42) |
Всем привет! Есть выборка из таблицы вида: SELECT * FROM table Как сделать, чтобы каждый раз выборка происходила не из таблицы БД, а из кэша, причем кэш хранился б, например, 2 часа? И так "по кругу". p.s. Возможно есть более продуктивный вариант, чтобы страница сайта грузилась быстрее и нагрузка на сервер была меньше ? |
А какая цель кеша? в данном примере mysql создаст кеш сама, помочь ей можно слегка подредактировав my.cnf
Спустя 1 минута, 20 секунд (18.04.2011 - 23:13) kirik написал(а):
Dr.Mars
Топик почитай.
Топик почитай.
Спустя 12 часов, 20 минут, 17 секунд (19.04.2011 - 11:33) alex12060 написал(а):
0,162 сек? Эт немного
Вполне нужно делать КЭШ когда на это время влияет 30000 человек за раз.
А вообще, я могу предположить, что все 500 записей за раз не выводятся, поэтому, использовать целесообразно ЛИМИТ
Вполне нужно делать КЭШ когда на это время влияет 30000 человек за раз.
А вообще, я могу предположить, что все 500 записей за раз не выводятся, поэтому, использовать целесообразно ЛИМИТ
Спустя 1 день, 10 часов, 20 минут, 34 секунды (20.04.2011 - 21:53) MailRes написал(а):
alex12060, как раз на сайте все 500 и выводятся на странице.
Возможно отступление от темы: (структура выводимых таблиц одинаковая, кол-во записей разное)
1) Если выводится таблица с 200-300 записями, то страница в Опере, ФФ и ИЕ отображается нормально
2) Если выводится таблица от ~470 записей, то страница в Опере и ФФ отображается нормально, в ИЕ долго загружается, идёт нагрузка на проц ПК, затем если переходить на другую страницу, то ИЕ пишет что-то типа - "Выполняемые сценарии тормозят работу, прервать их выполнение? (Если продолжить выполнение то комп может зависнуть)" - это зависит от MySQL или это уже Java тупит? Ну или я, когда делал Java'ой, чтобы при наведение курсора мыши на строку, она подсвечивалась серым цветом... ??
3) Если верить статистике хостеров, то на сайте в среднем 150-200 уников каждый день. Может кэш пока не причем и надо копать в другое направление??
Возможно отступление от темы: (структура выводимых таблиц одинаковая, кол-во записей разное)
1) Если выводится таблица с 200-300 записями, то страница в Опере, ФФ и ИЕ отображается нормально
2) Если выводится таблица от ~470 записей, то страница в Опере и ФФ отображается нормально, в ИЕ долго загружается, идёт нагрузка на проц ПК, затем если переходить на другую страницу, то ИЕ пишет что-то типа - "Выполняемые сценарии тормозят работу, прервать их выполнение? (Если продолжить выполнение то комп может зависнуть)" - это зависит от MySQL или это уже Java тупит? Ну или я, когда делал Java'ой, чтобы при наведение курсора мыши на строку, она подсвечивалась серым цветом... ??
3) Если верить статистике хостеров, то на сайте в среднем 150-200 уников каждый день. Может кэш пока не причем и надо копать в другое направление??
Спустя 8 минут, 10 секунд (20.04.2011 - 22:02) kirik написал(а):
Цитата (MailRes @ 20.04.2011 - 14:53) |
в ИЕ долго загружается, идёт нагрузка на проц ПК, затем если переходить на другую страницу, то ИЕ пишет что-то типа - "Выполняемые сценарии тормозят работу, прервать их выполнение? (Если продолжить выполнение то комп может зависнуть)" - это зависит от MySQL или это уже Java тупит? |
Это ИЕ тупит. Сложно ему рендерить такую большую, тяжелую страницу. MySQL как отдавала за 0.02 секунды, так и будет отдавать, от браузера это не зависит никак.
Цитата (MailRes @ 20.04.2011 - 14:53) |
Если верить статистике хостеров, то на сайте в среднем 150-200 уников каждый день. Может кэш пока не причем и надо копать в другое направление?? |
Если вам хоть немного жалко своих пользователей, то урежте количество выводимых строк до 10-15.
Спустя 1 час, 8 минут, 23 секунды (20.04.2011 - 23:10) MailRes написал(а):
Цитата |
Если вам хоть немного жалко своих пользователей, то урежте количество выводимых строк до 10-15. |
Об этом уже думал, видимо придется к этому придти
Цитата |
Это ИЕ тупит. Сложно ему рендерить такую большую, тяжелую страницу. MySQL как отдавала за 0.02 секунды, так и будет отдавать, от браузера это не зависит никак. |
Видел на других сайтах, что выводилось оч. много записей с таким же скриптом подсвечивания строк при наведении мышкой, но там всё шутро работало... Или я опять не туда копаю?