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. |
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 |
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)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 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)
START me=node(1) MATCH (me)-[:FRIEND|NEIGHBOR]->(fandn) RETURN fandnSimilarly, 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 aCollections 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 nWith 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 n=node(*) WHERE n.belt! = 'white' AND n.age>32 RETURN n
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:The Changelogs
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).