NOSQL Graph Database Super Model
Neo4j is one of the fashionable Not-Only-SQL alternatives to traditional storage representing the graph database category. A graph database is a natural fit for any data, optimized for accessing related records rather than aggregating data. The “records” are nodes or relationships, because both can store properties. From the file system up, Neo4j is designed for efficiently storing and querying graphs of data. Whether using the new server or embedding the components in your application, you get the same robust graph database, ensuring durability, consistency and ease of access. Let’s listen to designer Emil Eifrem on the subject …
A New You in 1.2
It’s fun to say: Neo4j now runs as a server! Running as a server hides some of our Java underwear, presenting a respectable RESTful interface to applications written in any language, running on any platform. Ruby rock stars, Pythonistas, PHP script heads, C# sharpeners (hm, that doesn’t quite work), you are all welcome here.
The server’s REST API is well documented and discoverable, exposing the essentials of graph services: nodes and relationships, indexing, traversals and a few algorithms. If it doesn’t quite suit your tastes, you can use the Plugin API to add low-level operations which are then available through REST. Perhaps a new traversal algorithm, or a set of nodes representing an entire application entity. Whatever you’d like.
Of course, a real server should run as a system service. With appropriate privileges you can easily install Neo4j as a Windows service or as a Unix daemon, participating in the proper startup and shutdown process of the operating system.
When you’re ready for massive exposure, you’ll want to consider …
Being Highly Available
For demanding applications, the High Availability (HA) feature of Neo4j provides an easy way to set up a cluster of graph databases. You get read scalability that tolerates faults in any participating machine. Writes are allowed to any machine, though synchronized with a slight delay across all of them. While useful today, Neo4j High Availability is a sneak preview with a few limitations. It does provide scalability for read load, but write operations are slightly slower. Adding new machines to a cluster still requires some manual work, and very large transactions cannot be transmitted across machines. These limitations will be addressed in the next version of Neo4j.
But 1.2 news isn’t all about the server. Embedded developers will enjoy some new components and also updates to existing ones.
The kernel has a much smaller memory footprint. Read performance has improved significantly. There is also a new weak reference cache which is perfect for high load, low latency workloads. A new indexing API is integrated with the GraphDatabaseService, better aligning the lifecycle of the service and making the indexes a natural complement of the graph. Finally, the kernel now has service extensions that load automatically, or can be injected in a running instance. Examples include the Neo4j shell server and the management component.
2. Graph Database Monitoring and Management
Monitoring and management has been moved into its own component that will be loaded automatically as a kernel extension. This component lets the graph database instance participate in your JMX management infrastructure.
The Usage Data Collection component provides built-in feedback for guiding the development of Neo4j. More about that can be read in our previous blog post on the subject. For more details about these and all the components, check out the components website.
Strut Your Stuff
OK, enough about us. Let’s talk about you. Show us what you can do.
- Download and get going!
- Use your language of choice to make your application more graph sociable
- Design a new ServerPlugin to add low-level operations to the server
- Go big-time with High Availability