You really don't want this in DBIx::Class, you want fine grain control of when 
to fetch from the database, etc. Anyone can build their layer on top of 
DBIx::Class to implement caching.

Using something like memcached would save you some database hits, you can 
either set the values to expire at a specified time / number of seconds, or you 
can set/delete keys as part of the procedures at insert/update/delete on the 
database.

If you you Postgresql, you can actually take advantage of PgPool, which will 
give you the option to enable a caching layer… 

Francisco



On Jan 11, 2013, at 4:01 AM, Alexander Hartmaier 
<alexander.hartma...@t-systems.at> wrote:

> On 2013-01-10 16:15, Jesse Sheidlower wrote:
>> In one of my apps, I have a number of tables that contain values that
>> change very rarely. Think of something like a "category" table in an
>> e-commerce app--they're mostly static, but every now and then you need
>> to change or add or delete a category. These occasional changes do,
>> however, need to be made by a (privileged) user, rather than a
>> developer, so I can't just put them in the config file and edit this and
>> restart the app when necessary. Since I don't know when they might
>> change, I don't know how I could cache them, because when a change is
>> made it needs to take effect immediately.
>> 
>> These tables are used on almost every request. The result is that most
>> of my controllers end up looking something like this, or having
>> something like this at the end of them:
>> 
>> sub add : Local {
>>   my ( $self, $c ) = @_;
>> 
>>   $c->stash->{title} = 'Add a new lemma';
>> 
>>   $c->stash->{batches} = $c->model('WordsDB::Batch')->search();
>>   $c->stash->{statuses} = $c->model('WordsDB::Status')->search();
>>   $c->stash->{regions} = $c->model('WordsDB::Region')->search();
>>   $c->stash->{subjects} = $c->model('WordsDB::Subject')->search();
>> 
>>   $c->stash->{template} = 'add.tt';
>> }
>> 
>> This means that almost every page generation hits the database a whole bunch 
>> of
>> unnecessary times, and that all of my controllers are cluttered.
>> 
>> This must be a fairly common problem. What's the best way to deal with
>> it--both the desire to persist what is mostly static data, and to keep
>> my controllers clean?
>> 
>> Thanks.
>> 
>> Jesse Sheidlower
>> 
>> _______________________________________________
>> List: Catalyst@lists.scsys.co.uk
>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
>> Dev site: http://dev.catalyst.perl.org/
> I'd LOVE to see that functionality in DBIx::Class::Schema so prefetches
> use the cached values to populate the related data instead of hitting
> the database.
> 
> --
> Best regards, Alexander Hartmaier
> 
> 
> *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
> T-Systems Austria GesmbH Rennweg 97-99, 1030 Wien
> Handelsgericht Wien, FN 79340b
> *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
> Notice: This e-mail contains information that is confidential and may be 
> privileged.
> If you are not the intended recipient, please notify the sender and then
> delete this e-mail immediately.
> *"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
> 
> _______________________________________________
> List: Catalyst@lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/

Francisco Obispo 
Director of Applications and Services - ISC
email: fobi...@isc.org
Phone: +1 650 423 1374 || INOC-DBA *3557* NOC
PGP KeyID = B38DB1BE


_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

Reply via email to