jackrabbit-oak-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas Mueller (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (OAK-300) Query: QueryResult.getRows().getSize()
Date Thu, 13 Sep 2012 09:48:07 GMT

    [ https://issues.apache.org/jira/browse/OAK-300?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13454771#comment-13454771
] 

Thomas Mueller commented on OAK-300:
------------------------------------

To support the JCR getSize() method:

* always prefetch up to 20 nodes, and 
* if there is still time, fetch more up to 0.1 seconds or so, 
* or at most 200 nodes. 

I guess 200 should be enough to for a GUI to decide what to display (10 pages for 20 nodes
per page).
                
> Query: QueryResult.getRows().getSize() 
> ---------------------------------------
>
>                 Key: OAK-300
>                 URL: https://issues.apache.org/jira/browse/OAK-300
>             Project: Jackrabbit Oak
>          Issue Type: Task
>          Components: core, jcr
>            Reporter: Thomas Mueller
>            Priority: Minor
>
> The method QueryResult.getRows().getSize() is supposed to return the number of rows of
the result, but can return -1 if the size is unknown. 
> For both Jackrabbit 2.0 and Oak, in many cases, the size is unknown, because data is
read on demand, possibly using a configurable fetch size to reduce the number of (network)
roundtrips.
> For Jackrabbit 2.0, as far as I'm aware the size is always available if 'order by' is
used. This currently is also the case for Oak. However, in the future this might change as
there is no need to read all data in memory if the index itself returns the data in the correctly
sorted order.
> For some existing applications, it might be a problem if getSize() returns -1 for those
cases. For compatibility with Jackrabbit 2.0, and for ease of use, it would be good to have
a clearly defined way to get the size of the result. For example using a configurable setting
to define how many rows to fetch at most in case getSize() is called (if the end of the result
has reached within the given fetch limit then getSize() can return the correct value; if not,
getSize() returns -1). A possible way to configure such a setting is:
>     SimpleCredentials cred = new SimpleCredentials(user, pwd.toCharArray());
>     cred.setAttribute("queryFetchSizeLimit", "20");
>     Session s = getRepository().login(cred);
>     return s;
> Another way to configure the setting is using an option within the query. We would have
to invent a special syntax, as this doesn't doesn't seem to be the same as "limit" or "fetch
size", maybe:
>     select text from [nt:base] where id = $id fetch size limit 20
> This ("fetch size limit 20") is somewhat similar to the SQL "fetch first
> 10 rows only" - http://en.wikipedia.org/wiki/Select_(SQL)#FETCH_FIRST_clause - but it's
not the same really.
> I don't consider this as a very urgent issue, but we need to keep it in mind.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message