I've a credit card applicatoin which utilizes graph (tree-like) custom structures. The structures aren't real trees, but virtually things are connected together. The amount of the information can also be large (countless nodes can exist). Tree-nodes can differ in type to really make it more interesting (inheritance). I'd rather not affect the data-structures to support the persistence storage.
I wish to persist this data without an excessive amount of work. I have goggled some choices to solve this issue, but could not find something that fits exactly for me. Possible options: serialization, databases with ORM (Hibernate?), JCR (JackRabbit?), other things?
Performance is essential, since it is a GUI based "real-time" application (no batch processing) and there might be countless graph-nodes that ought to be read and written between your memory and also the endured data store.
Does anybody have experience or ideas about storing these type of data?
As the data utilizes a graph data structure (essentially: nodes and edges/associations), a graph database will be a excellent match. See my answer on The Next-gen Databases for many links. I am area of the Neo4j free graph database project, see this thread for many discussion from it. A large benefit of using Neo4j inside a situation like yours is the fact that there is no trouble monitoring persisting/initiating objects or activation depth and so on. You most likely wouldn't have to alter the data structures inside your application, however additional code could be needed. The Design guide gives an example of methods your code could communicate with the database.
Because you indicate that there's a sizable volume of data, you most likely desire a mechanism that you could easily bring the information in when needed. Serialization is most likely not so simple to handle with large amounts of information. To be able to break up into workable pieces you should either use separate files on disk or store them elsewhere. JCR (JackRabbit) is much more of the cms. Individuals work nicely for 'document' type objects. It may sound such as the individual bits of the tree you need to store might be small but together they may be large. That's not concept of a Content management systems.
Another option you mention, ORM, is most likely the best choice here. The JPA (Java Persistence API) is ideal for doing ORM in Java. You are able to email the JPA spec and employ Hibernate, Eclipselink or other flavor from the month provider. Individuals works with whatever database you would like. http://java.sun.com/javaee/5/docs/api/index.html?javax/persistence/package-summary.html
Another help to JPA is you can make use of the lazy FetchType for loading tree dependencies. By doing this the application only must load the present group of pieces it's focusing on. As other activities are essential, the JPA layer can retrieve them in the database when needed.