NoSQL Zone is brought to you in partnership with:

Eric is the Editorial Manager at DZone, Inc. Feel free to contact him at egenesky@dzone.com Eric has posted 804 posts at DZone. You can read more from them at their website. View Full User Profile

Announcement: Neo4j 1.7 GA "Bastuträsk Bänk" released

04.20.2012
| 3808 views |
  • submit to reddit

Congrats to Neo4j for the announcement of Neo4j 1.7!  The content of this post was originally published by Peter Neubauer over at the Neo4j blog.

We’re very pleased to announce that Neo4j 1.7 GA, codenamed "Bastuträsk Bänk" is now generally available. The many improvements ushered in through milestones have been properly QA’d and documented, making 1.7 the preferred stable version for all production deployments. Let’s review the highlights.

Welcome to the Enterprise Turbo package

Johan. Speed.
For enterprise deployments contending with high-volume requests, we are working on a number of features that support these scenarios in terms of better and more predictable speed.

First out is the new GCR cache - it's 10x faster and accommodates 10x more primitives. The GCR smooths out the rough spots that can occur when processing huge graphs with thousands of simultaneous user operations, by directly managing a fixed amount of memory with thread safe operations.

While the other cache types are almost maintenance free and are very effective for general use, the GCR cache’s finer control over memory usage can achieve more consistent responsiveness when tuned correctly. The GCR is a good choice for large cluster deployments where you’re tuning every aspect of your system.

Cypher-[:DESCRIBES]->Results

Andres Taylor - Cypher champion

The craftsmanship that guides the Cypher language cares deeply about balancing clarity with comprehensive expressions, working towards a grammar that naturally matches the questions you would ask a graph. From the START to the MATCH and the WHERE, the clauses are intentionally unsurprising; they’re what you’d likely write when describing a question in an email.

With 1.7, Cypher now has a full range of common math functions for use in the RETURN and WHERE clause. Combined with basic arithmetic, you can now say things like:

START a=node(3), c=node(2) RETURN a.age, c.age, abs(a.age - c.age)
START a=node(1) RETURN round(3.141592)
START a=node(*) WHERE sqrt(a.prop) > 5  RETURN a
START a=node(3) RETURN sign(-17), sign(0.1)

Sometimes it makes sense to consider multiple relationship types at the same time, as in “my friends and my neighbors.” Now Cypher matches allow you to combine relationships into a single path like so:

START me=node(1) MATCH (me)-[:FRIEND|NEIGHBOR]->(fandn) RETURN fandn

Similarly, in the WHERE clause you might want to accept a few different values for a property. Cypher’s IN operator let’s you present the alternatives in a collection like this:

START a=node(3, 1, 2) WHERE a.name IN ["Peter", "Tobias"] RETURN a

Collections may contain more than you want, so you can pick what elements of the collection to return with HEAD, TAIL, LAST or FILTER.. To complement the ‘?’ operator for optional properties, the new missing property operator ‘!’ defaults to a false value when the property is missing. Consider the difference in these two statements:

START n=node(*) WHERE n.belt? = 'white' AND n.age>32 RETURN n
START n=node(*) WHERE n.belt! = 'white' AND n.age>32 RETURN n

With the optional operator ‘?’ you’d get all the nodes with age greater than 32, and if they have a belt, it must be white. With the missing operator ‘!’ you’d get all the nodes with an age greater than 32, and who *must* have a white belt. In the previous example, we also used a great new convenient notation for indicating all nodes, by

START a=node(*)

Other notable improvements

Like all of our releases, Neoj 1.7 GA incorporates important performance improvements under the hood and fixes for various bugs - discovered both through the open community and by the field team working with the customers. We try to get them into the open codebase as fast as possible, so everyone can benefit. Other notable features that have been added include:

  • SSL Support - When you want remote access to Neo4j across the public internet, yet secured, https is of course the way to go. Now you can provide your own certificate, or have a self-signed certificate auto-generated and access Neo4j remotely across https. 
  • Wildcards in security authorization rules - With this simple change, security rules can be more easily applied to branches of a URL like /protected/*/
  • System properties can set configuration - We’ve made some changes to how Neo4j exposes configuration parameters, making it possible to use system properties to override settings. This is particularly convenient when deploying to different staging and production environments.
  • Cypher performance improvements through a first round of query execution optimizations.
  • The Changelogs

    Full details about each of the changes are included in the changes.txt files, available for the community, advanced and enterprise components.

    This is a strong new release that we think you’ll enjoy. For reference and more information on the new features that came in the different milestones, refer back to the 1.7.M01, 1.7.M02 and 1.7.M03 blogs and the changelogs (see above).

    Please download it now. Heroku users also have it available immediately as the default version for new applications, so heroku addons:add neo4j now. Wherever you use Neo4j, join us in the google group to chat about your progress and to share any new ideas you’d like to see as we move on to developing the 1.8 series.
    The Neo4j Team
    Published at DZone with permission of its author, Eric Genesky.

    (Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)