Re: [PECL-DEV] Package proposal: a query cache plugin for mysqlnd

[email protected] (Stan) Thu, 24 Jun 2010 13:37:27 +0200
Newsgroups php.pecl.dev
Message-ID <[email protected]>
Hi,

This very interesting, as I was thinking about solution for transparent
DB queries caching (but still in user control) as well, I definitely
like low level solution like this. Just wanted to ask you whether there
is a way to invalidate cached record on update or delete, or is it done
automatically based on record key?

Stan


On 06/24/2010 12:59 PM, Ulf Wendel wrote:
> Hi,
> 
> we would like to add a query cache plugin extension for mysqlnd to PECL
> [1].
> 
> As of PHP 5.3.2 the MySQL native driver for PHP (mysqlnd), which can be
> used with ext/mysql, ext/mysqli and PDO_MYSQL, features an internal C
> plugin API [2, 3]. The proposed query cache plugin is a mysqlnd plugin.
> It is written in C and comes as a PHP extension. C gives you the best
> possible performance.
> 
> *Basic usage* example (see also [1]):
> 
>   $mysqli = new mysqli($host, $user, $password, $db, $port, $socket);
>   // Will be cached because of the SQL hint
>   $res = $mysqli->query("/*qc=on*/SELECT id FROM test WHERE id = 1");
>   var_dump($res->fetch_assoc());
>   $res->free();
> 
> The plugin hooks internal mysqlnd C calls. From a user space point of
> view it is virtually transparent because it does not change existing
> APIs. Like every other mysqlnd plugin it can be used with every PHP
> MySQL API (ext/mysql, ext/mysqli, PDO_MySQL).
> 
> *Key feaures* of the query cache [1]:
> 
>   - works with ext/mysql, ext/mysqli and PDO_MySQL
>   - supports unbuffered queries
> 
>   - controlled through SQL hints
> 
>   - default invalidation strategy: Time-to-live (TTL)
>     - TTL can be set globally or per query
>     - user space storage handler can implement any other
>       more sophisticated invalidation strategy
> 
>   - built-in storage handler:
>       - default (PHP hashes)
>       - APC
>       - Memcache
>       - SQLite
>       - user
> 
> *License*:
> 
>    PHP License
> 
> *Source* download, build instructions, requirements, ... :
> 
>   [1] http://forge.mysql.com/wiki/MySQLnd_Query_Cache_Plugin_for_PHP
> 
> *Testing/QA status*:
> 
> We officially call it a "prototype".
> 
> However, that is the official description. The extension comes with 58
> *.phpt tests which should cover more than 85% of the extensions source
> code, if you run the tests against all storage handler before generating
> code coverage figures.
> 
> All tests pass.
> 
> The code has been build and tested on some 30 platforms:
> 
>  - FreeBSD 6 (x86, x86_64)
>  - FreeBSD 7 (x86, x86_64)
>  - Linux ia64
>  - Linux RHEL 4, 5 (ia64, x86, x86_64)
>  - Linux SLES 9, 10 (ia64, x86, x86_64)
>  - Solaris 11 (x86, x86_64)
>  - a couple of Ubuntu and OpenSuSE x86/x86_64 used for development
>  - Win XP, VC9, x86
> 
> Valgrind likes the code with the exception of (my) APC handler. No
> valgrind warnings when using default, Memcache, SQLite and user space
> handler.
> 
> The package.xml calls the API "beta".
> 
> *Documentation*:
> 
>    Prepared, see [1] and [4].
> 
> *TODO*:
> 
>  - check almost untested package.xml
>  - align config.win32 and config.m4
>  - fix APC handler valgrind warnings
>  - write documentation in PECL/php.net format
> 
> Ulf
> 
> [1] http://forge.mysql.com/wiki/MySQLnd_Query_Cache_Plugin_for_PHP
> [2] http://blog.ulf-wendel.de/mysqlnd_plugin_ipc2010.html
> [3] http://www.slideshare.net/nixnutz/the-mysql
> [4]
> http://www.slideshare.net/nixnutz/buildin-query-caching-for-all-php-mysql-extensionsapis
> 
>