[Dbix-class] memcached

Jess Robinson castaway at desert-island.demon.co.uk
Thu Jan 25 09:34:41 GMT 2007



On Wed, 24 Jan 2007, Jim Spath wrote:

> Ash Berlin wrote:
>>  Jim Spath wrote:
>> >  I was wondering if anyone had any suggestions for how to properly use 
>> >  memcached (http://www.danga.com/memcached/) with DBIx::Class.
>> > 
>> >  When one tries to store a resultset in memcached, you get the error 
>> >  "Can't store CODE items", which makes sense.
>> > 
>> >  It seems like I really only have one choice, which is to create a 
>> >  string/arrayref/hashref of the data returned from the resultset before 
>> >  storing it in memcached and using it in my code.  But that feels a 
>> >  little ugly to me.
>> > 
>> >  Any ideas?
>> > 
>> >  - Jim
>> > 
>> >  PS - I'm running running both DBIx::Class and Cache::Memcached under 
>> >  Catalyst, if it matters.
>>
>>  IIRC the CODE segment it is refereeing to is in fact the dbh deep down in
>>  storage.
>>
>>  In the -current branch (which is due for release soon) we completely
>>  refactored how objects and result sets keep hold of their ResultSource's.
>>  Instead of storing a direct reference to a ResultSource, they now store a
>>  tuple of (source_name,schema)
>>
>>  This has the added benefit that you can store only the source_name when
>>  you put an RS into memcached, and re-attach it to the schema when you read
>>  it out.
>>
>>  <http://dev.catalyst.perl.org/trac/bast/browser/branches/DBIx-Class-current/lib/DBIx/Class/ResultSourceHandle.pm>
>>
>>  The above file has freeze and thaw hooks for Storable, but bear in mind
>>  that the schema is not automatically reattached (couldn't work out a good
>>  way of doing it) so you'd have to come up with a way of expressing it or
>>  just do something hacky like:
>>
>>  $newly_thawed_obj->_source_handle->schema($schema);
>>
>>  But please don't do that, cos it will break horribly in all kinds of
>>  cases.
>>
>>  </incoherent ramblings>
>>
>>  Ash
>
> Thanks Ash,
>
> Sounds interesting.
>
> I have actually had some success with running search() calls in list context 
> and storing the returned array of row objects in memcached.
>
> However, I am worried about the memory requirements of storing an array of 
> objects in memcached when all I need is an array of hash references.
>
> Is there and easy way to return just the data from DBIx::Class or am I stuck 
> with having objects returned?

Like reading the docs? ;)

Either call ->get_columns on each of those objects or look at the 
hashrefinflator (see cookbook).

Jess




More information about the Dbix-class mailing list