За последние 24 часа нас посетили 17498 программистов и 1598 роботов. Сейчас ищут 1410 программистов ...

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

Тема в разделе "Решения, алгоритмы", создана пользователем Alexandre, 5 янв 2008.

  1. Alexandre

    Alexandre Активный пользователь

    С нами с:
    8 сен 2006
    Сообщения:
    45
    Симпатии:
    0
    где взять пока временная ссылка (30 дней) http://www.uploading.com/files/RYXBWP64/dbcache.zip.html
    возможно скоро открою постоянную страницу


    как работает
    берет хеш запроса, который является именем файла. если время последнего update +livetime (sec) менее time() - текущее время то кеш считается устаревшим, данные берутся из БД, как впрочем, если данных в кеше нет.
    если кеш - актуален, то данные берутся из кеша.

    что представляет кеш csv файл, в котором символы ';' и '\n' закодиорованны.

    Зависимости
    PHP от 5.1 и выше
    Модуль dbcache зависит от модуля mysqli, модуль mysqli должен быть установлен.

    Тестирование:
    На Linux Mandrake 10.0 PHP 5.2.0 - замечался SigFault
    На Linux Mandrake 10.0 PHP 5.1.4 - стабильно
    На FreeBSD 6.0 PHP 5.2.2 - стабильно

    Инсталляция.

    1. скопировать всю папку dbcache в php-src/ext
    2. скопировать все заголовочные файлы из php-src/ext/mysqli в /usr/local/includes/php/ext/mysqli
    cp php-src/ext/mysqli/*.h /usr/local/includes/php/ext/mysqli
    3. cd php-src/ext/dbcache
    4. phpize
    5. ./configure
    6. добавить пути в Makefile :
    -I/usr/local/include/mysql -I/usr/local/include/php/ext/date/lib -I/usr/local/include/php/ext/mysqli
    у меня это строка 34 см. Makefile.old : INCLUDES = ...
    очевидно это можно сделать с помощью configure, буду любезен за подсказку.
    7. make && make install
    8. создать директорию для кеша.

    Пример использования:
    PHP:
    1.  
    2.     $mysqli = new mysqli("localhost", "akalend", "", "test") or die('Connect failed');
    3.        
    4.     $cacheDir = '/home/akalend/cache';  // полный путь до кеш-директории.
    5.     $dc = new dbCache( $cacheDir );
    6.     $dc->bind( $mysqli ); // привязка к  mysqli object
    7.  
    8.     $query="select * from test_data limit 50";
    9.     $livetime = 500;                // время жизни кеша в секундах
    10.     $dc->query($query, $livetime);      //  выполнение запроса
    11.     while( $res = $dc->fetch() ){           // fetching data, возвращает массив строки или false при достижении конца.  
    12.         print_r($res);
    13.     }
    14.     print_r( $dc->getInfo() );          // вывод отладочной информации
    Ограничения
    - размер одного поля не должен превышать 1000 символов
    - не используются BLOB поля (если нужно, то решим в ближайшее время)

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

    Планируется ли привязка модуля к PDO mysql?
    пока нет, так же как и к другим БД, хотя на мой взгляд это не так и сложно.
    хочу довести модуль до стабильной версии.

    Почему указывается полный путь:
    ну, как правило - файловый кеш выносится за приделы httpdoc, даже желательно вынести на другой физический диск.
    всегда можно знать полный путь до своего httpdoc.

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

    Планы.
    в планах привязка к PDO и мемкешу.
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Эм, скажите, зачем это в виде PHP extension, если на PHP это делается в десять строк и никаких ограничений на данные?
     
  3. Alexandre

    Alexandre Активный пользователь

    С нами с:
    8 сен 2006
    Сообщения:
    45
    Симпатии:
    0
    почти тоже самое сказали в PHPClub.