[Dbix-class] Caching a resultset?

Alexander Hartmaier alexander.hartmaier at t-systems.at
Wed Jan 16 10:03:43 GMT 2013


On 2013-01-15 21:49, Peter Rabbitson wrote:
> On Tue, Jan 15, 2013 at 05:12:12PM +0100, Alexander Hartmaier wrote:
>> On 2013-01-15 16:51, Peter Rabbitson wrote:
>>> On Tue, Jan 15, 2013 at 10:09:19AM -0500, Jesse Sheidlower wrote:
>>>> On Tue, Jan 15, 2013 at 05:18:06AM +1100, Peter Rabbitson wrote:
>>>>> On Mon, Jan 14, 2013 at 11:07:34AM -0500, Jesse Sheidlower wrote:
>>>>>>> So apart from the mystery around the nonsensical exception - does this help?
>>>>>>>
>>>>>>> local $DBIx::Class::ResultSourceHandle::thaw_schema = $c->model(...)->schema;
>>>>>> Yes! Putting that before the "unless" seems to make everything work
>>>>>> correctly.... Will be testing further this afternoon. Thanks!
>>>>> Please let me know if wider testing is succesful.
>>>> In one sense, wider testing was indeed successful. The RS was cached
>>>> properly, it worked in several different environments, etc.
>>>>
>>>> However, it didn't "work" in one particularly crucial way, which in
>>>> retrospect I'm surprised I didn't think about: the resultset may have
>>>> been cached, but once I get it back, it's still just a resultset, so
>>>> when I use it again in the template, it hits the database again. Every
>>>> time.
>>>>
>>>> This is exactly what I wanted to avoid by this whole escapade.
>>> You need to combine the above with [1] and/or [2].
>>>
>>> [1] https://metacpan.org/module/DBIx::Class::ResultSet#cache
>>> [2] https://metacpan.org/module/DBIx::Class::ResultSet#set_cache
>>>
>>> Cheers
>> You mean don't prefetch the relationships and populate it's cache after
>> fetching all results?
> Um... prefetch does not touch the cache of the *main* rs. I am not sure
> what you mean above - explain.
My schema has quite some 'side tables' like types, stati and so on. They
almost never change.
It would help performance if I could tell the schema to load all rows,
cache them and populate a relationship from the cache when prefetched.
For example

Interface->belongs_to('rel_interface_type', ::Interface_Type,
'fk_interface_type');

Schema->connect({
    ... ,
    prefetch => [qw( Interface_Type )],
});

# this would not prefetch rel_interface_type like it would normally do
but populate the rel_interface_type cache from the cached Interface_Type's
my $rs_interfaces = Interface->search_rs(..., { prefetch =>
'rel_interface_type' });

Does this make sense?
>
> Cheers
>
>
> _______________________________________________
> List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
> IRC: irc.perl.org#dbix-class
> SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
> Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk



*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
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.
*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*



More information about the DBIx-Class mailing list