модуль DBCache. beta version. FAQ.

fixxxer

К.О.
Партнер клуба
$fp = fopen($file,"w"); // open file with Write permission
fputs($fp, $OUTPUT);
fclose($fp);
там в библиотеке так же сделано? %)
(качать с аплоадингов и прочих рапидшар это слишком)

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

dark-demon

d(^-^)b
простейшая обёртка для мэмкэша с автоматическим запросом через mysqli - десять строчек кода.
 

fixxxer

К.О.
Партнер клуба
враппер типа md5($query) делается очень быстро при хранении где угодно
это стандартное quickndirty решение когда актуальность данных не особо колышет и надо быстро разгрузить сервер с говнокодом
но в любом реальном проекте как правило нужно чистить либо обновлять кэш при соответствующих изменениях в бд
сразу замечу что на орм это дело кладется вообще влет, но в орм много других проблем:)

-~{}~ 06.01.08 00:39:

хранить статик хтмл в мемкеше это ммм спорное решение, покатит только если по каким то причинам единственная альтернатива - nfs :)
фс кэш эффективнее. разумеется сисктлы на сервере раздающем статику крутить надо
 

Alexandre

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

в мемкеше эта функция запускается по некоторому событию (переполнение кеша или таймаут...) но мемкеш - это демон.

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

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

если у кого есть какие идеи по чистильщику - то рад выслушать.

-~{}~ 06.01.08 00:58:

там в библиотеке так же сделано? %)
(качать с аплоадингов и прочих рапидшар это слишком)
читай пункт инсталляция и вопросы отпадут

-~{}~ 06.01.08 00:59:

но в любом реальном проекте как правило нужно чистить либо обновлять кэш при соответствующих изменениях в бд
в моем основном проекте так и сделано... сразу после реплики БД - запускается чистильщик кеша :) Опять же крон ;)

-~{}~ 06.01.08 01:04:

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

преимущество мемкеша - это использование его на отдельном сервере в кластере с несколькими WEB-серверами.

-~{}~ 06.01.08 01:20:

Т.е., например, если юзер добавил френда, то это станет заметно только после протухания соответствующего файла кэша?
вот это интересный момент...
если мы добавили нового френда, то мы, чтоб вычистить всесь задействованный кеш с участием данных френдов, должны знать все запросы, которые во всем проекте используют таблицу френдов... представляешь что для этого надо и как нужно реорганизовать проект?
Это уже скорее всего вопрос логики, а не уровня доступа к данным.
удалить файл на конкретный запрос - не проблема, это можно сделать и средствами пхп (всего три строки - можно и в одну):
PHP:
$md5query = md5($query);
$path = $cachePath + '/' + substr( $md5query ,0,2) + '/' + $md5query ;
unlink($path);
 

fixxxer

К.О.
Партнер клуба
> запускается чистильщик кеша
и чо, ВСЕ чистит? даже актуальное?

> читай пункт инсталляция и вопросы отпадут
да я уже посмотрел. open на запись без O_EXLOCK. фтопку. и с табами-пробелами что то ужасное, все скачет.

-~{}~ 06.01.08 03:18:

но это все фигня
меньше всего мне понятно накой делать екстеншеном то что пишется на php за 3 минуты
 

Alexandre

PHPПенсионер
> запускается чистильщик кеша
и чо, ВСЕ чистит? даже актуальное?
зачем тогда писать чистильщик, если это можно сделать rm -R cachedir
да я уже посмотрел
все-таки не удержался и посмотрел ;)
и с табами-пробелами что то ужасное, все скачет.
fixxxer а вот можно ли поподробнее...

-~{}~ 06.01.08 11:31:

open на запись без O_EXLOCK
и здесть тоже...
 

dark-demon

d(^-^)b
удалить файл на конкретный запрос - не проблема, это можно сделать и средствами пхп (всего три строки - можно и в одну)
это жёсткий хак. ты можешь гарантировать, что структура директорий никогда не изменится?
 

dark-demon

d(^-^)b
о том, что файлы создаются твоим расширением, а удаляться будут моим скриптом. нарушается принцип инкапсуляции свойственный ооп подходу.
 

dark-demon

d(^-^)b
лично мне бы понравилось такое решение: вместе с запросом передаём список таблиц от которых он зависит. а после изменений в бд - вызываем метод clearCacheForTables( 'table1', 'table2', .. )
 

zerkms

TDD infected
Команда форума
dark-demon
из запроса можно попытаться выдернуть имена таблиц. благо они в малом числе аспектов могут юзаться. навскидку: FROM, * JOIN
точно так же - и чистить можно автоматом - при запросах на модификацию, в которых число affected rows > 0
 

Alexandre

PHPПенсионер
лично мне бы понравилось такое решение: вместе с запросом передаём список таблиц от которых он зависит. а после изменений в бд - вызываем метод clearCacheForTables( 'table1', 'table2', .. )
интересная мысль, а как хранить эти зависимости?
 

zerkms

TDD infected
Команда форума
собственно после этого всего экстеншн превратится в подобие нативного кеширования, лишь с другим контейнером для хранения кеша, и без статистики ;)
 

Alexandre

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

-~{}~ 06.01.08 17:39:

собственно после этого всего экстеншн превратится в подобие нативного кеширования, лишь с другим контейнером для хранения кеша, и без статистики
согл
 

dark-demon

d(^-^)b
из запроса можно попытаться выдернуть имена таблиц.
попытаться-то можно, вот только надёжный парсинг запроса - нетривиальная задача.

а как хранить эти зависимости?
в бд? :)

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

во многих решениях, особенно распределенных, нарушается принцип инкапсуляции.
а многие скрипты представляют из себя лапшу с фрикодельками, особенно написанные на коленке :)
 

fixxxer

К.О.
Партнер клуба
>не удержался и посмотрел
это быстрее чем ждать пока ты правильно поймешь вопрос

>а вот можно ли поподробнее
ты линукc без манов поставил? какая жалость.
 

Сергей Тарасов

Профессор
Сама по себе идея написания подобного модуля весьма интересна. Согласен, что модуль сырой, и что многое можно еще сделать. Но разведенный здесь флейм по темам, совершенно далеким, от топика Alexandre совершенно неуместен и говорит только о незнании авторами вопроса.

Собственный кеш запросов, позволяющий кешировать не все подряд, а какие-то отдельные запросы причем на уровне DB-Layer (хотя тут можно сделать по-разному и вопрос спорный), ИМХО очень полезная штука. Думаю, нужно работать в этом направлении. У меня есть возможные применения этого продукта.

Пока посмотрел только код... После праздников буду собирать :)
 
Сверху