optimizing badger cache, won a 10-15% improvement in most benchmarks

This commit is contained in:
2025-11-16 15:07:36 +00:00
parent 9bb3a7e057
commit 95bcf85ad7
72 changed files with 8158 additions and 4048 deletions

276
scripts/DGRAPH_TESTING.md Normal file
View File

@@ -0,0 +1,276 @@
# Dgraph Integration Testing
This directory contains scripts and configuration for testing the ORLY dgraph integration.
## Quick Start
### 1. Start Dgraph Server
```bash
# Using the convenience script
./scripts/dgraph-start.sh
# Or manually with docker-compose
cd scripts
docker-compose -f dgraph-docker-compose.yml up -d
# Or directly with docker
docker run -d \
-p 8080:8080 \
-p 9080:9080 \
-p 8000:8000 \
--name dgraph-orly \
dgraph/standalone:latest
```
### 2. Run Dgraph Tests
```bash
# Run all dgraph package tests
./scripts/test-dgraph.sh
# Run tests with relay-tester
./scripts/test-dgraph.sh --relay-tester
```
### 3. Manual Testing
```bash
# Start ORLY with dgraph backend
export ORLY_DB_TYPE=dgraph
export ORLY_DGRAPH_URL=localhost:9080
./orly
# In another terminal, run relay-tester
go run cmd/relay-tester/main.go -url ws://localhost:3334
```
## Test Files
The dgraph package includes comprehensive tests:
- **testmain_test.go** - Test configuration and logging setup
- **helpers_test.go** - Helper functions for test setup/teardown
- **save-event_test.go** - Event storage tests
- **query-events_test.go** - Event query tests
All tests mirror the existing badger tests to ensure feature parity.
## Test Coverage
The dgraph tests cover:
**Event Storage**
- Saving events from examples.Cache
- Duplicate event rejection
- Deletion event validation
**Event Queries**
- Query by ID
- Query by kind
- Query by author
- Query by time range
- Query by tags
- Event counting
**Advanced Features**
- Replaceable events (kind 0)
- Parameterized replaceable events (kind 30000+)
- Event deletion (kind 5)
- Event replacement logic
## Requirements
### Dgraph Server
The tests require a running dgraph server. Tests will be skipped if dgraph is not available.
**Endpoints:**
- gRPC: `localhost:9080` (required for ORLY)
- HTTP: `localhost:8080` (for health checks)
- Ratel UI: `localhost:8000` (optional, for debugging)
**Custom Endpoint:**
```bash
export ORLY_DGRAPH_URL=remote.server.com:9080
./scripts/test-dgraph.sh
```
### Docker
The docker-compose setup requires:
- Docker Engine 20.10+
- Docker Compose 1.29+ (or docker-compose plugin)
## Test Workflow
### Running Tests Locally
```bash
# 1. Start dgraph
./scripts/dgraph-start.sh
# 2. Run tests
./scripts/test-dgraph.sh
# 3. Clean up when done
cd scripts && docker-compose -f dgraph-docker-compose.yml down
```
### CI/CD Integration
For CI pipelines, use the docker-compose file:
```yaml
# Example GitHub Actions workflow
services:
dgraph:
image: dgraph/standalone:latest
ports:
- 8080:8080
- 9080:9080
steps:
- name: Run dgraph tests
run: |
export ORLY_DGRAPH_URL=localhost:9080
CGO_ENABLED=0 go test -v ./pkg/dgraph/...
```
## Debugging
### View Dgraph Logs
```bash
docker logs dgraph-orly-test -f
```
### Access Ratel UI
Open http://localhost:8000 in your browser to:
- View schema
- Run DQL queries
- Inspect data
### Enable Test Logging
```bash
export TEST_LOG=1
./scripts/test-dgraph.sh
```
### Manual DQL Queries
```bash
# Using curl
curl -X POST localhost:8080/query -d '{
q(func: type(Event)) {
uid
event.id
event.kind
event.created_at
}
}'
# Using grpcurl (if installed)
grpcurl -plaintext -d '{
"query": "{ q(func: type(Event)) { uid event.id } }"
}' localhost:9080 api.Dgraph/Query
```
## Troubleshooting
### Tests Skip with "Dgraph server not available"
**Solution:** Ensure dgraph is running:
```bash
docker ps | grep dgraph
./scripts/dgraph-start.sh
```
### Connection Refused Errors
**Symptoms:**
```
failed to connect to dgraph at localhost:9080: connection refused
```
**Solutions:**
1. Check dgraph is running: `docker ps`
2. Check port mapping: `docker port dgraph-orly-test`
3. Check firewall rules
4. Verify ORLY_DGRAPH_URL is correct
### Schema Application Failed
**Symptoms:**
```
failed to apply schema: ...
```
**Solutions:**
1. Check dgraph logs: `docker logs dgraph-orly-test`
2. Drop all data and retry: Use `dropAll` in test setup
3. Verify dgraph version compatibility
### Tests Timeout
**Symptoms:**
```
panic: test timed out after 10m
```
**Solutions:**
1. Increase timeout: `go test -timeout 20m ./pkg/dgraph/...`
2. Check dgraph performance: May need more resources
3. Reduce test dataset size
## Performance Benchmarks
Compare dgraph vs badger performance:
```bash
# Run badger benchmarks
go test -bench=. ./pkg/database/...
# Run dgraph benchmarks
go test -bench=. ./pkg/dgraph/...
```
## Test Data
Tests use `pkg/encoders/event/examples.Cache` which contains:
- ~100 real Nostr events
- Various kinds (text notes, metadata, etc.)
- Different authors and timestamps
- Events with tags and relationships
## Cleanup
### Remove Test Data
```bash
# Stop and remove containers
cd scripts
docker-compose -f dgraph-docker-compose.yml down
# Remove volumes
docker volume rm scripts_dgraph-data
```
### Reset Dgraph
```bash
# Drop all data (via test helper)
# The dropAll() function is called in test setup
# Or manually via HTTP
curl -X POST localhost:8080/alter -d '{"drop_all": true}'
```
## Related Documentation
- [Dgraph Implementation Status](../DGRAPH_IMPLEMENTATION_STATUS.md)
- [Package README](../pkg/dgraph/README.md)
- [Dgraph Documentation](https://dgraph.io/docs/)
- [DQL Query Language](https://dgraph.io/docs/query-language/)