[hibernate-users] Stale query cache by column

Luiz Fernando O. C. Real luiz.real at caelum.com.br
Tue Apr 12 15:27:14 EDT 2011


Hi, everyone,

I've found a way, although I'm not sure it's the best way to do it.

I implemented a CustomEntityPersister, extending the
SingleTableEntityPersister. In this new class, I overwrote the protected
update method, inherited from AbstractEntityPersister, and in the new
implementation I verify which fields are dirty and, if they match the ones I
want to be stale-tolerant, I set a flag so that later, when Hibernate
queries which spaces are modified by the persister (via getPropertySpaces),
I return an empty array.

Any comments?

Thanks for the help.

--
Luiz F. O. Corte Real

Vida Geek
http://vidageek.net

Caelum | Ensino e Inovação
http://www.caelum.com.br


On Thu, Apr 7, 2011 at 9:44 AM, Luiz Fernando O. C. Real <
luiz.real at caelum.com.br> wrote:

> Hi Joe,
>
> Is it really possible? If so, how can I do it?
>
> We are trying to use the QueryCache more effectively, that's why we are
> thinking of hacking the cache system. There's this User model with the
> lastLogin attribute that is changed every time the user logs into the
> system. And then, every time an user logs in, all the cached queries related
> to the User model are invalidated. And most of the cached queries are
> related to this model.
>
> Any other idea?
>
>
> Thanks
>
> --
> Luiz F. O. Corte Real
>
> Vida Geek
> http://vidageek.net
>
> Caelum | Ensino e Inovação
> http://www.caelum.com.br
>
>
> On Mon, Apr 4, 2011 at 4:25 PM, Haswell, Joe <josiah.d.haswell at hp.com>wrote:
>
>> Hi Luiz,
>>
>>
>>
>> Sorry, I didn’t read back through the thread in its entirety before
>> responding.  A cached result is by definition invalid after the backing
>> store has been modified in any way.  It is possible to override this
>> behavior, but is that either necessary or desirable?  If this is a
>> performance consideration, you should assess whether the default performance
>> is acceptable before trying to improve it.  I think selectively disabling
>> cache-invalidation is always going to look a bit hacky because it
>> contravenes the cache-store contract.
>>
>>
>>
>> Thanks,
>>
>>
>>
>> Joe H. | HP Software
>>
>>
>>
>> *From:* sr.saude at gmail.com [mailto:sr.saude at gmail.com] *On Behalf Of *Luiz
>> Fernando O. C. Real
>> *Sent:* Monday, April 04, 2011 1:01 PM
>> *To:* Haswell, Joe
>>
>> *Subject:* Re: [hibernate-users] Stale query cache by column
>>
>>
>>
>> Hi, Joe
>>
>> Sorry, I think I didn't make myself clear. I understand that I can listen
>> for the update to a particular table, but the event, AFAIK, is triggered
>> after the cache invalidation, and I would like to not invalidate the cache
>> for a specific update.
>>
>> --
>> Luiz F. O. Corte Real
>>
>> Vida Geek
>> http://vidageek.net
>>
>> Caelum | Ensino e Inovação
>> http://www.caelum.com.br
>>
>> On Mon, Apr 4, 2011 at 3:50 PM, Haswell, Joe <josiah.d.haswell at hp.com>
>> wrote:
>>
>> I’m not entirely sure I understand what the problem is.   You could
>> certainly create your own event-listener that listened for an update to that
>> particular table.  From my understanding of the problem, the cache becomes
>> invalid immediately after an update occurs, which is when your
>> event-listener would be triggered.  This seems to me to be the correct time
>> to invalidate your cache.  Caches can be invalidated programmatically by
>> Hibernate (which is what I suspect you’re seeing), or you can invalidate
>> them manually.  If Hibernate’s default cache-invalidation is unsuitable, can
>> you override it with appropriate semantics?
>>
>>
>>
>> Joe H. | HP Software
>>
>> *From:* hibernate-users-bounces at lists.jboss.org [mailto:
>> hibernate-users-bounces at lists.jboss.org] *On Behalf Of *Luiz Fernando O.
>> C. Real
>> *Sent:* Monday, April 04, 2011 12:39 PM
>> *To:* hibernate-users
>> *Subject:* Re: [hibernate-users] Stale query cache by column
>>
>>
>>
>> Hi, again
>>
>> Thanks for the reply, Joe. I've checked out the event system and could not
>> find anything helpful. It seems that the generated events are only fired
>> after the cache is invalidated.
>>
>> I've found a way to do this implementing a QueryCache, but it's not the
>> most elegant solution. I verify the query to be retrieved from the cache via
>> the toString() method in the QueryKey object. If the SQL matches the one I'm
>> trying to turn stale cache tolerant, I ignore the timestamp.
>>
>> Is there a better way to do this, to look at the query being passed?
>> Wouldn't it be nice to have a getter for it in the QueryKey class?
>>
>> Thanks
>>
>> --
>> Luiz F. O. Corte Real
>>
>> Vida Geek
>> http://vidageek.net
>>
>> Caelum | Ensino e Inovação
>> http://www.caelum.com.br
>>
>> On Thu, Mar 24, 2011 at 12:16 PM, Haswell, Joe <josiah.d.haswell at hp.com>
>> wrote:
>>
>> I’d check out the event system.  If a particular event invalidates your
>> cache, just clear it or the region of it that’s invalid.
>>
>>
>>
>> Joe H. | HP Software
>>
>>
>>
>> *From:* hibernate-users-bounces at lists.jboss.org [mailto:
>> hibernate-users-bounces at lists.jboss.org] *On Behalf Of *Luiz Fernando O.
>> C. Real
>> *Sent:* Thursday, March 24, 2011 9:06 AM
>> *To:* hibernate-users
>> *Subject:* [hibernate-users] Stale query cache by column
>>
>>
>>
>> Hi,
>>
>> I'm trying to implement a custom QueryCache that, like the example in
>> http://community.jboss.org/wiki/QueryCache, does not invalidate some
>> existing register is updated in a specific table. However, unlike the
>> example, I'd like to do that by analyzing which columns were changed in an
>> update.
>>
>> More precisely, I have an User table, which has a lastLogin column. I'd
>> like to keep the QueryCache valid when I update the lastLogin of an User.
>>
>> I haven't found any way to do that yet. Is that possible?
>>
>> Thanks in advance.
>>
>> --
>> Luiz F. O. Corte Real
>>
>> Vida Geek
>> http://vidageek.net
>>
>> Caelum Objects
>> http://www.caelumobjects.com
>>
>>
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/hibernate-users/attachments/20110412/11527f28/attachment.html 


More information about the hibernate-users mailing list