Sure but isn’t it a huge waste of bandwidth if you load hundreds of results
and the user only looks at the first dozen?

On Thu, Jul 28, 2011 at 15:16, Rick Bullotta <rick.bullo...@thingworx.com>wrote:

> BTW, "paging" is a relic of the dial-up modem days, IMNSHO.
>
> If a machine is the client of the REST API call, it should get all the data
> in a single, atomic call.  If it is a browser or mobile app, there's a
> natural limit to the # of items that a human will bother paging through,
> which is fairly small (20 -> 500 typically), so again, it is painless to get
> all the data in a single call.
>
> -----Original Message-----
> From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org]
> On Behalf Of Rick Bullotta
> Sent: Thursday, July 28, 2011 6:11 PM
> To: Neo4j user discussions
> Subject: Re: [Neo4j] Paged traversal REST API suggestion for improvement
>
> If you don't keep "state" paging will not work properly if the data changes
> often.  What may have been record #21 when you are viewing the first page of
> 20 result might not be record #21 when you go to fetch the 2nd "page".
>
> If you're only concerned with pages of 20 or so, you should absolutely,
> positively do the paging on the browser.  Anything up to a couple thousand
> rows can *easily* be handled by any modern browser.  Keep the parsed JSON
> data on the client side and page it there.  This approach will be very
> performant on both the client and server, and won't require any "state".
>
> -----Original Message-----
> From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org]
> On Behalf Of Aseem Kishore
> Sent: Thursday, July 28, 2011 3:01 PM
> To: Neo4j user discussions
> Subject: Re: [Neo4j] Paged traversal REST API suggestion for improvement
>
> Jim, thanks for the explanation. I understand your constraints, but
> thinking
> about it more, I'm actually even more baffled -- how can we actually make
> use of this paged traversal API in a web scenario?
>
> [neo4j db] <---- [web server] <---- [web client, e.g. browser]
>
> If I want to show the results of a search, let's say, in a way that
> supports
> paging, it just seems like I can't take advantage of the Neo4j API at all
> here.
>
> If the user wants to be able to refresh the page, or click "Prev", the
> browser isn't keeping state across page changes,  so it has to rely on the
> web server to give it the right page.
>
> If the server now has to keep state of all results, it defeats the purpose
> of using the Neo4j paging API altogether: the server necessarily has to
> fetch everything and handle paging itself.
>
> Am I missing something? Or is this (typical in our case) scenario not
> something you guys are designing for? (And if not, what *is* the use case
> you guys envisioned for this?)
>
> It seems to me that the root cause of this dilemma is the Iterable<T>
> constraint you mentioned -- it only goes forward.
>
> Perhaps a better API/model then would be to use an offset parameter. This
> is
> different than "page" because it doesn't require the server to keep state;
> it just tells the server, return me the results starting *after* this
> result
> (which would generally be the last result I saw on my previous page of
> results).
>
> E.g. the following requests:
>
> - "Get me the results of this traverse" would return everything
> - "Get me the results of this traverse, paged with size 20" would return 20
> results
> - "Get me the results of this traverse, paged with size 20, starting with
> the node/rel after this one [given by an ID]" would return the next 20
> results
> - etc.
>
> Aseem
>
>
> On Thu, Jul 28, 2011 at 5:09 AM, Jim Webber <j...@neotechnology.com> wrote:
>
> > Hi Aseem,
> >
> > When you GET a resource, you're asking for its state at a particular
> > instant in time. GET's don't always return the same content, what's
> > important about them is that clients can't be held responsible for any
> > (unintended) side-effects of a GET operation. For example, if you GET the
> > BBC new page now, and then GET it again in 20 minutes, the bytes you
> receive
> > will almost certainly be different.
> >
> > I think what's perhaps a bit odd in the paged traverser case is that
> > clients do in fact trigger a state transition on GET which materially
> > changes the response. Adding /next to the paged traverser URI does not
> > change this, it just lengthens the URI.
> >
> > Under the covers, the REST API is just using the traversal API and so
> gets
> > back an Iterable<T> which is forward-only. We can't (or rather won't) do
> > things like ?page=2 (or similar) because that would involve holding all
> the
> > traversal state on the server which is one of the things paged traversers
> > were meant to avoid (being kind to both the server and clients).
> >
> > If you want to remember all traversal state on the client, that's OK. You
> > can page through your own local data structures. In fact given the number
> of
> > clients is likely to be larger than the number of servers, this makes
> sense
> > since the memory burden is shared amongst the many clients, rather than
> > being placed on the single server.
> >
> > So, I'll buy that we've conflated a little too much into a single GET,
> but
> > it's motivated by a sincere trade off to not overburden the server.
> >
> > Jim
> >
> >
> >
> > _______________________________________________
> > Neo4j mailing list
> > User@lists.neo4j.org
> > https://lists.neo4j.org/mailman/listinfo/user
> >
> _______________________________________________
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
> _______________________________________________
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
> _______________________________________________
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to