[ 
https://issues.apache.org/jira/browse/OPENJPA-407?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12535750
 ] 

Patrick Linskey commented on OPENJPA-407:
-----------------------------------------

The Select interface and its implementations are responsible for both 
assembling and executing SELECT statements (and, for legacy reasons, some other 
statement types). So, it seemed as though reusing the Select instances was the 
right level of abstraction.

My change actually isn't all that involved; it's mostly just a refactoring, and 
not much new code. The refactoring was necessary because a bunch of things 
involved in SQL generation examined a StateManager directly, and so to properly 
build a key for the Select, I needed to include all those bits of information. 
I could have actually left most of the classes alone and just made the key 
account for those bits of information, but I decided that that approach would 
be error-prone, both up-front (what if I missed some state manager 
interrogation?) and moving forward (what if the downstream methods started 
grabbing more data from the state manager?).

Additionally, my change does not currently actually cache the SQLBuffers 
generated within the SelectImpls. It is possible that this is why there is no 
performance gain. The performance loss in our tests might be attributable to 
the extra overhead of always computing all the data needed for the SelectKey 
even if it's not needed in the end.

Also, note that my changes right now only are used when loading a single 
instance, not when executing a Query. I expect that the techniques and 
implementation could be broadened to JPQL cases as well, but I didn't really 
look at that use case, since the problem description seemed to be identifying 
relation traversals and finds as the problems.

> I was actually thinking of scoping the cache to an EntityManager (broker) 
> instance. Maybe not as useful as across all active brokers, but we would 
> still gain a sizeable benefit (hopefully).

I think that the deciding factor for this will be whether or not there is any 
Broker-specific state that must be involved in the caches.

> Cache SQL (or closer precursors to SQL) more aggressively
> ---------------------------------------------------------
>
>                 Key: OPENJPA-407
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-407
>             Project: OpenJPA
>          Issue Type: Improvement
>          Components: jdbc, kernel, query, sql
>    Affects Versions: 0.9.0, 0.9.6, 0.9.7, 1.0.0
>            Reporter: Patrick Linskey
>             Fix For: 1.1.0
>
>         Attachments: OPENJPA-407.patch
>
>
> When data is not available in the data cache, OpenJPA dynamically creates SQL 
> to look up the requested data. OpenJPA should more aggressively cache this 
> SQL to accelerate pathways from a cache miss to the database.
> The generated SQL takes a number of factors into account, including the 
> requested records, transaction status, currently-loaded data, and the current 
> fetch configuration. Any caching would need to account for these factors as 
> well.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to