While we've worked hard to make updates to newer versions of Neo4j as pleasant as possible, there are a few things to be aware of, particularly when switching to a major revision.
Neo4j 3.2 Upgrade FAQ
Upgrade FAQs for Neo4j 3.1 and earlier
What is in 3.2?
- Multi-data center support in Enterprise Edition:
- Run Causal Clusters conveniently across geographically separated data centers
- Tiered Read Replicas allow larger scale across data center groups by replicating data from Read Replicas rather than Core Servers across the WAN
- Driver Bolt+routing support for multi-data center configuration
- Causal Cluster improvements
- Causal Cluster-aware drivers allow the client to define the level of consistency needed: Read my own writes vs. read from any instance
- Production governance features in Enterprise Edition:
- Node Keys allow you to specify a set of properties that are mandatory and unique for a given label
- Security: Kerberos support via Neo4j Kerberos Add-On
- Improved query monitoring and administration
- List queries shows active locks and resource utilization per query
- Derived “page cache-hit ratio” shows how efficient a query is in terms of utilizing page caching for optimal performance
- Native performance improvements
- New native label index replaces Lucene indexing for labels (30-300% performance improvement on writing/deleting labelled nodes)
- Introduced composite indexes for index lookups on multiple properties for a node
- Compiled runtime for basic cypher queries improves performance in Enterprise Edition
- IBM Power8 CAPI Flash Support for causal clustering (Enterprise Edition)
Where are the Release Notes?
Release notes for all Neo4j releases can be found here: http://neo4j.com/release-notes/
Is 3.2 an API-Breaking Release?
No. Minor releases are a place to deprecate features and functionality, which includes public APIs. However, we will not remove deprecated functionality until a major release. Note: Upgrading from a version prior to Neo4j 3.0 means that the 3.0 Upgrade FAQs apply, and this would then be a breaking release. If you are upgrading from a 2.x release, see the Upgrade FAQ Archive.
A few things you should know about 3.2:
- The new Compiled Runtime will be used for any Cypher queries that qualify, and it is only covering ~15% of possible queries, so use the PROFILE or EXPLAIN keywords to see which runtime is being used if unsure.
- While Causal Clustering is the primary clustering architecture we are building on, HA still works as well.
- Causal Clustering is still available for server only, not embedded at this time.
- There is now an official RPM package distribution for Neo4j
- neo4j-shell is deprecated in favor of the new cypher-shell
- neo4j-backup is deprecated in favor of neo4j-admin backup
Migrate configuration from a pre-3.0 version
When migrating to Neo4j 3.2 from a release prior to 3.0 please note that most configuration settings have been renamed to support a more consistent naming scheme. Also note that neo4j.properties and neo4j-server.properties have been merged into a single neo4j.conf file. Since many settings have been changed between Neo4j 2.x and Neo4j 3.x, it is advisable to use the config-migrator utility to migrate the config files and settings for you. The config-migrator can be found in the bin/tools directory of Neo4j 3.x, and can be invoked with a command like: java -jar config-migrator.jar path/to/neo4j2.3 path/to/neo4j3.2. Take note of any warnings printed, and manually review the edited config files produced. The warnings will alert you to deprecated settings, or settings it did not know about (spelling mistakes, etc) that require manual intervention.
Where in the Documentation Can I Learn More about Upgrades?
The Upgrade section of the Neo4j Operations Manual can be found here, and also covers upgrades specific to 3.2. The store upgrade happens by starting your Neo4j data store (after making the backup) with Neo4j 3.2 and the configuration dbms.allow_format_migration=true enabled in the configuration file conf/neo4j.conf
Are there any Backwards-Compatibility Options?
Yes. Cypher lets you specify what version of the Cypher compiler you would like to use. See Operations Manual for details. So it is possible to run your 2.x queries without changing them. Of course you will eventually want to upgrade your queries to take advantage of the new features in Cypher and Neo4j 3.2.
Also of note is the new Causal Clustering architecture introduced in 3.1 and further improved in 3.2. Note that 3.2 will continue to support the previous Master/Slave clustering architecture available in 3.0 and prior versions. You can upgrade to 3.2, and save the cluster changes for a later date to simplify the process.
Is the Store Upgrade Reversible?
No, once your data store is upgraded, it cannot be rolled back. For this reason, Neo4j makes a backup of each store file as part of the upgrade to 3.2. (And as an extra precaution, it doesn’t hurt to take a second backup before you start the upgrade process. Just make sure you have enough disk space to accommodate this.) Make sure you have at least double the size of your Neo4j store available as free space on your disk, before you upgrade. After the upgrade is successful, those backup files will be removed.
How Long Will the Upgrade Take?
When you initiate the upgrade of your database to 3.2 for the first time, Neo4j will run through the store files and update them to the new format. How much time this takes depends on the size of your data store. We recommend you try this out in a test environment first, to get an idea of the timing, and help you plan your upgrade. Upgrading from 3.x to 3.2 should be quite fast, while upgrading from pre-3.0 to 3.x will take longer due to the Lucene upgrade. Don’t forget though that you will first need to test your application to make sure it works! Chances are that that you may have to make some changes. How much development time required to update your code will depend on your application. Applications using Neo4j’s native Java APIs will be affected more than others.
When Should I Upgrade?
Upgrading to Neo4j 3.2 from a 3.x version will be very straightforward and will yield immediate performance and governance benefits. You will also have the opportunity to take advantage of new features in the realms of causal clustering, security, governance, etc. If you are in the development and planning phase, then upgrade straight away! If you are already in production with Neo4j, or have a lot of dependencies, test it first and make sure that you have the upgrade steps and dependencies sorted out before upgrading production.
Are Rolling Upgrades Supported?
No. Rolling upgrades let you upgrade a cluster while it is running. While we do our best to support rolling upgrades between patch releases — the scope and nature of the changes made in major/minor versions is such that rolling upgrades are not possible. However, for Enterprise customers looking for guidance on minimizing the impact of this upgrade on your system, refer to the article Upgrading a Neo4j Cluster with Minimal Downtime
What Version Can I Upgrade From?
Neo4j 3.2 supports direct upgrades from 2.0 and newer. It is generally recommended to upgrade from the most recent patch, as that is the tested upgrade path from pre-3.2 releases to 3.2. Previous versions, such as 1.9, have to be upgraded to 2.x first.
How Long Can I Continue Using 3.1?
3.1 will continue to be supported for at least 12 months following its release (December 14th, 2016) per the terms of your Support Agreement. Any fixes deemed applicable to the 3.1 release will be released in a 3.1.x release. As of the time of this writing, the latest stable 3.1.x release is 3.1.4.