cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Joe Baldwin <jfbald...@earthlink.net>
Subject Re: Best Practice for real-time sort capability (follow-up)
Date Thu, 17 May 2012 02:37:29 GMT
> I am not clear why you can no longer use these getters. 

I have to store the query in order to resubmit it to the DBMS via Cayenne.  

RE performance
This issue is not performance but rather "best practices".   I want to avoid any possibility
of doing something obviously bad.   




On May 16, 2012, at 9:28 PM, Aristedes Maniatis wrote:

> On 17/05/12 3:47am, Joe Baldwin wrote:
>> This is an follow-up to a question I asked previously.
>> 
>> **** To re-cap
>> In the context of a web-app (i.e. you don't know who your users are, or what kind
of absurd 'give me everything and let me sort' actions they might take), I need to be able
to support real-time sorting of perhaps large result sets.
>> 
>> So the recommendation was to prefer the DBMS sort over Cayenne in-memory sort (which
would fault all of the result-set dataobjects).  I can sort of understand the rational that
it is better to re-submit the query with a new sort-by request, as this will ultimately be
more memory efficient.
>> 
>> Requirements
>> Also, I have some fairly advanced pre-built search methods that support often-used
searches.  It is the results of these searches that may be sorted several times and in several
different ways by the user.
>> 
>> **** Interesting Side-effect
>> In order to implement the 'let the DBMS do it' pattern, I created a SearchFactory
class that stores the pre-built Cayenne SelectQuery, so that I can resubmit it to Cayenne
with a user chosen sort-by specification.  Here are some questions:
>> 
>> 1. I have to store the SelectQuery in a custom session object.  This *seems* like
a good idea but since I have never done this, I was wondering if storing a query might not
be memory-efficient. i.e. does this object hold on to any result sets?
> 
> Not to my knowledge, no.
> 
> 
>> 2. This pattern essentially makes some of the very cool Cayenne ORM features useless.
i.e. I can no longer simply request the Vendor's associated product list by doing a Cayenne
'vendor.getProductList()', since I can't store the query (as I need to do in order to re-submit
the query with a new Ordering object).
> 
> I am not clear why you can no longer use these getters. Don't you just take your query
and add whatever ordering you want before submitting it?
> 
> 
>> This is all working, but since I have to make a *lot* of changes in my code, I want
to make sure it is the best solution with Cayenne.
>> Does all of this sound reasonable, or am I missing some simpler way of implementing
this solution?
> 
> 
> What problem are you trying to solve? Where are you hitting performance issues? On the
first query? On subsequent queries with changed orderings?
> 
> Are you using Cayenne's pagination feature (that can make a huge performance improvement)?
> 
> Are you using OSCache?
> 
> Have you thought about using Solr/Lucene? For complex queries and orderings it has fantastic
performance, but this really only works for public websites where all users see the same data.
> 
> 
> Cheers
> 
> Ari
> 
> 
> 
> 
> 
> -- 
> -------------------------->
> Aristedes Maniatis
> GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A
> 
> 


Mime
View raw message