|
| 1 | +# Redis Vector Database Benchmark |
| 2 | + |
| 3 | +A comprehensive benchmarking tool for vector databases, including Redis (both RediSearch and Vector Sets), Weaviate, Milvus, Qdrant, OpenSearch, Postgres, and others... |
| 4 | + |
| 5 | +In a one-liner cli tool you can get this and much more: |
| 6 | + |
| 7 | +``` |
| 8 | +docker run --rm --network=host redis/vector-db-benchmark:latest run.py --host localhost --engines vectorsets-fp32-default --datasets glove-100-angular --parallels 100 |
| 9 | +(...) |
| 10 | +================================================================================ |
| 11 | +BENCHMARK RESULTS SUMMARY |
| 12 | +Experiment: vectorsets-fp32-default - glove-100-angular |
| 13 | +================================================================================ |
| 14 | +
|
| 15 | +Precision vs Performance Trade-off: |
| 16 | +-------------------------------------------------- |
| 17 | +Precision QPS P50 (ms) P95 (ms) |
| 18 | +-------------------------------------------------- |
| 19 | +0.86 1408.3 61.877 107.548 |
| 20 | +0.80 2136.3 38.722 69.102 |
| 21 | +0.72 2954.3 25.820 48.072 |
| 22 | +0.68 3566.5 20.229 38.581 |
| 23 | +
|
| 24 | +QPS vs Precision Trade-off - vectorsets-fp32-default - glove-100-angular (up and to the right is better): |
| 25 | +
|
| 26 | + 3566 │● |
| 27 | + │ ● |
| 28 | + │ |
| 29 | + 2594 │ |
| 30 | + │ ● |
| 31 | + │ |
| 32 | + 1621 │ ● |
| 33 | + │ |
| 34 | + │ |
| 35 | + 648 │ |
| 36 | + │ |
| 37 | + │ |
| 38 | + 0 │ |
| 39 | + └──────────────────────────────────────────────────────────── |
| 40 | + 0.680 0.726 0.772 0.817 |
| 41 | + Precision (0.0 = 0%, 1.0 = 100%) |
| 42 | +================================================================================ |
| 43 | +
|
| 44 | +``` |
| 45 | + |
| 46 | +## Quick Start |
| 47 | + |
| 48 | +```bash |
| 49 | +# Pull the latest image |
| 50 | +docker pull redis/vector-db-benchmark:latest |
| 51 | + |
| 52 | +# Run with help |
| 53 | +docker run --rm redis/vector-db-benchmark:latest run.py --help |
| 54 | + |
| 55 | +# Check available datasets |
| 56 | +docker run --rm redis/vector-db-benchmark:latest run.py --describe datasets |
| 57 | + |
| 58 | +# Basic Redis benchmark (requires local Redis) |
| 59 | +docker run --rm -v $(pwd)/results:/app/results --network=host \ |
| 60 | + redis/vector-db-benchmark:latest \ |
| 61 | + run.py --host localhost --engines redis-default-simple --dataset random-100 |
| 62 | +``` |
| 63 | + |
| 64 | +## Features |
| 65 | + |
| 66 | +- **42+ Datasets**: Pre-configured datasets from 25 to 1B+ vectors |
| 67 | +- **Multiple Engines**: Redis, Qdrant, Weaviate, Milvus, and more |
| 68 | +- **Real-time Monitoring**: Live performance metrics during benchmarks |
| 69 | +- **Precision Analysis**: Detailed accuracy vs performance trade-offs |
| 70 | +- **Easy Discovery**: `--describe` commands for datasets and engines |
| 71 | + |
| 72 | +## Available Tags |
| 73 | + |
| 74 | +- `latest` - Latest development build from update.redisearch branch |
| 75 | + |
| 76 | +## Redis quick start |
| 77 | + |
| 78 | +### Redis 8.2 with RediSearch |
| 79 | +```bash |
| 80 | +# Start Redis 8.2 with built-in vector support |
| 81 | +docker run -d --name redis-test -p 6379:6379 redis:8.2-rc1-bookworm |
| 82 | + |
| 83 | +# Run benchmark |
| 84 | +docker run --rm -v $(pwd)/results:/app/results --network=host \ |
| 85 | + redis/vector-db-benchmark:latest \ |
| 86 | + run.py --host localhost --engines redis-default-simple --dataset glove-25-angular |
| 87 | +``` |
| 88 | + |
| 89 | + |
| 90 | +## Common Usage Patterns |
| 91 | + |
| 92 | +### Explore Available Options |
| 93 | +```bash |
| 94 | +# List all datasets |
| 95 | +docker run --rm redis/vector-db-benchmark:latest run.py --describe datasets |
| 96 | + |
| 97 | +# List all engines |
| 98 | +docker run --rm redis/vector-db-benchmark:latest run.py --describe engines |
| 99 | +``` |
| 100 | + |
| 101 | +### Run Benchmarks |
| 102 | +```bash |
| 103 | +# Quick test with small dataset |
| 104 | +docker run --rm -v $(pwd)/results:/app/results --network=host \ |
| 105 | + redis/vector-db-benchmark:latest \ |
| 106 | + run.py --host localhost --engines redis-default-simple --dataset random-100 |
| 107 | + |
| 108 | +# Comprehensive benchmark with multiple configurations |
| 109 | +docker run --rm -v $(pwd)/results:/app/results --network=host \ |
| 110 | + redis/vector-db-benchmark:latest \ |
| 111 | + run.py --host localhost --engines "*redis*" --dataset glove-25-angular |
| 112 | + |
| 113 | +# With Redis authentication |
| 114 | +docker run --rm -v $(pwd)/results:/app/results --network=host \ |
| 115 | + -e REDIS_AUTH=mypassword -e REDIS_USER=myuser \ |
| 116 | + redis/vector-db-benchmark:latest \ |
| 117 | + run.py --host localhost --engines redis-default-simple --dataset random-100 |
| 118 | +``` |
| 119 | + |
| 120 | +### Results Analysis |
| 121 | +```bash |
| 122 | +# View precision summary |
| 123 | +jq '.precision_summary' results/*-summary.json |
| 124 | + |
| 125 | +# View detailed results |
| 126 | +jq '.search' results/*-summary.json |
| 127 | +``` |
| 128 | + |
| 129 | +## Volume Mounts |
| 130 | + |
| 131 | +- `/app/results` - Benchmark results (JSON files) |
| 132 | +- `/app/datasets` - Dataset storage (optional, auto-downloaded) |
| 133 | + |
| 134 | +## Environment Variables |
| 135 | + |
| 136 | +- `REDIS_HOST` - Redis server hostname (default: localhost) |
| 137 | +- `REDIS_PORT` - Redis server port (default: 6379) |
| 138 | +- `REDIS_AUTH` - Redis password (default: None) |
| 139 | +- `REDIS_USER` - Redis username (default: None) |
| 140 | +- `REDIS_CLUSTER` - Enable Redis cluster mode (default: 0) |
| 141 | + |
| 142 | +## Performance Tips |
| 143 | + |
| 144 | +1. **Use `--network=host`** for best performance with local Redis |
| 145 | +2. **Mount results volume** to persist benchmark data |
| 146 | +3. **Start with small datasets** (random-100, glove-25-angular) for testing |
| 147 | +4. **Use wildcard patterns** to test multiple configurations: `--engines "*-m-16-*"` |
| 148 | + |
| 149 | +## Example Output |
| 150 | + |
| 151 | +```json |
| 152 | +{ |
| 153 | + "precision_summary": { |
| 154 | + "0.91": { |
| 155 | + "qps": 1924.5, |
| 156 | + "p50": 49.828, |
| 157 | + "p95": 58.427 |
| 158 | + }, |
| 159 | + "0.94": { |
| 160 | + "qps": 1819.9, |
| 161 | + "p50": 51.68, |
| 162 | + "p95": 66.83 |
| 163 | + } |
| 164 | + } |
| 165 | +} |
| 166 | +``` |
| 167 | + |
| 168 | +## Support |
| 169 | + |
| 170 | +- **GitHub**: [redis-performance/vector-db-benchmark](https://github.com/redis-performance/vector-db-benchmark) |
| 171 | +- **Issues**: Report bugs and feature requests on GitHub |
| 172 | +- **Documentation**: Full documentation available in the repository |
| 173 | + |
| 174 | +## License |
| 175 | + |
| 176 | +This project is licensed under the MIT License - see the repository for details. |
0 commit comments