diff --git a/src/docbkx/reference/neo4j.xml b/src/docbkx/reference/neo4j.xml
index 21db044c3..2cab12268 100644
--- a/src/docbkx/reference/neo4j.xml
+++ b/src/docbkx/reference/neo4j.xml
@@ -5,132 +5,156 @@
What is a graph database?
- A graph database is a storage engine that is specialized in storing and retrieving vast networks of
- data. It efficiently stores nodes and relationships and allows high performance traversal of those
- structures. With property graphs it is possible to add an arbitrary number of properties to nodes
- and relationships.
- Graph databases are well suited to model most kinds of domains. In almost all domains there are certain
- things connected to other things. The classes of things are not the most important aspect, rather that each
- invidual instance is represented correctly (with all its necessary properties) in the domain model. In most
- other modelling approaches the relationships between things are reduced to a single link without identity
- and attributes. Graph databases allow to keep the rich relationshiops that originate from the domain equally
- well represented in the model without resorting to model relationships as "things". So there is no impedance
- mismatch when putting real life domains into graph databases.
+ A graph database is a storage engine that is specialized in storing and retrieving vast networks of
+ data. It efficiently stores nodes and relationships and allows high performance traversal of those
+ structures. Properties can be added to nodes and relationships.
+
+
+ Graph databases are well suited for storing most kinds of domain models. In almost all domain models,
+ there are certain things connected to other things. In most other modeling approaches, the relationships
+ between things are reduced to a single link without identity and attributes. Graph databases allow one
+ to keep the rich relationships that originate from the domain, equally well-represented in the database
+ without resorting to also modeling the relationships as "things". There is very little "impedance
+ mismatch" when putting real-life domains into a graph database.
About Neo4j
-
- Neo4j is a graph database. It is a fully ACID transactional database that
- stores data structured as graphs. A graph consists of nodes, connected by relationships. It is a flexible
- data structure that allows for high query performance on complex data, while being intuitive for the
- developer.
-
-
- Neo4j has been in commercial development for 10 years and in production for over 7 years. It is a mature and
- robust graph database that:
-
- has an intuitive graph-oriented model for data representation. Instead of tables, rows, and columns,
- you work with a flexible graph network consisting of
- nodes, relationships, and properties.
-
- has a disk-based, native storage manager completely optimized for storing graph structures for maximum
- performance and scalability.
-
- is scalable. Neo4j can handle graphs of several billion nodes/relationships/properties on
- a single machine, but can also be scaled out across multiple machines for high availability.
-
- has a powerful traversal framework for fast traversals in the node space.
-
- can be deployed as a standalone server or an embedded database with a very small footprint
- (~700k jar).
-
- has a simple and convenient API.
-
-
-
-
- In addition, Neo4j includes the usual database characteristics: ACID transactions, durable persistence,
- concurrency control, transaction recovery, high availability and everything else you’d expect from an
- enterprise database. Neo4j is released under a dual free software/commercial license model.
+
+ Neo4j is a graph database. It is a fully transactional database
+ (ACID) that stores data structured as graphs. A graph consists of nodes, connected by relationships.
+ Inspired by the structure of the human brain, it allows for high query performance on complex data,
+ while remaining intuitive and simple for the developer.
+
+
+ Neo4j has been in commercial development for 10 years and in production for over 7 years.
+ Most importantly it has a helpful and contributing community surrounding it, but it also:
+
+ has an intuitive graph-oriented model for data representation. Instead of tables, rows,
+ and columns, you work with a graph consisting of
+ nodes, relationships, and properties.
+
+ has a disk-based, native storage manager optimized for storing graph structures
+ with maximum performance and scalability.
+
+ is scalable. Neo4j can handle graphs with many billions of nodes/relationships/properties on
+ a single machine, but can also be scaled out across multiple machines for high availability.
+
+ has a powerful traversal framework for traversing in the node space.
+
+ can be deployed as a standalone server or an embedded database with a very small
+ distribution footprint (~700k jar).
+
+ has a Java API.
+
+
+
+
+ In addition, Neo4j has ACID transactions, durable persistence, concurrency control, transaction
+ recovery, high availability, and more. Neo4j is released under a dual free software/commercial
+ license model.
+
GraphDatabaseService
- The interface org.neo4j.graphdb.GraphDatabaseService provides access to the storage engine. Its features
- include creating and retrieving Nodes and Relationships, managing indexes, via an IndexManager, database
- lifecycle callbacks, transation management and more.
+
+ The interface org.neo4j.graphdb.GraphDatabaseService provides access to the
+ storage engine. Its features include creating and retrieving nodes and relationships, managing
+ indexes (via the IndexManager), database life cycle callbacks, transaction management, and more.
- The EmbeddedGraphDatabaseService is an implementation of GraphDatabaseService that is used to embed Neo4j in
- a Java application. This implmentation is used so as to provide the highest and tightest integration. Besides
- the embedded mode, the
- Neo4j server provides
- access to the graph database via a convenient REST-API.
+ The EmbeddedGraphDatabaseService is an implementation of GraphDatabaseService that is used to
+ embed Neo4j in a Java application. This implementation is used so as to provide the highest
+ and tightest integration with the database. Besides the embedded mode, the
+ Neo4j server
+ provides access to the graph database via an HTTP-based REST API.
- Creating Nodes and Relationships
- Using the API of GraphDatabaseService it is easy to create nodes and relate them to each other. Relationships
- are named. Both nodes and relationships can have properties. Property values can be primitive Java types and
- Strings, byte arrays for binary data, or arrays of other Java primitives or Strings.
- Node creation and modification has to happen within a transaction, while reading from the graph store can be
- achieved with or without a transaction.
- Creating nodes and relationships
+
+ Using the API of GraphDatabaseService, it is easy to create nodes and relate them to each other.
+ Relationships are typed. Both nodes and relationships can have properties. Property values can be
+ primitive Java types and Strings, or arrays of Java primitives or Strings. Node creation and
+ modification has to happen within a transaction, while reading from the graph store can be
+ done with or without a transaction.
+
+
+ Neo4j usage
+
-
+]]>
+
Graph traversal
- Getting a single node or relationship and examining it is not the main use case of a graph database. Fast graph traversal and
- application of graph algorithms are. Neo4j provides means via a concise DSL to define TraversalDescriptions that can then be applied
- to a start node and will produce a stream of nodes and/or relationships as a lazy result using an Iterable.
-
+ Getting a single node or relationship and examining it is not the main use case of a graph database.
+ Fast graph traversal and application of graph algorithms are. Neo4j provides a DSL for defining
+ TraversalDescriptions that can then be applied to a start node and will produce a
+ lazy java.lang.Iterable result of nodes and/or relationships.
+
+
+ Traversal usage
+
-
+
Indexing
- The best way for retrieving start nodes for traversals is
- using Neo4j's index facilities. The GraphDatabaseService provides
- access to the IndexManager which in turn retrieves named indexes
- for nodes and relationships. Both can be indexed with property names
- and values. Retrieval is done by query methods on Index to return an IndexHits iterator.
+
+ The best way for retrieving start nodes for traversals is by using Neo4j's integrated index
+ facilities. The GraphDatabaseService provides access to the IndexManager which in turn provides
+ named indexes for nodes and relationships. Both can be indexed with property names and values.
+ Retrieval is done with query methods on indexes, returning an IndexHits iterator.
+
+
+ Spring Data Graph provides automatic indexing via the @Indexed annotation, eliminating the need
+ for manual index management.
+
+
+ Modifying Neo4j indexes also requires transactions.
+
+
+ Index usage
+ nodeIndex = indexManager.forNodes("a-node-index");
-nodeIndex.add(node, "property","value");
-for (Node foundNode = nodeIndex.get("property","value")) {
- assert node.getProperty("property").equals("value");
+Node node = ...;
+Transaction tx = graphDb.beginTx();
+try {
+ nodeIndex.add(node, "property","value");
+ tx.success();
+} finally {
+ tx.finish();
+}
+for (Node foundNode : nodeIndex.get("property","value")) {
+ // found node
}
]]>
- Note: Spring Data Graph provides auto-indexing via the
- @Indexed annotation, while this still is a
- manual process when using the Neo4j API.
-
-
+
+