[Neo] neo4j for the sysadmin?

Laurent Laborde kerdezixe at gmail.com
Tue Apr 27 10:10:32 CEST 2010

Friendly greetings !

I'm sysadmin and DBA at overblog (1st french blog plateform).
And i agree with you, BUT :

Neo4j is mainly an embedded database (a library).
The RESTful standalone server is very new, afaik, and it is "just" a
REST http server embedding the neo4j database.
It is not "neo4j", just "one of many application that use neo4j".
And, imho, certainly not ready for production use.

I think that a standalone rest server built on top of neo4j should be
a separate project.
(and it should use jetty:// :D )

About your question :

* Is there a preferred way to package this, or am I rolling my own RPM/debs?

the preferred way is "maven". It make sense... for a library.
Neo4j is a single jar. everything else is not the core neo4j and is up
to the maintener of the application that use neo4j.

* Can I make the app fit into the FHS, or is running it in a
self-contained directory my only reasonable option? (Reasonable means
I don't have to patch the source code.)

Most java app are self contained and, imho, should stay that way.

* How do I scale this up? How much RAM will it take before CPU or Disk
I/O are my main bottlenecks? Do I ever have to worry about CPU, or
will I run out of RAM and Disk I/O long before I could think about
using all the processing power in a modern multi-core hyperthreaded

This question don't make sense to me. (any) database load is highly
dependent of usage, content, query, and context.

* Can I change configuration options without doing a full restart?

I don't know.

* What are the replication options? Do any of them handle having the
databases in separate geographical areas (say 80-250ms from each
other?) What about periods where connectivity is broken, how does
neo4j handle that situation?

As far as i know. There is nothing related to replication in the core neo4j.
But since there is a transaction log, it could be done... in the future ?

* How do I upgrade neo4j without downtime for end users? (This implies
working master/master replication or the ability to promote a slave

see above.

* What happens if the app dies in a non-clean fashion? (kill -9, OOM,
power lost, SAN catches fire, whatever)

there is a transaction log, it replay the transaction log as far as it
can without leaving the database in inconsistent state.
Everything else (that could lead to an inconsistent state) is lost.

I never had problem with this (and i killed my apps *a lot*) but i
heard some neo4j story where the whole database had to be trashed and
restarted from scratch.

Remember that, even if neo4j as been used in production for years.
(accoding to neotechnology website), it reached the 1.0 Version not so
long ago. And the Rest standalone server is very new. (a few month?)

My conclusion as sysadmin :
i'd LOVE to use neo4j in production at work, but certainly not for
mission critical application.

Laurent "ker2x" Laborde
Sysadmin & DBA at http://www.over-blog.com/

More information about the User mailing list