Merge commit 'd803bfe2b1fe7f5e219e50ac20d6801a0a58ac75' as 'vendor/ruvector'
This commit is contained in:
106
vendor/ruvector/npm/packages/graph-node/README.md
vendored
Normal file
106
vendor/ruvector/npm/packages/graph-node/README.md
vendored
Normal file
@@ -0,0 +1,106 @@
|
||||
# @ruvector/graph-node
|
||||
|
||||
Native Node.js bindings for RuVector Graph Database with hypergraph support, Cypher queries, and persistence. **10x faster than WASM**.
|
||||
|
||||
## Features
|
||||
|
||||
- **Native Performance**: Direct NAPI-RS bindings - no WASM overhead
|
||||
- **Hypergraph Support**: Multi-node relationships with vector embeddings
|
||||
- **Cypher Queries**: Neo4j-compatible query language
|
||||
- **Persistence**: ACID-compliant storage with redb backend
|
||||
- **Vector Similarity Search**: Fast k-NN search on embeddings
|
||||
- **Graph Traversal**: k-hop neighbor discovery
|
||||
- **Transactions**: Full ACID support with begin/commit/rollback
|
||||
- **Batch Operations**: High-throughput bulk inserts (131K+ ops/sec)
|
||||
- **Zero-Copy**: Efficient Float32Array handling
|
||||
- **TypeScript**: Full type definitions included
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install @ruvector/graph-node
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```javascript
|
||||
const { GraphDatabase } = require('@ruvector/graph-node');
|
||||
|
||||
// Create an in-memory database
|
||||
const db = new GraphDatabase({
|
||||
distanceMetric: 'Cosine',
|
||||
dimensions: 384
|
||||
});
|
||||
|
||||
// Or create a persistent database
|
||||
const persistentDb = new GraphDatabase({
|
||||
distanceMetric: 'Cosine',
|
||||
dimensions: 384,
|
||||
storagePath: './my-graph.db'
|
||||
});
|
||||
|
||||
// Or open an existing database
|
||||
const existingDb = GraphDatabase.open('./my-graph.db');
|
||||
|
||||
// Create nodes
|
||||
await db.createNode({
|
||||
id: 'alice',
|
||||
embedding: new Float32Array([1.0, 0.0, 0.0, /* ... */]),
|
||||
labels: ['Person', 'Employee'],
|
||||
properties: { name: 'Alice', age: '30' }
|
||||
});
|
||||
|
||||
// Create edges
|
||||
await db.createEdge({
|
||||
from: 'alice',
|
||||
to: 'bob',
|
||||
description: 'KNOWS',
|
||||
embedding: new Float32Array([0.5, 0.5, 0.0, /* ... */]),
|
||||
confidence: 0.95
|
||||
});
|
||||
|
||||
// Create hyperedges (multi-node relationships)
|
||||
await db.createHyperedge({
|
||||
nodes: ['alice', 'bob', 'charlie'],
|
||||
description: 'COLLABORATED_ON_PROJECT',
|
||||
embedding: new Float32Array([0.33, 0.33, 0.33, /* ... */]),
|
||||
confidence: 0.85
|
||||
});
|
||||
|
||||
// Query with Cypher
|
||||
const results = await db.query('MATCH (n:Person) RETURN n');
|
||||
|
||||
// Vector similarity search
|
||||
const similar = await db.searchHyperedges({
|
||||
embedding: new Float32Array([0.3, 0.3, 0.3, /* ... */]),
|
||||
k: 10
|
||||
});
|
||||
|
||||
// Get statistics
|
||||
const stats = await db.stats();
|
||||
console.log(\`Nodes: \${stats.totalNodes}, Edges: \${stats.totalEdges}\`);
|
||||
```
|
||||
|
||||
## Benchmarks
|
||||
|
||||
| Operation | Throughput | Latency |
|
||||
|-----------|------------|---------|
|
||||
| Node Creation | 9.17K ops/sec | 109ms |
|
||||
| Batch Node Creation | 131.10K ops/sec | 7.63ms |
|
||||
| Edge Creation | 9.30K ops/sec | 107ms |
|
||||
| Vector Search (k=10) | 2.35K ops/sec | 42ms |
|
||||
| k-hop Traversal | 10.28K ops/sec | 9.73ms |
|
||||
|
||||
## Platform Support
|
||||
|
||||
| Platform | Architecture | Status |
|
||||
|----------|--------------|--------|
|
||||
| Linux | x64 (glibc) | Supported |
|
||||
| Linux | arm64 (glibc) | Supported |
|
||||
| macOS | x64 | Supported |
|
||||
| macOS | arm64 (M1/M2) | Supported |
|
||||
| Windows | x64 | Supported |
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user