a5d34c001a
New German documentation (docs/de/): - index.md, quickstart.md, installation.md - baraql.md, graph.md, vector.md, mcp.md Updated English documentation: - changelog.md: all Sessions 10-12 features - graph.md: SQL GRAPH_TABLE, CREATE GRAPH, all 8 algorithms, Cypher, similarity_nodes, node2vec - vector.md: hybrid RAG, chunk(), embed_text(), auto-embed, nl_to_sql(), schema_prompt() - baraql.md: new AI & Cross-Modal Functions section, updated keyword tables - mcp.md: MCP Server documentation (new file) - index.md: added German (DE) language link
146 lines
3.4 KiB
Markdown
146 lines
3.4 KiB
Markdown
# Graph Engine
|
|
|
|
Adjazenzlisten-Speicher mit eingebauten Algorithmen für Graph-Traversierung und -Analyse.
|
|
Vollständig integriert in den SQL-Executor via `GRAPH_TABLE()`.
|
|
|
|
## SQL — Graph DDL
|
|
|
|
### Graph erstellen
|
|
|
|
```sql
|
|
CREATE GRAPH org_chart;
|
|
```
|
|
|
|
Erstellt automatisch zwei Tabellen:
|
|
- `org_chart_nodes (id INTEGER PRIMARY KEY, node_label TEXT, properties TEXT)`
|
|
- `org_chart_edges (source_id INTEGER, dest_id INTEGER, edge_label TEXT, weight REAL)`
|
|
|
|
### Graph löschen
|
|
|
|
```sql
|
|
DROP GRAPH org_chart;
|
|
```
|
|
|
|
## SQL — Daten einfügen
|
|
|
|
```sql
|
|
-- Knoten
|
|
INSERT INTO org_chart_nodes (id, node_label) VALUES (1, 'CEO');
|
|
INSERT INTO org_chart_nodes (id, node_label) VALUES (2, 'VP');
|
|
|
|
-- Kanten
|
|
INSERT INTO org_chart_edges (source_id, dest_id, edge_label) VALUES (1, 2, 'manages');
|
|
```
|
|
|
|
Alle INSERTs werden automatisch mit dem nativen Graph-Objekt synchronisiert.
|
|
|
|
## SQL — GRAPH_TABLE Abfragen
|
|
|
|
### BFS (Breitensuche)
|
|
|
|
```sql
|
|
SELECT * FROM GRAPH_TABLE(org_chart MATCH (n)-[r]->(m)
|
|
ALGORITHM bfs
|
|
START 1 MAXDEPTH 2
|
|
COLUMNS (id, node_label));
|
|
```
|
|
|
|
### DFS (Tiefensuche)
|
|
|
|
```sql
|
|
SELECT * FROM GRAPH_TABLE(org_chart MATCH (n)-[r]->(m)
|
|
ALGORITHM dfs START 1
|
|
COLUMNS (id, node_label));
|
|
```
|
|
|
|
### PageRank
|
|
|
|
```sql
|
|
SELECT id, node_label, rank FROM GRAPH_TABLE(org_chart
|
|
ALGORITHM pagerank
|
|
COLUMNS (id, node_label, rank))
|
|
ORDER BY rank DESC;
|
|
```
|
|
|
|
### Community Detection (Louvain)
|
|
|
|
```sql
|
|
SELECT id, node_label, community FROM GRAPH_TABLE(org_chart
|
|
ALGORITHM community
|
|
COLUMNS (id, node_label, community));
|
|
```
|
|
|
|
### Kürzester Pfad (Shortest Path)
|
|
|
|
```sql
|
|
SELECT * FROM GRAPH_TABLE(org_chart
|
|
ALGORITHM shortest_path
|
|
START 1 END 3
|
|
COLUMNS (id, node_label));
|
|
```
|
|
|
|
### Dijkstra (gewichtete kürzeste Pfade)
|
|
|
|
```sql
|
|
SELECT * FROM GRAPH_TABLE(org_chart
|
|
ALGORITHM dijkstra START 1
|
|
COLUMNS (id, node_label, distance));
|
|
```
|
|
|
|
## SQL-Funktionen
|
|
|
|
### Knotenähnlichkeit
|
|
|
|
```sql
|
|
-- Jaccard-Ähnlichkeit zwischen allen Knotenpaaren
|
|
SELECT similarity_nodes('social', 'jaccard') AS result;
|
|
|
|
-- Adamic-Adar-Ähnlichkeit
|
|
SELECT similarity_nodes('social', 'adamic_adar') AS result;
|
|
```
|
|
|
|
### Node2Vec Embeddings
|
|
|
|
```sql
|
|
-- Graphstruktur-Embeddings generieren (64 Dimensionen)
|
|
SELECT node2vec_embed('social', 64) AS result;
|
|
```
|
|
|
|
## Cypher-Kompatibilität
|
|
|
|
```sql
|
|
-- Cypher-Syntax automatisch nach GRAPH_TABLE übersetzen
|
|
SELECT cypher('MATCH (a)-[r]->(b) WHERE a.node_label = ''CEO'' RETURN b.node_label') AS result;
|
|
```
|
|
|
|
## Algorithmen
|
|
|
|
| Algorithmus | Beschreibung | SQL |
|
|
|-------------|--------------|-----|
|
|
| `bfs` | Breitensuche | `ALGORITHM bfs` |
|
|
| `dfs` | Tiefensuche | `ALGORITHM dfs` |
|
|
| `dijkstra` | Gewichtete kürzeste Pfade | `ALGORITHM dijkstra` |
|
|
| `pageRank` | Knoten-Wichtigkeit | `ALGORITHM pagerank` |
|
|
| `louvain` | Community Detection | `ALGORITHM community` |
|
|
| `shortestPath` | Kürzester Pfad | `ALGORITHM shortest_path START X END Y` |
|
|
| `similarityNodes` | Knotenähnlichkeit | `similarity_nodes()` |
|
|
| `node2vec` | Graph Embeddings | `node2vec_embed()` |
|
|
|
|
## Native Nim API
|
|
|
|
```nim
|
|
import barabadb/graph/engine
|
|
|
|
var g = newGraph()
|
|
let alice = g.addNode("Person", {"name": "Alice"}.toTable)
|
|
let bob = g.addNode("Person", {"name": "Bob"}.toTable)
|
|
discard g.addEdge(alice, bob, "knows")
|
|
|
|
let bfs = g.bfs(alice)
|
|
let path = g.shortestPath(alice, bob)
|
|
let ranks = g.pageRank()
|
|
let communities = louvain(g)
|
|
let similarities = g.similarityNodes(smJaccard)
|
|
let embeddings = g.node2vec(64, 10, 5)
|
|
```
|