If you need a SQL-capable database-like solution that is file-based and embeddable in your existing Java Virtual Machine processes, Apache Derby is an open-source, zero cost, robust and performant option. You can use it to store structured relational data but in small files that can be deployed right alongside with your solution, such as storing a set of relational master data or configuration settings inside your binary package that is deployed/installed on servers or client machines.
Titan is definitely a good choice, but it has its learning curve. The documentation may lack in places, and you might have to muster answers from different sources and technologies. But at its core, it does the job of storing and querying graph databases really well. Remember that titan itself is not the whole component, but utilizes other technologies like cassandra, gremlin, tinkerpop, etc to do many other things, and each of them has a learning curve. I would recommend titan for a team, but not for a single person. For single developer, go with Neo4j.
Apache Derby is SMALL. Compared to an enterprise scale system such as MSSQL, it's footprint is very tiny, and it works well as a local database.
The SPEED. I have found that Apache Derby is very fast, given the environment I was developing in.
Based in JAVA (I know that's an obvious thing to say), but Java allows you to write some elegant Object Oriented structures, thus allowing for fast, Agile test cases against the database.
Derby is EASY to implement and can be accessed from a console with little difficulty. Making it appropriate for everything from small embedded systems (i.e. just a bash shell and a little bit of supporting libraries) to massive workstations.
The community is lacking deep documentation. I had to spend many nights trying to figure many things on my own. As graph databases will grow popular, I am sure this will be improved.
Not enough community support. Even in SO you might not find many questions. Though there are some users in SO who quickly answer graph database questions. Need more support.
SQLite is another open-source zero-cost file-based SQL-capable database solution and is a good alternative to Apache Derby, especially for non-Java-based solutions. We chose Apache Derby as it is Java-based, and so is the solution we embedded it in. However, SQLite has a similar feature set and is widely used in the industry to serve the same purposes for native solutions such as C or C++-based products.
To be honest, titan is not as popular as Neo4j, though they do the same thing. In my personal opinion, titan has lot of potential, but Neo4j is easier to use. If the organization is big enough, it might choose titan because of its open source nature, and high scalability, but Neo4j comes with a lot of enterprise and community support, better query, better documentation, better instructions, and is also backed by leading tech companies. But titan is very strong when you consider standards. Titan follows gremlin and tinkerpop, both of which will be huge in future as more graph database vendors join the market. If things go really well, maybe Neo4j might have to support gremlin as well.
Being Open source, the resources spent on the purchase of the product are ZERO.
Contrary to popular belief, open source software CAN provide support, provided that the developers/contributors are willing to answer your emails.
Overall, the ROI was positive: being able to experiment with an open source technology that could perform on par with the corporate products was promising, and gave us much information about how to proceed in the future.