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)?
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?
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) ?
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
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?
database handles both nodes and relationships very well, though query
performance generally favors following relationships over checking
Aside from social networks, what other types of applications might a graph database like Neo4j be well suited for?Graph databases
are extremely useful when dealing with large amounts of complex and
highly connected data. Social networks are one example, here are some
- 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 ?
most bearded developers are locked away working on this right now,
though we can't promise a time-frame other than sometime this year.
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.