> 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
> 
> 

Reply via email to