Just like any day dreaming entrepreneur in this mobile apps world, I also got an idea to develop a mobile application. Bascially I want to build route suggestion application. So I started my research to find best way to implement this idea. I wanted to write notes about all my findings and my work through out, starting from idea development till getting it live. And also I feel its better to get suggestions from people about my approach at every step so that I can “Fail Early” rather than waiting till the end. I will be publishing my notes regularly including different technical and non-technical aspects of developing this mobile app. In this blog I am putting my thoughts regarding chosing the datastore for this app.
As I said above this application is about navigation from/to different places. So obviosly you can visualise it as connected graph with multiple nodes. I have very big data of nodes. And I need to search the connecting path between them based on different parameters. Also the edges connecting these nodes are not simple nodes, they are weighted edges. So first decision to take is “How to manage this data?”.
With typical RDBMS, I need to manage all the relations as foreign key relationships and traversing will be bit difficult with joins especially when the data grows. So started looking at NoSql options especially graph databases. Found following options suiting my requirements :
Evaluated all above and decided to go ahead with Neo4j. My evaluation is based on following points
- Ease of storing and retrieving data
- Support for Java language (All above have java interfaces)
- Out of the box support for graph traversal algorithms.
- Integration points with other systems like REST services for consumtpion etc
- IDE support to manage and inspect data
- And also typical other parameters like scalability and baclup\restoration
Although Neo4j is fully transactional, this is not of much importance me as users of my app will only read data. Only administrators write\modify data. Please let me know if anyone intersted in detailed comparison. I am newbie to this NoSql world. So my decision might be wrong 😦 . If you have any suggestions for me, please don’t hesitate to say that I am wrong :). Infact that is the purpose of this blog – “I like to fail early” .
Next few blogs will be about “Getting started with Neo4j” and “How can you make sure you got a good idea”