Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Bolting Forward: The Neo4j 3.0 Milestone 1 Release is Here

DZone's Guide to

Bolting Forward: The Neo4j 3.0 Milestone 1 Release is Here

As of December 4th, the first milestone release of Neo4j 3.0 is now ready for testing. Take a glance at the major new features here, and try it for yourself.

· Database Zone ·
Free Resource

Compliant Database DevOps and the role of DevSecOps DevOps is becoming the new normal in application development, and DevSecOps is now entering the picture. By balancing the desire to release code faster with the need for the same code to be secure, it addresses increasing demands for data privacy. But what about the database? How can databases be included in both DevOps and DevSecOps? What additional measures should be considered to achieve truly compliant database DevOps? This whitepaper provides a valuable insight. Get the whitepaper

Good news: The first milestone release of Neo4j 3.0 is now ready for testing. Download Neo4j 3.0.0-M01 here.

Disclaimer: Milestone releases like this one are for development and experimentation only as not all features are in their finalized form. Click here if you’re looking for the most fully stable version of Neo4j (2.3.1).

The Neo4j 3.0 Milestone 1 release introduces Bolt, a new network protocol designed for high-performance access to graph databases. Bolt will consolidate and refine all the ways of doing work with Neo4j, providing more consistent access with a pleasant separation of responsibility.

This is the start of a new major branch of development for Neo4j. The work will bring forward all the best features of Neo4j, while leaving behind some things which are no longer useful.

These early days are an incredibly useful time to provide feedback, so please let us know what you think about where we’re headed.

Neo4j 3.0 Milestone 1 is available for download today as part of our Early Access Program.

Uniform Language Drivers With Bolt

For everyone building Neo4j applications, Bolt will improve both the performance as well as the developer experience. Bolt is a connection-oriented protocol, using a compact binary encoding over TCP or web sockets for higher throughput and lower latency.

To complement Bolt, we’re releasing official drivers which encapsulate the protocol, freeing contributors to focus on unique language and framework integration.

Java, JavaScript, and Python drivers are available today, with other languages to follow soon. Each language will have a uniform approach for common, basic operations.

As an example, take a look at this code snippet using the Java driver (org.neo4j.driver:neo4j-java-driver:1.0.0-M01):

Driver driver = GraphDatabase.driver("bolt://localhost:7687");
try (Session session = driver.session()) {
  Result rs = session.run(
     "MATCH (:Person {name:{name})-[:ACTED_IN]->(m:Movie) RETURN m",
                          Values.parameters("name","Keanu Reeves"));
  while (rs.next()) {
     System.out.println(rs.get("m").get("title").javaString());
  }
}

This client-side API is under active development, but this already gives you an idea what it will look like.

The drivers are available through language-specific distribution systems, with source code on GitHub:

Cypher Advances

Bolt’s always-on connection is a huge advantage over per-request connections when there is a high volume of small Cypher queries.

While the HTTP interface will remain available, we want the faster Bolt connection to be the only one you need. Cypher will expand its reach beyond graph queries to encapsulate all Neo4j operations with a uniform request and response pattern.

Included in this milestone, the Cypher cost-based planner is now capable of handling queries which mix reads and writes.

Previously, executing any write operations would fall back to the rule-based planner. Now, several common writes are supported:

    • CREATE nodes and relationships
    • DELETE and DETACH DELETE
    • SET and REMOVE labels
    • SET properties
    • MERGE node

Ongoing work will add support for MERGE of relationships, LOAD CSV and FOREACH.

Additional Notes About Milestone 1

Neo4j Enterprise Edition now exposes more metrics values and provides more documentation.

The ability to log to a single CSV file was removed. Also, the dashboard in webadmin has been removed; please refer to :sysinfoin the Neo4j browser or the appropriate metrics for that information.

The has() function in Cypher, which was deprecated in Neo4j 2.3, has been removed in favor of the more descriptive exists().

One important thing to note is that Neo4j now requires Java 8. Our desktop installers now bundle a Java 8 JRE. For other installations and embedded use, make sure to have Java 8 available.

We Need Your Feedback!

As always, early access releases give you a way to evaluate fancy new Neo4j features that will make our next versions even better. What we ask in return is for your feedback on what things worked well (or didn’t).

Please be aware that milestone releases are beta software not meant for production use, nor do we provide an upgrade path for them.

Send your feedback for this release to feedback@neotechnology.com or raise an issue on GitHub. If you have any questions, feel free to ask on our public Slack channel or post in our Google Group.

Please download the Neo4j 3.0 Milestone 1 release, and give it a try. Happy testing!

Compliant Database DevOps and the role of DevSecOps DevOps is becoming the new normal in application development, and DevSecOps is now entering the picture. By balancing the desire to release code faster with the need for the same code to be secure, it addresses increasing demands for data privacy. But what about the database? How can databases be included in both DevOps and DevSecOps? What additional measures should be considered to achieve truly compliant database DevOps? This whitepaper provides a valuable insight. Get the whitepaper

Topics:
neo4j

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}