I'm currently prototyping an application that will use both a RDBMS and Neo4j in parallel. The RDBMS currently exists as the backing store for a web application. While it's feasible to move all of the data into Neo4j, that's not politically palatable right now. So I plan to use Neo4j to store dependency relationships and associated data with references back to the RDBMS. To minimize synchronization issues, I plan to only store entity type and id information in nodes unless specific information is needed to control traversals. Right now most of the data access is via JPA using hibernate through a pretty good DAO-domain abstraction. I plan to extend the domain model to include neo4j nodes and relationships along the lines of your examples and extend the DAOs to include management of the embedded Neo4j instance. My prototype is a Spring app and currently uses aspect oriented transaction management, but in order to manage the transactions on the two databases, I'll probably have to handle transactions programmatically, probably wrapping one in the other. It would be nice to combine the transaction management somehow.
In terms of data migration, although I'm trying to minimize migration right now, I have thought about how I might migrate if I were to use Neo4j exclusively. I'm still not sure what the best approaches are to properties vs nodes for entity attributes, indexes (lucene) vs type subnodes, etc. One of the hurdles to migrating to Neo4j is the lack of tool support, particularly for general access. This has been acknowledged by Emil and others, so I'm not complaining. But with our current app, if we need to import data or fix general data problems, we can use a SQL workbench to directly access the database rather than write a special capability in the app. That's not always the best approach but it does allow other developers more familiar with other technologies the ability to access the DB with their tools/language due to the prevalence of SQL. With Neo4j it seems that programmatic access will be required. Granted, I haven't explored the REST server, SPARQL support, or the shell very much. They may offer more generalized access. I'm interested to hear how others are approaching the polyglot-persistence task. As I move forward, I'll share what I learn or have problems with. Thanks, Kalin On Dec 1, 2010, at 10:52 AM, Andreas Kollegger wrote: > Would anybody be willing to share experiences with trying to introduce Neo4j > into a system with another relational (or other NoSQL) database? > > We're starting to think about best practices for integration: > * Hybrid data-modeling: what goes where? > * XA transactions > * message queues for data distribution > * data migration strategies > > Any problems or feature-requests related to living in a > multi-storage-platform world are welcome. > > Cheers, > Andreas > > > _______________________________________________ > Neo4j mailing list > User@lists.neo4j.org > https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user