mirror of
https://github.com/ruvnet/RuVector.git
synced 2026-05-22 19:56:25 +00:00
Major new package implementing a distributed hypergraph database with: ## Core Components (crates/ruvector-graph/) - Cypher-compatible query parser with lexer, AST, optimizer - Query execution engine with SIMD optimization and parallel execution - ACID transaction support with MVCC isolation levels - Distributed consensus and federation layer - Vector-graph hybrid queries for AI/RAG workloads - Performance optimizations (100x faster than Neo4j target) ## Bindings - WASM bindings (crates/ruvector-graph-wasm/) - NAPI-RS Node.js bindings (crates/ruvector-graph-node/) - NPM packages for both targets ## CLI Integration - 8 new graph commands: create, query, shell, import, export, info, benchmark, serve ## CI/CD - Updated build-native.yml for graph packages - New graph-ci.yml for testing and benchmarks - New graph-release.yml for automated publishing ## Data Generation - OpenRouter/Kimi K2 integration (packages/graph-data-generator/) - Agentic-synth benchmark suite integration ## Tests & Benchmarks - 11 test files covering all components - Criterion benchmarks for performance validation - Neo4j compatibility test suite ## Architecture Highlights - CSR graph layout for cache-friendly access - SIMD-vectorized query operators - Roaring bitmaps for label indexes - Bloom filters for fast negative lookups - Adaptive radix tree for property indexes Note: This is a comprehensive implementation created by 15 parallel agents. Some integration fixes may be needed to resolve cross-module dependencies. Co-authored-by: Claude AI Swarm <swarm@claude.ai>
87 lines
2.7 KiB
Rust
87 lines
2.7 KiB
Rust
//! Basic Graph Operations Example
|
|
//!
|
|
//! This example demonstrates fundamental graph database operations:
|
|
//! - Creating nodes with labels and properties
|
|
//! - Creating relationships between nodes
|
|
//! - Querying nodes and relationships
|
|
//! - Updating and deleting graph elements
|
|
|
|
fn main() {
|
|
println!("=== RuVector Graph - Basic Operations ===\n");
|
|
|
|
// TODO: Once the graph API is exposed in ruvector-graph, implement:
|
|
|
|
println!("1. Creating Graph Database");
|
|
// let db = GraphDatabase::open("./data/basic_graph.db")?;
|
|
|
|
println!("2. Creating Nodes");
|
|
// Create person nodes
|
|
// let alice = db.create_node()
|
|
// .label("Person")
|
|
// .property("name", "Alice")
|
|
// .property("age", 30)
|
|
// .execute()?;
|
|
|
|
// let bob = db.create_node()
|
|
// .label("Person")
|
|
// .property("name", "Bob")
|
|
// .property("age", 35)
|
|
// .execute()?;
|
|
|
|
println!(" ✓ Created nodes: Alice, Bob");
|
|
|
|
println!("\n3. Creating Relationships");
|
|
// Create friendship relationship
|
|
// let friendship = db.create_relationship()
|
|
// .from(alice)
|
|
// .to(bob)
|
|
// .type("FRIENDS_WITH")
|
|
// .property("since", 2020)
|
|
// .execute()?;
|
|
|
|
println!(" ✓ Created relationship: Alice -[FRIENDS_WITH]-> Bob");
|
|
|
|
println!("\n4. Querying Nodes");
|
|
// Find all Person nodes
|
|
// let people = db.query()
|
|
// .match_pattern("(p:Person)")
|
|
// .return_("p")
|
|
// .execute()?;
|
|
|
|
// for person in people {
|
|
// println!(" Found: {:?}", person);
|
|
// }
|
|
|
|
println!("\n5. Traversing Relationships");
|
|
// Find Alice's friends
|
|
// let friends = db.query()
|
|
// .match_pattern("(a:Person {name: 'Alice'})-[:FRIENDS_WITH]->(friend)")
|
|
// .return_("friend")
|
|
// .execute()?;
|
|
|
|
// println!(" Alice's friends: {:?}", friends);
|
|
|
|
println!("\n6. Updating Properties");
|
|
// Update Alice's age
|
|
// db.update_node(alice)
|
|
// .property("age", 31)
|
|
// .execute()?;
|
|
|
|
println!(" ✓ Updated Alice's age");
|
|
|
|
println!("\n7. Deleting Elements");
|
|
// Delete a relationship
|
|
// db.delete_relationship(friendship)?;
|
|
|
|
println!(" ✓ Deleted friendship relationship");
|
|
|
|
println!("\n8. Statistics");
|
|
// let stats = db.stats()?;
|
|
// println!(" Total nodes: {}", stats.node_count);
|
|
// println!(" Total relationships: {}", stats.relationship_count);
|
|
// println!(" Node labels: {:?}", stats.labels);
|
|
// println!(" Relationship types: {:?}", stats.relationship_types);
|
|
|
|
println!("\n=== Example Complete ===");
|
|
println!("\nNote: This is a template. Actual implementation pending graph API exposure.");
|
|
}
|