jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marcel Reutegger (JIRA)" <j...@apache.org>
Subject [jira] Commented: (JCR-1213) UUIDDocId cache does not work properly because of weakReferences in combination with new instance for combined indexreader
Date Tue, 27 Nov 2007 10:39:43 GMT

    [ https://issues.apache.org/jira/browse/JCR-1213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12545786
] 

Marcel Reutegger commented on JCR-1213:
---------------------------------------

Ard, thank you very much for the patch. I'm about to create a performance test, which basically
does the following:

- create lots of nodes ;)
- run queries that use DescendantSelfAxisQuery and/or ChildAxisQuery
- at the same time randomly modify content

I reviewed you patch and I also don't like the dependency to SingleTermDocs in UUIDDocId.

I've created a patch as well, but took a somewhat different approach. Instead of using a weak
reference to the index reader, I used the creation tick in the CachingIndexReader. The creation
tick uniquely identifies an index segment as well as the version of the segment. E.g. if a
document is added a new CachingIndexReader is created for that segment with a new creation
tick. The same will probably also work for the DocNumberCache, which currently uses strong
references. I'd like to change that as well, but that's a bit off topic and and different
issue.

I will run the above test with 1) the current code base, 2) your patch and 3) my patch.

I'll let you know about the results....

> UUIDDocId cache does not work properly because of weakReferences in combination with
new instance for combined indexreader 
> ---------------------------------------------------------------------------------------------------------------------------
>
>                 Key: JCR-1213
>                 URL: https://issues.apache.org/jira/browse/JCR-1213
>             Project: Jackrabbit
>          Issue Type: Improvement
>          Components: query
>    Affects Versions: 1.3.3
>            Reporter: Ard Schrijvers
>             Fix For: 1.4
>
>         Attachments: JCR-1213-mreutegg.patch, JCR-1213.patch
>
>
> Queries that use ChildAxisQuery or DescendantSelfAxisQuery make use of getParent() functions
to know wether the parents are correct and if the result is allowed. The getParent() is called
recursively for every hit, and can become very expensive. Hence, in DocId.UUIDDocId, the parents
are cached. 
> Currently,  docId.UUIDDocId's are cached by having a WeakRefence to the CombinedIndexReader,
but, this CombinedIndexReader is recreated all the time, implying that a gc() is allowed to
remove the 'expensive' cache.
> A much better solution is to not have a weakReference to the CombinedIndexReader, but
to a reference of each indexreader segment. This means, that in getParent(int n) in SearchIndex
the return 
> return id.getDocumentNumber(this) needs to be replaced by return id.getDocumentNumber(subReaders[i]);
and something similar in CachingMultiReader. 
> That is all. Obviously, when a node/property is added/removed/changed, some parts of
the cached DocId.UUIDDocId will be invalid, but mainly small indexes are updated frequently,
which obviously are less expensive to recompute.

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


Mime
View raw message