Neo4j Graph Database vs MySQL

For my social news stream application I am heavily thinking about the right software to support my backend. After I designed a database model in MySQL I talked back to Jonas and he suggested to search for a better suiting technology. A little bit of research brought me to a Graph database called Neo4j.
After I downloaded the opensource java libs and got it running with eclipse and maven I did some testing with my Metalcon data set. And I have been very satisfied and the whole project looks very promesing to me. I exported 4 relations from my MySQL Database.

  1. UserUserFriend containing all the friendship requests
  2. UserProfileVisit containing the profiles a user visited
  3. UserMessage containing the messages between users
  4. UserComment containing the profile comments between users

These relations obviously form a graph on my data set. Reading the several 100’000 lines of data and put them into the graph data structure and building a search index on the nodes only took several seconds runtime. But I was even more impressed by the speed with which it was possible to traverse the graph!
Receiving the shortest path between two users of length 4 only took me 150 milliseconds. Doing a full bredthfirst search on a different heavily connected graph with 290’000 edges only took 2.7 seconds which means that neo4j is capable of traversing about 100’000 edges per second.
Now I will have to look more carefully to my usecase. Obviously I want to have edges that are labled with timestamps and retrieve them in orderd lists. Adding key value pairs to the edges and including and index is possible which makes me optimisitic that I will be able to solve a lot of my queries of interest in an efficiant manner.
Unfortunately I am batteling around with Google Webtoolkit and Eclipse and Neo4j which I want to combine for the new metlcon version but I even asked the neo4j mailinglist with an very emberassing question and the guys from neotechnology have been very kind and helpful (even thogh I still couldn’t manage to get it running) I will post an article here as soon as I know how to set everything up.
In General I am still a huge fan of relational databases but for a usecase of social networks I see why graph data bases seem to be the more sophisticated technology. I am pretty sure that I could not have perfomed so well using MySQL.
What is your experience with graph data bases and especially neo4j?

You may also like...

Popular Posts

5 Comments

  1. […] stated before I did my first testings with Neo4j. Now I wanted to include Neo4j to GWT which is actually very straight forward but for some reasons I […]

  2. It’s normal that natural form of representation that kind of data is a graph – performance will be always better. I worked on navigation project which was on mysql too. We have really big problems with performance. One route calculation took 42 seconds. A bunch of developers tried to optimize it, when i was trying to convince old method architects to use neo4j. When they gave up at optimalization i get 2 weeks for test neo4j. The result was 5-50ms in calculation. After that i have made some modifications in graph-algo module for navigation purposes. This navigation is socially enabled so it’s ready to work fast. One annoying thing for me is that you can’t use neo4j in embedded mode and connect with webadmin to observe your database. I am waiting or I will write GIS routing on neo4j in the neo4j-spatial module. The importing from OSM is working few months ago, so maybe i will try to expand it.
    My bechelors work subject is not yet formed. I said only that it would be Scala and GIS 🙂

  3. It’s normal that natural form of representation that kind of data is a graph – performance will be always better. I worked on navigation project which was on mysql too. We have really big problems with performance. One route calculation took 42 seconds. A bunch of developers tried to optimize it, when i was trying to convince old method architects to use neo4j. When they gave up at optimalization i get 2 weeks for test neo4j. The result was 5-50ms in calculation. After that i have made some modifications in graph-algo module for navigation purposes. This navigation is socially enabled so it’s ready to work fast. One annoying thing for me is that you can’t use neo4j in embedded mode and connect with webadmin to observe your database. I am waiting or I will write GIS routing on neo4j in the neo4j-spatial module. The importing from OSM is working few months ago, so maybe i will try to expand it.
    My bechelors work subject is not yet formed. I said only that it would be Scala and GIS 🙂

  4. […] A publish/subscribe system seems promising, but how can I combine it with a recommender system? Graph databases are good for querying the social graph, but key-value stores could also be a good choice. Or maybe a hybrid system is […]

  5. […] A publish/subscribe system seems promising, but how can I combine it with a recommender system? Graph databases are good for querying the social graph, but key-value stores could also be a good choice. Or maybe a hybrid system is […]

Leave a Reply

Your email address will not be published. Required fields are marked *