eZ component: Cache, Design, 1.3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:Author:   $Author$
:Revision: $Revision$
:Date:     $Date$

.. contents::

=====
Scope
=====

The scope of this document is to design the features to be implemented for the
Cache component version 1.3. This version will incorporate the following
features and fixes, which will be described in detail in this document:

- #11049 Using other storage engines beyond file-based storage.

============================================================
#11049 Using other storage engines beyond file-based storage
============================================================

Since file-storage is quite slow for web application needs, implementing
storage in memory is a good idea. Memory is limited so it is up to the
developer to use it with care.

Examples of memory-based storage engines:

`APC`_
  APC is a PECL extension that is rumored to be integrated into future
  versions of PHP.

`Memcache`_
  Memcache is similar to APC but it is extremely useful for a load balanced
  enterprise environment. This relies on memcached which is the most reliable
  and trusted method of sharing large volumes of cacheable data between many
  different servers.


Design
======

For each memory-based storage engine (`APC`_, `Memcache`_) a storage and a
backend class will be implemented.

Storage
-------

ezcCacheStorageMemory
  Abstract class which is a base for all memory-based storage classes. It uses
  a registry to keep the stored data and a search registry to allow fast
  fetching of the stored data.

ezcCacheStorageApcPlain
  This stores cache directly in the `APC`_ cache. It keeps a registry of all
  known caches to aid searching.

ezcCacheStorageMemcachePlain
  This stores the cache directly in `Memcache`_. This is extremely fast. It
  also keeps a registry of all known caches to aid searching.

ezcCacheStorageFileApcArray
  This is an extension of the ezcCacheStorageFileArray except it keeps cache
  in `APC`_ and in the file system. The filesystem is seen as the authority
  but the cache is read from `APC`_ as much as possible. This reduces reads
  to the filesystem and speeds up the cache dramatically.


Backend
-------

ezcCacheMemoryBackend
  Abstract class which is a base for all memory backends. Contains the
  abstract methods store, restore and delete which need to be implemented by
  all subclasses.

ezcCacheApcBackend
  Implements the store, restore and delete methods from ezcCacheMemoryBackend
  with calls to `APC`_.

ezcCacheMemcacheBackend
  Implements the store, restore and delete methods from ezcCacheMemoryBackend
  with calls to `Memcache`_.

.. _APC: http://pecl.php.net/package/APC
.. _Memcache: http://pecl.php.net/package/Memcache



..
   Local Variables:
   mode: rst
   fill-column: 79
   End: 
   vim: et syn=rst tw=79
