Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is Neo4J a good fit for clojure?

Tags:

clojure

neo4j

I have found that relational databases are a very good fit for Clojure as the set functions (project/join/union etc) map very nicely to a database schema making Clojure almost a perfect fit for using with databases.

I was wondering how Clojure fits in with graph databases like Neo4j however?

like image 235
yazz.com Avatar asked Apr 15 '11 18:04

yazz.com


People also ask

What is Neo4j best for?

Neo4j delivers the lightning-fast read and write performance you need, while still protecting your data integrity. It is the only enterprise-strength graph database that combines native graph storage, scalable architecture optimized for speed, and ACID compliance to ensure predictability of relationship-based queries.

What is better than Neo4j?

TigerGraph has a longer loading time than its main competitor, Neo4j. When considering pre-processing time, TigerGraph is actually faster than Neo4j. TigerGraph is efficient because it needs 19.3x less storage space than Neo4j. TigerGraph is 24.8x faster than Neo4j on the one-hop path query.

What are the weaknesses of Neo4j?

Neo4j has some upper bound limit for the graph size and can support tens of billions of nodes, properties, and relationships in a single graph. No security is provided at the data level and there is no data encryption. Security auditing is not available in Neo4j.

Which big companies use Neo4j?

Leading telcos like Verizon, Orange, Comcast, and AT&T rely on Neo4j to manage networks, control access, and enable customer 360.


2 Answers

Neo4J has clojure'ey bindings here and here and here

you can get the leiningen and maven config for each of these from clojars

allegrograph is another similar graph data store that is widely supported in clojure. so there is some evidence that the answer may be yes!

graph stores lend them selves well to immutable trees which may be an even better fit to Clojure than sets but this is all fairly subjective. The most objective answer I can give is to point to existing use of graph-stores/triple-stores.

like image 127
Arthur Ulfeldt Avatar answered Oct 10 '22 14:10

Arthur Ulfeldt


Mark Watson's book (free pdf version: http://www.markwatson.com/opencontent/book_java.pdf), a lesser known Clojure book he self-published last year, covers some useful graph technology, mainly allegrograph.

I myself don't have much experience with graph db libraries, but the above-cited book mentions that neo4j is optimized to traverse graphs, whereas allegrograph is optimized for subgraph matching. So the choice will likely depend on your specific application.

If you go with allegograph, the author of that book waives the AGPL license on his wrappers for production use if you buy copies of his book, and of course can be used under the conditions of the license freely https://github.com/mark-watson/java_practical_semantic_web

The clojure-neo4j wrapper library exists, though it's unclear if it would be code-rotted or ready for use given the last commit date https://github.com/JulianMorrison/neo4j-clojure. The most recently updated fork, by mattrepl, however was not that long ago: https://github.com/mattrepl/clojure-neo4j.git

like image 8
rplevy Avatar answered Oct 10 '22 14:10

rplevy