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

WP

^_^
Alexandre
> довольно таки тривиальное решение, которое на пхп пишется максимум 4 часа - собрал в ввиде экстеншена?
Сравни со скомпилированным шаблоном + eAcceleratator ;)))

Думаю, DBcache в таком виде не требуется, т.к. СУБД по сути лучший кеш. Кешировать стоит только результаты тяжелых запросов когда время жизни кеша не определяется частотой изменения таблиц. Я в таких случаях делаю INSERT ... SELECT в таблицу `cache`, а далее кручу как хочу.
Если уж хочется написать какую-то приблуду (именно приблуду) для кеша, то это надо делать в виде демона, т.к. в любой мало-мальски серьезной системе задействовано больше одного сервера (сервера СУБД отделены от выдачи).
Стоит еще покурить TDB :)
 

fixxxer

К.О.
Партнер клуба
>он мне так и не объяснил, что он имел ввиду

1. чистится кэш
2. два процесса начинают практически одновременное выполнение одного и того же sql запроса
3. на второй контекст переключается где-то после того как первый открыл файл с кэшем
чо будет? =)

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

про tdb кстати правильное замечание, если все на одном сервере и memcached кажется излишеством.
 

Alexandre

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

-~{}~ 07.01.08 18:24:

1. чистится кэш
2. два процесса начинают практически одновременное выполнение одного и того же sql запроса
3. на второй контекст переключается где-то после того как первый открыл файл с кэшем
чо будет? =)
а что конкретно ты предлагаешь ?
плизз ссылку - где почитать, как решить...
Стоит еще покурить TDB
посмотрю.
 

WP

^_^
Alexandre
> упросщенное решение.
Упрощенное решение в виде экстеншена? :)
 

Alexandre

PHPПенсионер
ты совершенно серьёзно сравниваешь свою кешировалку и блитз???
я не сравниваю, я провожу аналогию... это разные вещи, а на вопрос ты мне так и не ответил, уйти в сторону проще...
Конечно у Алексея и код чище, у него и опыта больше. Он над блицем и работал - год или более...
кто не делает, тот и не ошибается, так что я благодарен всем, кто поможет сделать это решение лучше.

-~{}~ 07.01.08 19:00:

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

WP

^_^
Alexandre
А чем не устраивает INSERT ... SELECT в таблицу `cache`?
 

Alexandre

PHPПенсионер
WP а - чем тебя не устраивал смарти?
скоростью. так и меня - это не устраивает скоростью.

-~{}~ 07.01.08 19:08:

Кешировать стоит только результаты тяжелых запросов когда время жизни кеша не определяется частотой изменения таблиц.
а кто говорит - что кешировать надо все??? специально для этого замутил привязку к mysqli
 

WP

^_^
Alexandre
Что-то не верится что ты напишешь нечто быстрее чем MySQL. Но тогда зачем MySQL? Мути сразу БД.

Не только и не столько скоростью. Для ускорения я мог по намного более простому пути.

-~{}~ 07.01.08 20:07:

з.ы. [m]sqlite[/m].
 

phprus

Moderator
Команда форума
Alexandre
> 1. чистится кэш
> 2. два процесса начинают практически одновременное выполнение одного и того же sql запроса
> 3. на второй контекст переключается где-то после того как первый открыл файл с кэшем
> чо будет? =)
а что конкретно ты предлагаешь ?
плизз ссылку - где почитать, как решить...
Надо как-то блокировать доступ к этому файлу.
Например, при помощи функции int flock(int fd, int operation);
Вполне возможно что этого будет достаточно, так как в модуле сессий файлы вроде бы блокируются только flock'ом (при беглом просмотре кода каких-либо других блокировок мною найдено небыло)
 

fixxxer

К.О.
Партнер клуба
>где почитать, как решить

я сразу же и сказал как решить ;)

а если открывать файлик ДО выполнения запроса то и проблема с 2+ уходящими mysqlю запросами решается.

-~{}~ 07.01.08 21:46:

>Например, при помощи функции int flock(int fd, int operation);
флок это по fd
раз уж там обычный open то можно сразу им и лочить
 

phprus

Moderator
Команда форума
fixxxer
[offtopic]
раз уж там обычный open то можно сразу им и лочить
А можно пример, а то я в "man 2 open" ничего про блокировку не нашел. Или я плохо искал?
[/offtopic]

а если открывать файлик ДО выполнения запроса то и проблема с 2+ уходящими mysqlю запросами решается.
В смысл решается проблема с параллельно выполняющимися запросами и с возможным (про возможные повреждения это догадка. я не на столько подробно смотрел код, чтоб сказать возможны ли они сдесь или нет) повреждением файла?
 

Alexandre

PHPПенсионер
а если открывать файлик ДО выполнения запроса то и проблема с 2+ уходящими mysqlю запросами решается
спасибо, пошел курить...
значить открываем с опцией open( filename, O_RDONLY| O_EXCL)
или лучше блокировку ставить?

вообще-то я проверял наличие файла с помошью stat()...

а как одновременно съэмулировать два запроса к файлу одновременно, чтоб на практике разрулить эту ситуацию?
 

fixxxer

К.О.
Партнер клуба
sleep после open =)

-~{}~ 07.01.08 23:52:

а ваще я бы посмотрел ext/session
там как минимум портабельная реализация

-~{}~ 07.01.08 23:54:

а между stat и open переключение контекста тоже спокойно может произойти ))

и еще бооольшой вопрос как твой код себя поведет при тредовой сборке
 

Alexandre

PHPПенсионер
а ваще я бы посмотрел ext/session
там как минимум портабельная реализация
спасибо - учту.

-~{}~ 09.01.08 00:42:

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

MiksIr

miksir@home:~$
Alexandre, как я понимаю, по запросу строится md5 хеш, ищется файл, если нет, пробрасывается на драйвер db, результат пишется в файл? Все? Скачать исходники не получается, увы.
 

Alexandre

PHPПенсионер
как я понимаю, по запросу строится md5 хеш, ищется файл
да,
далее используется mysql API напрямую, без врапперов на модуль mqsqli
вытаскиваются данные и пишутся в файл в формате csv

за счет того, что парарельно идет запись в файл, то работает чуть медленнее чем методы самого модуля mysqli.

-~{}~ 17.01.08 03:17:

внесены изменения в первый пост
в частности постоянная ссылка

1) пофиксил pthread_safe
2) реализовал метод clear($query) - чистка данного файла кеша
3) реализован метод fetchFrame(top, limit)
top - с какой записи отдавать кусок фрейма
limit - сколько записей отдавать
4) упрощена инсталляция

если отсутствует limit - отдается начиная с top до конца
если отсутствует top - отдается весь запрос

Спасибо всем, кто участвовал в тестировании.
 
Сверху