On Tuesday 09 December 2008, Martin Hoffmann wrote:
[DB API..]
Since we were talking about it internally, I was thinking a bit about the future of usrloc. It has this thing where it caches entries in memory. Now, technically usrloc is just a database (or maybe a database on top of a database). Wouldn't it make sense to get rid of it and instead implement a database module that caches and then simplify the registrar module to use database queries directly?
Hi Martin,
indeed, usrloc is more or less just a abstraction layer on top of the DB. Some people (e.g. we) even don't use the provided caching infrastructure because they want to keep it simple, or extend the standard usrloc with custom patches.
This is one of the reasons i don't really like the idea of moving the cache to the DB layer, because this would probably increase the overhead of all DB operations, and making the whole system more complex.
This has the benefit that other modules can suddenly use caching, too, if they want. In SER, the domain module for instance already does some caching, so there is some code replication.
I believe the database API to be simple enough to provide caching especially since the new model with pre-registered queries allows the cache to be set up with those queries in mind.
Another issue is, that in order to really benefit from the cache, the cache needs a certain structure or layout, some locking facilities etc.. that must be adapted to the needs of the application. So i doubt that this general DB cache can be used efficiently from usrloc, and some other modules, e.g. carrierroute or the domain module.
If this cache just acts as a generic query result cache, this is already included in common database servers, like mysql. If their standard cache behaviour is not sufficient, i think this can be increased in the configuration, given that enough memory is available. If some want to avoid the remote server communication overhead, just use a local replication slave. So i don't see at the moment a compelling need to include functionality like this in our codebase.
If there is a need for a generic (object) caching facility, i think we should rather try to use an existing implementation, perhaps something like memcached, instead of implementing a complete new one.
Cheers,
Henning