A knowledge graph keeps growing: more entities, more links, more sources. GraphBuff's persistent mode keeps the graph on disk and reads it through a page cache, so its size is bounded by the disk, not by memory.
The problem
An in-memory graph database is fast until the graph is bigger than the machine. Then the choice is a larger machine or a different database, usually in the middle of a project.
With --persistent the same Cypher runs against fixed-size records on disk, with B+tree indexes and a redo log. Start in memory, switch the storage mode when the data needs it; nothing in the queries changes.
Try it with this dataset
Sixteen entities (people, organisations, places, topics), twenty links and an index on the name. Run this in your GraphBuff checkout (get one in a single command); it downloads knowledge.cypher, loads it and leaves you in the shell.
The shortest path over any relationship, in either direction.
MATCH p = shortestPath((a:Entity {name: 'Marie Curie'})-[*]-(b:Entity {name: 'Otto Hahn'}))
RETURN [n IN nodes(p) | n.name] AS connection, length(p) AS hops;
The name index answers the prefix search; the pattern collects who discovered each topic.
MATCH (e:Entity) WHERE e.name STARTS WITH'Ra'OPTIONAL MATCH (who:Person)-[:DISCOVERED]->(e)
RETURN e.name AS topic, collect(who.name) AS discoveredBy ORDER BY topic;