The content of this article was written by Allison Sparrow at the Neo4j Blog.
Another awesome turnout at our Intro to Graph Databases webinar last week. We had loads of questions throughout the session, and we thank all of you for attending and participating!
Here are the questions captured in the Q&A section. If you don't see your question here, please be sure to join our Neo4j User Group, where our community will be sure to help you out.
To model a graph database, do you start directly with nodes and do not provide an ER diagram first?
- Graph modeling often begins with whiteboarding the data in your domain. Usually, what you draw is what you graph.
Can I have custom RelTypes ?
- Absolutely. All relationship types are defined by the application, so you can create them as appropriate.
Is there a way to keep the graph in memory all the time (except using a ram-disk)?
- While there is no memory-storage mode, it is possible to keep the entire graph in memory by configuring large enough caches, then reading the entire graph (and properties) into memory.
Is it possible to versionize nodes and relationships in the graph?
- Neo4j does not have native versioning, so you would have to model versioning of nodes using a linked list. Relationships could be versioned by using a unique Property to indicate the version.
Does Neo4j support XA transactions?
- Yes, Neo4j is a proper XA transaction citizen.
How are nodes with defined relationships between them located? Do they have embedded pointers stored with the node that point to the address where the related nodes reside in the database? I'm thinking of the network model used by IDMS.
- On disk, there are separate stores for nodes, relationships and properties. For details, consider reading posts from our own Chris Gioran's blog.
How can I return the node which is the last node of traversing (basically the leaf nodes) ?
- With Cypher, you would bind to and return to the last node. For instance, in `start a=node(0) match (a)--(b)--(c) return c` the result would list all of the nodes 'c' that are at the end of a depth-2 traversal from 'a'.
Is subgraph isomorphism possible?
- Subgraph matching is not directly supported, just path pattern-matching. So the match would have to be expressed as a path pattern.
What's the impact of node v. relationship? i.e. is a database more performant with a lot of nodes or relationships?
- The database handles both nodes and relationships very well, though query performance generally favors following relationships over checking property constraints.
Aside from social networks, what other types of applications might a graph database like Neo4j be well suited for?
atabases are extremely useful when dealing with large amounts of complex and highly connected data. Social networks are one example, here are some others:
- Collaboration programs
- Configuration Management
- Geo-Spatial applications
- Impact Analysis
- Master Data Management
- Network Management
- Product Line Management
- Recommendation Engines
How does Neo4j handle nodes that have a lot of relationships (let's say one node connected to all other nodes)? Is there an index on all relationships a node has?
- There is work ongoing now to address what we call "supernodes" with huge numbers (more than 100k) of relationships.
When will production level sharding (even with Eventual Consistency) will be available ?
- Our most bearded developers are locked away working on this right now, though we can't promise a time-frame other than sometime this year.
I am used to thinking of a graph database as set of RDF triples. What are sort of differences between RDF triples and Neo4j data model if any?
- With RDF, each property of an entity requires another triple. In a Property Graph, both the nodes and relationships of the graph can store properties, making it much more efficient.
Is there any known commercial product that uses Neo4j?
- Absolutely! Be sure to check out our Customer Page for a highlighted list of Neo4j in production.