NoSQL Zone is brought to you in partnership with:

Andreas Kollegger is a leading speaker and writer on graph databases and Neo4j and the bridge between community and developer efforts. He works actively in the community, speaking around the world and promoting the larger Neo4j ecosystem of projects. Author of Fair Trade Software, and the lead for Neo4j in the cloud, Andreas plays a valuable role for progressive happenings within Neo4j. Andreas is a DZone MVB and is not an employee of DZone and has posted 75 posts at DZone. You can read more from them at their website. View Full User Profile

Neo4j 1.9.M05 Released

  • submit to reddit

Curator's Note: The content of this article was originally written by Michael Hunger over at the Neo4j blog .

We are very proud to announce the next milestone of the Neo4j 1.9 release cycle. This time, we have been trying to introduce as few big changes as possible and instead concentrate on things that make the production environment a more pleasant experience. That means Monitoring, Cypher profiling, Java7 and High Availability were the targets for this work. Let’s look at some of them:

Java7 Support

As of Neo4j 1.9.M05, Java7, Oracle JDK, is officially supported as the default runtime. We verified and adjusted some of the differences around e.g. sorting so that Java7 is a stable runtime for Neo4j.

High Availability and clustering

There have been a number of improvements around the chattiness of the HA protocol, making the cluster communication more efficient.

Kernel, Monitoring and Server

The IndexProvider interfaces are now in line with normal kernel extensions, making the system more consequent in design.
For the Neo4j REST Server, we added support for X-Forwarded-Host and X-Forwarded-Proto headers to allow parameterising of  links in data for hosting behind proxy servers.
Also, the JMX information beans will now provide info on all configuration values, including the defaults not explicitly set, enabling better diagnosing and tuning of your neo4j database.

DISTINCT is now lazy, and keeps the incoming ordering, making these kind of queries much faster and memory-efficient. Also handling of iterators from index lookups and global graph operations is lazy as it should have been. Thanks to Wes Freeman for spotting this.

A first version of support for profiling cypher statements has been introduced, together with a matching PROFILE neo4j-shell command. This reports an additional execution plan with metrics together with the result output, like
Welcome to the Neo4j Shell! Enter 'help' for a list of commands

neo4j-sh (0)$ profile START n = node(0) MATCH (n)-[r]-(e) WITH n RETURN count(*);
| count(*) |
| 0        |
1 row
0 ms

ColumnFilter(symKeys=["  INTERNAL_AGGREGATE-939275295"], 
returnItemNames=["count(*)"], _rows=1, _db_hits=0)
EagerAggregation(keys=[], aggregates=["(INTERNAL_AGGREGATE-939275295,CountStar)"], 
_rows=1, _db_hits=0)
ColumnFilter(symKeys=["e", "n", "r"], returnItemNames=["n"], _rows=0, _db_hits=0)
TraversalMatcher(trail="(n)-[r WHERE true AND true]-(e)", _rows=0, _db_hits=1)
ParameterPipe(_rows=1, _db_hits=0)
neo4j-sh (0)$
The profiling information is also available via the Java and REST-APIs and the Neo4j Console.
As always, there has been a lot of small fixes and improvements not listed here. Many thanks for all the contributions to Neo4j for many of the issues - it helps a lot to get comments, feedback and patches for things that need improvement!

For the full list of changes, as always, see

Published at DZone with permission of Andreas Kollegger, author and DZone MVB. (source)

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