Getting the Database to Scale
The real limitation governing the scalability of most read-heavy sites is the number of available database handles. Scaling up the application server layer does not make sense if the database can only deal with a limited number of read/write handles. Some high-end Oracle cluster solutions may possibly help solve this problem, but MySQL clusters cannot be used since they do not support sub-queries. Standard master/slave configurations are therefore the only option. As far as CCI Europe is aware, all current Content Store sites are based on master/slave database configurations, regardless of what database they use.
It is important to remember that both the read and write connection pools in ECE must be configured to work on the master database instance. The slave databases are for data redundancy (standby backup) only, and should not be used to serve requests as this may cause unforeseen behaviour.
You are recommended to install
memcached on
each of your engine-hosts.
memcached
acts as a layer on top of the most
important
Content Store
cache,
/neo/xredsys/presentation/cache/PresentationArticleCache
,
and significantly reduces the number of database read operations. See
Distributed
Memory Cache for details of how to install
memcached
on your
engine-hosts.
The relationship between memcached and in-memory caches
The
Content Store
uses memcached
as a "level 2" cache for the
presentation layer. When the templates ask the presentation layer for
an article, it first checks its in-memory cache - even if
memcached
is in use. If the object isn't found in
the in-memory cache, then memcached
is asked. If
the object isn't available there either, then the object is loaded
from the database and copied to the in-memory and
memcached
caches. When memcached
is in use, some cache-related activities affect both the in-memory and
memcached
caches, while other activities affect
only the in-memory cache. For example, functional activities such as
adding and removing a specific item from a cache are propagated to
memcached
, whereas operational activities such as
flushing the cache or setting the cache size, are not propagated to
memcached
.