On 02/12/2011, at 4:48 PM, Jim Webber wrote:

> 1. Neo4j works as a standalone (or clustered) server which is accessible 
> through the REST API.

That's the point. There is not standalone version with native bindings.
You either run embedded and lock the whole database to the particular app, or 
you go with REST that doesn't support transactions (batch != transaction)...

> 2. Neo4j is ACID transactional with each HTTP request to the server being 
> internally scoped in a single transaction.
Unfortunately it is not always enough, even when using batch API.

Here is the use-case:
1. Query for a nodes/rels.
2. Run some custom logic on the client.
3. Update nodes/rels appropriately.

This is the most common way of using databases. And currently it is not 
possible to wrap it in a transaction.

So the only alternative in this case is to use native binding, which may not be 
available to all. And means we are back at point 1.

Do you see what I mean here?
It's a trade-off: ACID vs DB with multiple clients.


A way of doing transactions over REST would be nice. But it will be extremely 
hard to implement due to the stateless nature of HTTP.
I can see something like this in API:

POST /transaction?timeout=2
# Returns the ID of the transaction for the future

# then use the normal API...


PUT /transactions/1234/commit
# or
PUT /transactions/1234/rollback
# or
DESTROY /transactions/1234
# or automatically rollback after 2 secs


But I am not sure this can work reliably and performant enough with HTTP.

Cheers.



_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to