[dev] [commits] Horde branch master updated. 72ea817571b7bb561686a8d7d6f6cf8e8e7c6e24

Michael M Slusarz slusarz at horde.org
Thu Jan 23 18:04:17 UTC 2014


Quoting Jan Schneider <jan at horde.org>:

> Zitat von Michael M Slusarz <slusarz at horde.org>:
>
>> The branch "master" has been updated.
>> The following is a summary of the commits.
>>
>> from: ef6afb339341b56d1f7ae650d1cf5dd5a954aeb1
>>
>> 72ea817 [mms] Store registry cache on the local filesystem.
>>
>> Summary:  
>> http://github.com/horde/horde/compare/ef6afb339341b56d1f7ae650d1cf5dd5a954aeb1...72ea817571b7bb561686a8d7d6f6cf8e8e7c6e24
>>
>> -----------------------------------------------------------------------
>>
>> commit 72ea817571b7bb561686a8d7d6f6cf8e8e7c6e24
>> Author: Michael M Slusarz <slusarz at horde.org>
>> Date:   Wed Jan 22 21:13:22 2014 -0700
>>
>>    [mms] Store registry cache on the local filesystem.
>>
>>    Horde_Cache is designed for *user* data.  Registry caching is a
>>    system-level cache so it doesn't fit well there.
>
> Uh, why? There is absolutely no reason to consider Horde_Cache for  
> user data only. It's a general purpose caching library and can very  
> well be used for both system-wide and user-level data.
> If there is any other reason to implement a separate, less flexible  
> caching for registry data, please explain.

Horde_Cache is a "general-purpose" caching library.  It is *NOT* the  
best solution in every caching situation though.  That is a very  
short-sighted approach.

So just like everything else we do... the first implementation is with  
the basic building blocks.  Then, when analyzing for bottlenecks, you  
can implement custom solutions.  This just happened with  
Horde_Imap_Client caching code ... we've had a Horde_Cache driver for  
years.  But recent analysis indicated there is a substantial overhead  
in using this generalized code (10%+) vs. using a backend specifically  
tailored for the backend required.  (And see #2 below... this also  
gives the option of using a different caching backend then the general  
Horde version, which may be advantageous).

This is no different than rewriting portions of C programs in  
assembly.  Sure... these portions of code work when written in C.  But  
that doesn't mean they are the best performing solution.  Cost/benefit  
analysis.

I stand by my previous statement.  Horde_Cache is not meant for  
"system" level caching like this.  (Otherwise, I personally would have  
long ago figured out how to bootstrap Horde_Cache with  
Horde_Autoloader_Cache rather than writing an entirely different  
caching mechanism in that library that is partially redundant).

Some other issues:

1. Just because someone hasn't configured Horde_Cache at the Horde  
level does not mean they should not get the benefits of registry  
caching.
2. Unlike other cache items, this information is parsed on every  
server access.  Your caching strategy/backend decision will almost  
certainly be different when faced between a choice of 'fast' vs.  
'needs to hold large quantities of data'.  We don't currently have any  
way of specifying which cache backend should be used with which  
subsystem as I wrote on the dev@ list ... the paradigm that a single  
cache backend is the correct solution is outdated.
3. This should absolutely not be a user-configurable option.  This is  
something that needs to just work, and work with good performance in  
every situation.  This new code will do that.  The old code wouldn't.

michael

___________________________________
Michael Slusarz [slusarz at horde.org]



More information about the dev mailing list