[Glass] Position method for BtreePlusReadStream classes
bruno buzzi brassesco
smalltalk at adinet.com.uy
Mon Jun 8 13:11:26 PDT 2020
Dale,
Which is the difference of your solution with the following ?
btreePlusReadStream := gsQuery reversedReadStream.
position := 1.
[btreePlusReadStream atEnd not and: [position < collectionSize]]
whileTrue: [btreePlusReadStream next. position := position + 1].
What i want is to have a very large (a millon ?) GsQuery result set (in
index order) and go to a position (K) without faulting into memory
objects previous to the (K) position.
regards
bruno
On 8/6/2020 16:18, Dale Henrichs via Glass wrote:
>
> Bruno,
>
> There is no backing collection for the BtreePlusReadStream, so being
> able to go to a certain position is not possible without counting....
>
> We should be able to quickly produce a result set of the entire query
> results, but it would be a set not an ordered collection:( And to get
> results _in order_ the streaming API is the only solution... To get
> the kind of performance that you would want, I would think that it
> should be possible to create a primitive that would produce the result
> set in the form of an Array (in order) instead of a Set.
>
> For now you would have to produce the Array yourself using:
>
> | result |
> result := {}.
> gsQuery do: [:each | result add: each]
>
> #do: uses the BtreePlusReadStream api underneath covers, so the #do:
> elements are processed in order ...
>
> Let me know if you you would need a primitive for performance and I
> can submit a feature request ...
>
> Dale
>
> On 6/8/20 11:53 AM, smalltalk--- via Glass wrote:
>> Hi,
>>
>> aRcIdentitySet has an index on 'each.modifiedTime' and it can have a
>> lot of instances.
>>
>> In order to get a list of sorted instances (by modifiedTime) i do:
>> |gsQuery|
>> gsQuery := GsQuery fromString: 'each.modifiedTime <= timeNow'.
>> gsQuery bind: 'timeNow' to: TimeStamp now.
>> gsQuery on: aRcIdentitySet .
>>
>> Now i want to 'jump' to a given position in this stream...
>> It is possible to use some kind of #position: message in
>> aBtreePlusReadStream ?
>> (position: does no exist in BtreePlusReadStream)
>>
>> I could use #next to 'jump' to a given position, but the query can be
>> very very large.
>> At the end it show a paging web page to a user that can click to get
>> the next bunch of objects.
>> So i do not want to do #next over a large collection.
>>
>> regards,
>> bruno
>> 2.11.0.0
>> 2.11.0.0
>>
>> _______________________________________________
>> Glass mailing list
>> Glass at lists.gemtalksystems.com
>> https://lists.gemtalksystems.com/mailman/listinfo/glass
>
> _______________________________________________
> Glass mailing list
> Glass at lists.gemtalksystems.com
> https://lists.gemtalksystems.com/mailman/listinfo/glass
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.gemtalksystems.com/mailman/private/glass/attachments/20200608/015e6bed/attachment.htm>
More information about the Glass
mailing list