21.4. Upgrading
A database can be upgraded from a minor version to the next, e.g. 1.1 → 1.2, and 1.2 → 1.3, but you can not jump directly from 1.1 → 1.3. For version 1.8 in particular, it is possible to upgrade directly from version 1.5.3 and later, as an explicit upgrade. The upgrade process is a one way step; databases cannot be downgraded.
For most upgrades, only small changes are required to the database store, and these changes proceed automatically when you start up the database using the newer version of Neo4j.
However, some upgrades require more significant changes to the database store. In these cases, Neo4j will refuse to start without explicit configuration to allow the upgrade.
The table below lists recent Neo4j versions, and the type of upgrade required.
Upgrade process for Neo4j version
From Version | To Version | Upgrade Type |
---|---|---|
1.3 | 1.4 | Automatic |
1.4 | 1.5 | Explicit |
1.5 | 1.6 | Explicit |
1.6 | 1.7 | Automatic |
1.7 | 1.8 | Automatic |
1.8 | 1.9 | Automatic |
1.9 | 2.0 | Explicit |
Note Downgrade is supported only between versions which do not have incompatible store layouts.
That means that if you did an upgrade where you didn’t have to explicitly set the |
Automatic Upgrade
To perform a normal upgrade (for minor changes to the database store):
- Download the newer version of Neo4j.
- Cleanly shut down the database to upgrade, if it is running.
- Startup the database with the newer version of Neo4j.
- The upgrade will happen during startup and the process is done when the database has been successfully started.
Explicit Upgrade
To perform a special upgrade (for significant changes to the database store):
- Download the newer version of Neo4j.
- Cleanly shut down the database to upgrade, if it is running.
-
Set the Neo4j configuration parameter
allow_store_upgrade=true
in your neo4j.properties or embedded configuration. - Startup the database with the newer version of Neo4j.
- The upgrade will happen during startup and the process is done when the database has been successfully started.
-
The
allow_store_upgrade
configuration parameter should be removed, set tofalse
or commented out. - Information about the upgrade and progress indicator is printed in messages.log.
Upgrade 1.9 → 2.0
This edition adds a new store for labels and one for schema, an index for labels, and also the format of the node store has changed. Note that we do not currently support rolling upgrades between 1.9.x and 2.0.
For Neo4j 2.0, Java 7 is required. We recommend that you install the Java JDK 7 from the Oracle Website.
When upgrading, the following will happen and will both take some time, and will require extra disk space:
- A new, empty schema store will be created.
- A new, empty label store will be created.
- A new, empty label scan index will be created.
- The node store will be converted, we need to enlarge each record to make space for labels — this will take time depending on the size of your database.
Cypher compatibility
Unless you set the statements to still use Cypher 1.9, they have to be updated for the following changes:
- Pattern syntax
-
Parentheses are required around node patterns when labels are used.
This means that when adding labels to a pattern like
a-->b
you should use something like(a:Person)-->(b:Company)
. It’s good practice to use parentheses in node patterns even where they are not strictly required, to enhance readability. - Optional relationships
-
The syntax
(a)-[?]->(x)
for optional relationships has been removed. UseOPTIONAL MATCH
instead (see the corresponding chapter in the Neo4j Manual). -
The
!
and?
property operators -
Expressions like
node.property = "value"
will not fail when a node without the property is encountered, and will instead returnNULL
. This is the same behavior asnode.property! = "value"
in Cypher 1.9. The!
property operator has been removed in 2.0. Support for expressions using the?
property operator, such asnode.property? = "value"
, have also been removed. You can usenot(has(node.property)) OR node.property = "value"
instead, which is compatible with both 1.9 and 2.0.
-
CREATE
syntax -
The
CREATE a={foo:’bar’}
syntax has been removed. Instead, useCREATE (a {foo:’bar’})
. -
Using
DELETE
to remove properties -
The
DELETE a.prop
syntax has been removed. Instead, useREMOVE a.prop
. - Using parameters for index keys
-
Parameters can not be used as the key in
START
clauses using indexes (for exampleSTART n=node:index({key}='value')
). Use the literal key names instead. - Using parameters to identify nodes in patterns
-
Parameters can not be used to identify nodes in a pattern (ie.
MATCH ({node})-->(other))
). Note that this form was only possible when mixing the embedded Java API and Cypher, and thus does not affect users of Neo4j Server. -
Iteration syntax in
FOREACH
,EXTRACT
, etc -
The iterating functions use a
|
instead of a:
to separate the components of the statement. For example,EXTRACT(n in ns : n.prop)
is replaced withEXTRACT(n in ns | n.prop)
. The iterating functions includeFOREACH
,EXTRACT
,REDUCE
,ANY
,ALL
,SINGLE
andNONE
. -
Alternative
WITH
syntax -
The alternative
WITH
syntax,=== <identifiers> ===
, has been removed. Use theWITH
keyword instead. - The Reference Node
-
With the introduction of Labels in Neo4j 2.0 the Reference Node has become obsolete and has been removed.
Instead, labeled nodes has become the well-known starting points in your graph.
You can use a pattern like this to access a reference node:
MATCH (ref:MyReference) RETURN ref
. Simply use one label per such starting point you want to use. Note that this should be executed once during application initialization, to ensure that only a single reference node is created per label. When migrating a database with an existing reference node, add a label to it during migration, and then use it as per the previous pattern. This is how to add the label:START ref=node(0) SET ref:MyReference
. In case you have altered the database so a different node is the reference node, substitute the node id in the statement.
Embedded Java API
- Mandatory Transactions
- Transactions are now mandatory for read operations as well.
- The Reference Node
- See the Cypher section above as well as the JavaDoc on Label.
Other significant changes
- Plugins
- Plugins are no longer distributed with Neo4j. Please see individual maintainers about availability. For instance, the source for the Gremlin plugin will be available at: https://github.com/neo4j-contrib/gremlin-plugin
Upgrade 1.8 → 1.9
There are no store format changes between these versions so upgrading standalone instances simply consists of starting the database with the newer version. In the case of High Availability (HA) installations, the communication protocol and the master election algorithm have changed and a new "rolling upgrade" feature has been added, removing the need to shut down the entire cluster. For more information, refer to the "Upgrading a Neo4j HA Cluster" chapter of the HA section of the Neo4j manual.
Upgrade 1.7 → 1.8
There are no store format changes between these versions so upgrading standalone instances simply consists of starting the database with the newer version. In the case of High Availability (HA) installations, the communication protocol and the master election algorithm have changed and a new "rolling upgrade" feature has been added, removing the need to shut down the entire cluster. For more information, refer to the "Upgrading a Neo4j HA Cluster" chapter of the HA section of the Neo4j manual.
Upgrade 1.6 → 1.7
There are no store format changes between these versions, which means there is no particular procedure you need to upgrade a single instance.
In an HA environment these steps need to be performed:
- shut down all the databases in the cluster
- shut down the ZooKeeper cluster and clear the version-2 directories on all the ZooKeeper instances
- start the ZooKeeper cluster again
- remove the databases except the master and start the master database with 1.7
- start up the other databases so that they get a copy from the master
Upgrade 1.5 → 1.6
This upgrade changes lucene version from 3.1 to 3.5. The upgrade itself is done by Lucene by loading an index.
In an HA environment these steps need to be performed:
- shut down all the databases in the cluster
- shut down the ZooKeeper cluster and clear the version-2 directories on all the ZooKeeper instances
- start the ZooKeeper cluster again
- start up the other databases so that they get a copy from the master
Upgrade 1.4 → 1.5
This upgrade includes a significant change to the layout of property store files, which reduces their size on disk, and improves IO performance. To achieve this layout change, the upgrade process takes some time to process the whole of the existing database. You should budget for several minutes per gigabyte of data as part of your upgrade planning.
Warning The upgrade process for this upgrade temporarily requires additional disk space, for the period while the upgrade is in progress. Before starting the upgrade to Neo4j 1.5, you should ensure that the machine performing the upgrade has free space equal to the current size of of the database on disk. You can find the current space occupied by the database by inspecting the store file directory (data/graph.db is the default location in Neo4j server). Once the upgrade is complete, this additional space is no longer required. |