I recently completed a project using RingoJS (http://ringojs.org), a
Javascript web framework, and Neo4j. Both platforms were remarkably pleasant
to work with. I had been developing with the Play framework (Java) for over
a year. That was enjoyable and the type checking is great. With a Javascript
web framework I miss the type checking, but it is nice that RingoJS uses one
language, JavaScript, for everything– configuration, routing, handlers,
controllers and templates (via mustache in this case). It is fun to think in
only one space for a change.

I have been using the excellent Querydsl API (http://www.querydsl.com) for
SQL queries also for over a year. I have been suffering the least of SQL
practitioners with excellent type checking and conditional query
construction. Part of my attraction to Querydsl has been how easily it
allows one to optimize queries programmatically to get the best performance
in a given situation. Actually needing good performance in important
situations has been what caused me to look for a next generation database
that was talking about the right features.

I first heard about Neo4j some time in the last year. The open source
license changes where what got me to seriously consider Neo4j. It is
important for me to always work with a software stack that does not come
with immediate licensing costs before support or high scale features are
needed. I think relicensing Neo4j was a great move for increasing adoption
and I hope you soon gain many commercial clients that have learned they have
been depending on Neo4j for some time and now need more from it :)

Working with Neo4j and RingoJS has been fun. The only trouble I had was
trying to create enum-like structures in JavaScript whose properties behave
like Java final. That proved to be simple, but a novelty because one doesn't
typically create shared immutable structures in JavaScript. I created a
RingoJS package for Neo4j (release pending) that manages the Neo4j jars
files and exposes a config file format for embedding one or many Neo4j
databases. Excluding index configuration (if desired) a config file only
needs 4 statements. Here is an example:

/*** example db.js ***/
export("db", "relTypes");
var {DbContext, RelationshipTypes} = require("neo4j-graphdb");
var db = new DbContext("data/db1");
var relTypes = new RelationshipTypes(["PEOPLE", "PERSON", "PLACES", "PLACE",
"LIVES_AT"]);
/*** end example ***/

With the above example any RingoJS action can use the database by including
the simple statement var {db, relTypes} = require("./db"). The db object
exposes one function getDb (or getGraphDb) and you can imagine the rest from
there.

I will release a RingoJS package for Neo4j soon. Please let me know if you
have any questions. If you would like to arrange a demonstration of Neo4j
and RingoJS at your local meetup in San Francisco, Orange County or San
Diego please let me know. I would love to present this effective and
interesting combination and answer more questions.

Thanks and kind regards,

RR McKinley
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to