Nicht Tabellen.
Beziehungen.
SQL denkt in Zeilen. Graphen denken in Verbindungen.
Wenn deine Queries drei JOINs brauchen um eine Verfügbarkeit zu prüfen,
ist das kein Abfrageproblem — es ist ein Modellierungsproblem.
SQL bei vernetzten
Daten.
Relationale Datenbanken sind brillant für das, wofür sie gebaut wurden: strukturierte Tabellen, einfache Beziehungen, ACID-Transaktionen. Aber sie haben eine Achillesferse: wenn Daten vernetzt sind, nicht nur verknüpft.
Drei JOINs für eine einfache Verfügbarkeitsabfrage. N+1-Queries weil der ORM nicht weiß wohin. Discriminator-Spalten für polymorphe Typen. Hierarchien als Adjazenzlisten — und jede Ebene kostet eine weitere Sub-Query.
Das sind keine Fehler. Das ist SQL das tut was es tut. Das Problem ist das Mismatch zwischen dem Datenmodell und dem Abfragemodell.
Der JOIN ist die Lüge.
Die Beziehung ist der Wert.
15 Jahre Neo4j in Ruby:
die API-Evolution.
Sechs Produktionsprojekte. 2008 bis heute. Die Ruby-Bindings haben sich dreimal neu erfunden — von handgestrickter DSL bis zu ActiveRecord-naher Konvention.
property :name
has_n(:items)
end
# localized_name(locale) traversiert direkt
property :value, type: String
property :unit
# Daten direkt auf der Kante
has_many :out, :concepts,
type: :instance_of,
model_class: Concept
has_one :in, :owner,
origin: :owns
has_many :out, :resources,
model_class: [:Device, :Person, :Gang]
# Polymorphe Typen: ein Relationship-Typ,
# drei Ziel-Labels — kein STI-Hack
Die 6 Projekte im Überblick
Ressourcenplanung für Baustellenbetrieb. 79 Modelle, 57 Migrationen. Person ↔ Device ↔ Mission ↔ TimeSlot (als Linked List). Multi-Hop-Queries für Verfügbarkeit, polymorphe Buchungen, Blocking-Dependencies zwischen Missionen.
Prüfungsmanagement für Eisenbahnwagen. Neo4j + MongoDB gleichzeitig: Split-Brain-Architektur. VehicleReadinessControl referenziert MongoDB-Dokumente per String-ID — keine referentielle Integrität. Neo4j für simple 1:N-Beziehungen die SQL besser kann.
:instance_of / :has_property / :performs Relationen. Semantisches Web ohne RDF-Overhead. Custom Cypher-Node-Extensions direkt auf Query-Ergebnissen.
TraitValue als Relationship-Metadaten auf der Kante (conegger). Mehrsprachige Konzepte als Word-Nodes pro Sprache — localized_name(locale) traversiert direkt (dingdealer, 2008).
dispofox:
79 Modelle, ein Graph.
Dispofox ist das Lehrbuch für legitimen Graph-Einsatz. 79 Modelle. 57 Migrationen zwischen 2018 und 2022. Das Herzstück: eine polymorphe Buchungsstruktur die SQL nicht elegant modellieren kann.
Eine Mission kann Person, Device oder Gang buchen — drei verschiedene Node-Typen hinter einem einzigen Relationship-Typ :ASSIGNED_TO. In SQL: Discriminator-Spalten, nullable Foreign Keys, oder drei Tabellen mit Union-Queries. Im Graph: ein Label-Array.
TimeSlots sind eine Linked List — jeder Slot zeigt auf den nächsten. Das erlaubt Traversal entlang der Zeitachse ohne Range-Queries auf Timestamps.
30+ Relationen an einem Person-Node.
In SQL wäre das ein Schema-Alptraum.
Node-Struktur: dispofox
Cypher vs. SQL:
konkrete Gegenüberstellung.
Nicht abstrakt. Drei echte Query-Szenarien aus Produktionsprojekten. Jeweils SQL und Cypher — damit der Unterschied greifbar wird.
Wann Graph
falsch ist.
railconnect ist das Gegenbeweis-Projekt. Prüfungsmanagement für Eisenbahnwagen. Neo4j plus MongoDB gleichzeitig — das klassische Split-Brain-Problem.
VehicleReadinessControl in Neo4j referenziert Wagons in MongoDB per String-ID. Keine referentielle Integrität. Wenn ein Wagon in MongoDB gelöscht wird, zeigt der Graph ins Leere. Zwei Datenbanken, zwei Konsistenzmodelle, null Garantien.
Das eigentliche Schema: Wagon → Company. 1:N. Das kann SQL in einer Zeile. Für diesen Use Case war Neo4j falsch gewählt — nicht weil Neo4j schlecht ist, sondern weil die Struktur es nicht braucht.
Neo4j + MongoDB = Split-Brain.
Zwei Quellen der Wahrheit sind keine.
Entscheidungsmatrix
| Szenario | Graph | SQL |
|---|---|---|
| Multi-Hop Queries (3+ Hops) | JA | mühsam |
| Beziehungen tragen Daten | JA | Junction-Tabelle |
| Polymorphe Assoziationen | JA | STI / Discriminator |
| Variable Hierarchien | JA | Adjazenzlisten |
| Einfaches 1:N (Wagon→Company) | Overkill | JA |
| ACID-kritische Transaktionen | begrenzt | JA |
| Team kennt Cypher nicht | Risiko | JA |
| Zweite DB daneben (MongoDB) | Split-Brain | besser unified |
GraphRAG + Agentic Memory:
Neo4j als Knowledge Layer.
Oktober 2025: Neo4j erhält $100M Investment in Agentic-AI-Infrastruktur. Das ist kein Pivot — das ist die Beschleunigung einer Entwicklung die seit Jahren läuft. Graphen sind nicht nur Speicher. Sie sind Reasoning-Schicht.
GraphRAG-Bench 2025 bestätigt: bei komplexen Reasoning-Aufgaben outperformt GraphRAG klassisches Vector-RAG. Vector-RAG findet ähnliche Textstellen. GraphRAG traversiert Beziehungen und begründet Antworten über mehrere Hops. LazyGraphRAG (Juni 2025) senkt Indexierungskosten — jetzt auch für Streaming-Daten sinnvoll.
Graphiti (Zep, Open Source, Jan 2025): ein temporales Knowledge-Graph-Framework. Jede Tatsache hat ein Gültigkeitsfenster. "Peter ist CEO" galt bis Q3 2025. Danach "Maria ist CEO". Agenten lernen Veränderungen — nicht nur Fakten. Outperformt MemGPT auf Deep Memory Retrieval Benchmark.
VECTOR<FLOAT32>(1024) als First-Class-Datentyp. HNSW-Index (Hierarchical Navigable Small World) für Approximate Nearest Neighbor Search. Euklidische und Kosinus-Distanz. Neo4j ist jetzt nicht mehr "Graph-DB die auch Vektoren kann" — sondern vollwertige Hybrid-Datenbank: Graph + Vector in einer Query.
Merck "Synaptix": Drug Repurposing auf Neo4j, verbindet Pre-Clinical mit Clinical mit Regulatory als Agentic GenAI. Finance: GNNs auf Neo4j — +200% Fraud-Detection bei gleicher False-Positive-Rate. Supply Chain: Agenten traversieren Lieferanten-Netzwerke, erkennen Engpässe in Echtzeit.
Die Brücke ohne Python.
Der ehrliche Stand: Python dominiert den KI-Stack. LangChain, LlamaIndex, GraphRAG-Frameworks — alles Python. Es gibt kein Ruby-Äquivalent für GraphCypherQAChain.
Aber seit Dezember 2024 existiert der offizielle Neo4j MCP Server. Model Context Protocol (Anthropic). Kein Code notwendig — der Agent fragt Neo4j per Cypher direkt via MCP. Sprachunabhängig. Funktioniert mit Aura, Self-Managed, Docker, Desktop.
Das bedeutet: ein Claude-Agent — der in Rails, in der Shell, in Claude Desktop läuft — kann direkt Cypher gegen eine Neo4j-Datenbank feuern. Ohne Python-Microservice als Bridge. Ohne LangChain-Adapter. Das Protokoll übernimmt die Brückenfunktion.
Ruby + MCP + Neo4j ist jetzt eine valide Production-Stack-Entscheidung. Nicht trotz fehlender Python-Bindings — weil MCP sie überflüssig macht.
MCP-Flow: Agent fragt Neo4j
neo4j_query — Agent generiert Cypher-Query basierend auf Schema-Kontext
neo4j_write
Warum Ruby
und Neo4j passen.
Das ist kein Zufall. Ruby und Neo4j teilen eine Designphilosophie: Konvention vor Konfiguration, lesbare APIs, Metaprogrammierung als erstes Werkzeug.
-
has_many :out / :in —
liest sich wie ActiveRecord, ist aber Graph-Traversal.
define_methodunter der Haube. Kein Umlernen. - model_class: [:Device, :Person, :Gang] — polymorphe Targets in einem Array. SQL braucht STI oder Union-Queries.
- Callbacks funktionieren — before_save, after_create_commit, Validierungen — alles standard Rails-Konventionen.
- Method Chaining für Cypher — .query_as(:m).where(...).pluck(:m) — fluent wie ActiveRecord-Scopes, gibt Cypher-Objekte zurück.
- Labels aus Klassennamen — Person wird automatisch :Person-Label. Keine explizite Deklaration notwendig.
Inline-Graph: Agentic Knowledge Layer
- Alle Produktionsprojekte stecken auf Neo4j 3.5.x — Upgrade auf 5.x unklar
- Monkey-Patching notwendig (dispofox: eigener neo4j_shrine_plugin.rb)
- 30+ Relationen an einem Node: Testing und Onboarding komplex
- Kein LangChain-Ruby-Binding — Python bleibt KI-Stack-Sprache
- MCP schließt die Ruby-Lücke — aber Graphiti/GraphRAG brauchen Python
Dieselbe Idee,
andere Domäne.
Graph-Infrastruktur ist kein isoliertes Werkzeug. Dieselben Patterns tauchen in anderen Kontexten auf — und die Verbindungen sind nicht zufällig.
SPARQL auf dem Chemotion-Wissensgraphen ist dieselbe Idee wie Cypher auf Neo4j — semantisches Querying über strukturierte Beziehungen. Chemische Verbindungen, Reaktionen, Reagenzien: alles vernetzt. Der Agent traversiert den Graphen statt Text-Chunks zu suchen.
MCP ist die R2-D2-Infrastruktur: das Protokoll das Agenten mit Werkzeugen verbindet ohne dass sie dieselbe Sprache sprechen müssen. Neo4j MCP Server ist R2-D2 für Graphen — Claude spricht MCP, Neo4j spricht Bolt, das Protokoll übersetzt.
Der Graph
denkt in Pfaden.
15 Jahre, 6 Projekte, eine Erkenntnis: Graph-Datenbanken lösen das richtige Problem wenn das Problem Beziehungen sind und nicht Zeilen. dispofox hat das bewiesen. railconnect hat gezeigt was passiert wenn man den Hammer falsch einsetzt. $100M in Oktober 2025 zeigen wohin die Reise geht: GraphRAG, Agentic Memory, temporale Knowledge Graphs. Ruby ist dabei — via MCP ohne Python-Umweg.