Interesting way to leverage relationships when ordering items!
Thanks for your insights.
On Saturday, September 13, 2014 4:24:42 PM UTC+8, Michael Hunger wrote:
>
> Hi Thomas,
>
> Sure, what you then would do is to move the "limit" back to the limit
> clause
>
> Match (:Node {id:"unique-string"})-[:NEXT*1..]->(m)
> WHERE m.prop = "value"
> Return m
> limit 20
>
> We'll add using indexes for ordering at some point but I'm not sure when
> and how.
>
> Michael
>
> On Sat, Sep 13, 2014 at 2:53 AM, <[email protected] <javascript:>>
> wrote:
>
>> Thanks Michael for your answer.
>>
>> If I understand correctly, your method would require to manually maintain
>> a chain of relationships between my nodes, in the order of the field I want
>> the results to be ordered by, right?
>> Which means, if I want my paginated results to be ordered by "name", I
>> need to manually chain:
>> (n1 {name:"a"})-[:NEXT]->(n2 {name:"aa"})-[:NEXT]->(n3 {name:"b"})-...
>>
>> There are some examples in the graph-databases book (free pdf on
> graphdatabases.com) on how to maintain such an list automatically on
> insert of new data.
>
> Michael
>
>
>> Would that work if I also wanted to filter the results with a WHERE
>> clause on some other field of my nodes? I guess it would somehow break the
>> chain...
>>
>> Cheers
>> Thomas
>>
>> On Saturday, September 13, 2014 3:20:48 PM UTC+8, Michael Hunger wrote:
>>>
>>>
>>>
>>> Sent from mobile device
>>>
>>> Am 13.09.2014 um 05:31 schrieb [email protected]:
>>>
>>> Hi everyone,
>>>
>>> (sorry for the long post to follow!)
>>>
>>>
>>> No worries
>>>
>>>
>>> We have an existing platform relying on CouchDB (Cloudant, actually) and
>>> I'm evaluating a potential migration to Neo4j. The good thing with having
>>> an existing version is that I've already been through many pitfalls, so now
>>> I can consider them with Neo4j. One of them is *pagination*.
>>>
>>> CouchDB has a 'skip' feature that is similar to Neo4j. The doc clearly
>>> states that it should not be used for pagination, because it incurs
>>> potential performance issues when skipping lots of large pages (if you take
>>> 10 items by skipping 10, the DB will still fetch 20 and return the last 10).
>>>
>>> *So first question*: is it the same with Neo4j?
>>>
>>>
>>> Yes. In embedded mode you can keep the result open though as well as on
>>> the remote endpoint where you can within a tx can continue to read
>>>
>>>
>>> In case it is (and I believe it is!), I would like to see whether
>>> CouchDB's approach to pagination would be applicable. The strategy here is
>>> to fetch n+1 items, and pass the last one as a cursor/bookmark than will be
>>> used as a starting point for the next query. This sounds easy, but gets
>>> tricky if you order by a field that is not unique. Let me take an example.
>>>
>>> Say I have this kind of node:
>>> (:Node {id:"unique-string", name:"not-unique-string"})
>>>
>>> *My second question is*: if I want to query these nodes, ordered by
>>> name, is there a way to implement the cursor technique I mentioned before?
>>>
>>>
>>> In a graph you can link these nodes in an ordered list by name and then
>>> follow the link
>>>
>>> For the next page your starting node would be the last node of the
>>> previous result
>>>
>>> Match (:Node {id:"unique-string"})-[:NEXT*1..20]->(m)
>>> Return m
>>>
>>> For the next page you pass in the last id
>>>
>>>
>>> Also, *subsidiary question*: I've read that 'order by' incurs a full
>>> scan, but is it also the case if I index the targeted field?
>>>
>>>
>>> Yep, right now it is for the normal order by clause
>>>
>>>
>>> Thanks all for helping me get familiar with that exciting platform!
>>> Thomas
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Neo4j" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>> --
>> You received this message because you are subscribed to the Google Groups
>> "Neo4j" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
You received this message because you are subscribed to the Google Groups
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.