I may be missing something, but it can't see exactly how to link up your code with the server. Should the extension be packaged as a gem and published publicly?
That Wiki entry is a little bit poorly written IMO. Sorry for saying that :-( On 02/12/2011, at 8:42 PM, Michael Hunger wrote: > http://wiki.neo4j.org/content/Ruby-script_extension > > > Am 02.12.2011 um 10:32 schrieb Dmytrii Nagirniak: > >> >>> That's why we've enable the >>> - ruby-extensions for the server. >> >> Haven't seen anything about it. Could you please give some more info on that >> (links maybe)? >> >>> it is not about duplicating functionality but about moving persistence >>> related code closer to the db. >> >> It is a long topic on itself: Where the business logic belongs to - the >> server or the client. >> >> But the point is that far the most common use-case is to write the business >> logic on the client, not on the server. >> >> The business logic on the server has already failed multiple times in the >> history (think of stored procedures on the RDBMS). >> >> Server side logic works well when the DB is part of the app (e.g. embedded) >> and server/client code is often indistinguishable. >> > > OTOH > it is about keeping the database primitives at the database level and > exposing domain level data and operations. > (which makes your protocol smaller, faster, less diluted, better > understandable and focused). > > After all with NOSQL you have much more often that you move code to the data > (think map-reduce -> no one complains there). > >> >> >> >>> >>> Am 02.12.2011 um 09:43 schrieb Dmytrii Nagirniak: >>> >>>> Good point. Yes, that certainly is an alternative. >>>> >>>> But unfortunately in practice I hardly can imagine .NET, Nodejs, MRI Ruby >>>> (non Java basically) guys to start duplicating the logic for the plugin. >>>> Not even taking into account additional complexity, including unit testing. >>>> >>>> Similar thing ships with SQL Server. But it was used only by .NET people >>>> and extremely rarely. >>>> On Dec 2, 2011 6:57 PM, "Michael Hunger" <michael.hun...@neotechnology.com> >>>> wrote: >>>> >>>>> No, the alternative there is to provide a server-side extension that >>>>> encapsulates your business logic as an endpoint running inside of a tx. >>>>> >>>>> Cheers >>>>> >>>>> Michael >>>>> >>>>> Am 02.12.2011 um 08:30 schrieb Dmytrii Nagirniak: >>>>> >>>>>> >>>>>> 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 >>>>> >>>>> _______________________________________________ >>>>> 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 _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user