[
https://issues.apache.org/jira/browse/JCR-716?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Martijn Hendriks updated JCR-716:
---------------------------------
Attachment: SharedItemStateManager.java
Attached the source of the SharedItemStateManager that uses rudimentary
negative caching using a HashSet of ItemIds.
> Performance: caching negative results
> -------------------------------------
>
> Key: JCR-716
> URL: https://issues.apache.org/jira/browse/JCR-716
> Project: Jackrabbit
> Issue Type: Improvement
> Components: core
> Reporter: Martijn Hendriks
> Attachments: SharedItemStateManager.java
>
>
> We recently have been looking at the performance of JackRabbit and noted that
> the SharedItemStateManager does not cache negative results. For instance,
> when "hasItemState" returns false, then this negative result is not cached
> and a subsequent call with the same ItemId will again query the database (if
> the item has not been added and cached yet). We think, however, that caching
> such negative results might improve the performance significantly for some
> applications.
> I've tried to add a simple negative-caching scheme. ItemIds are negatively
> cached in the method "hasNonVirtualItemState" when the persistence manager
> returns "false". Cache eviction occurs in the method "getNonVirtualItemState"
> when a state is loaded. It also seems necessary to evict ItemIds in the
> methods "stateCreated" and "has/getItemState" (when one of the virtual
> providers returns something), because when an ItemId is neg-cached, it might
> still be provided by one of the VISP. The negative cache can then be used in
> the method "hasNonVirtualItemState" like this:
> if (cache.isCached(id)) {
> return true;
> } else if (negativeCache.isCached(id)) {
> return false;
> }
> Although all JackRabbit tests succeeded during compilation and our
> application seemingly behaved ok, I still doubt that my implementation is
> completely correct (I don't know the ins and outs of the
> SharedItemStateManager and made some assumptions). We are, however, quite
> eager to investigate this further as our application is 15% faster in an
> important use case with this very simple negative caching scheme enabled.
> Is there any previous work on something like this in JackRabbit? How
> difficult is a solid implementation?
> Regards,
> Martijn Hendriks
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.