Choosing the right backend for each subsystem depends on your scale, latency, operational budget, and feature needs. Config lives in application.yaml; extras install the driver. Swap backends without rewriting callers — they depend on protocols in oridecon-contracts.
uv add "oridecon-sql[postgres]"uv add "oridecon-cache[redis]"Cache backends
Section titled “Cache backends”| Backend | Best for | Key trade-off |
|---|---|---|
memory | Dev, single-process, low-traffic | No persistence, lost on restart, not shared across processes |
redis | Production caching, rate limiting, pub/sub | Requires Redis; O(1) ops, TTL, persistence optional |
memcached | Simple key-value, high throughput | No persistence, no replication, no data structures |
Search backends
Section titled “Search backends”| Backend | Best for | Key trade-off |
|---|---|---|
meilisearch | Typo-tolerant search, quick setup | Smaller ecosystem than Elasticsearch |
elasticsearch | Complex queries, large-scale analytics | Heavy ops overhead, resource hungry |
typesense | Low-latency instant search | Smaller community, fewer integrations |
sqlite/postgres fts | Simple full-text, no extra infra | Limited relevance tuning |
Storage backends
Section titled “Storage backends”| Backend | Best for | Key trade-off |
|---|---|---|
local | Dev, single-server file storage | Not distributed; no CDN, no durability guarantees |
s3 | General object storage, high durability | Egress costs, eventual consistency (some regions) |
gcs | GCP-native, strong consistency | Slightly higher cost than S3 in some tiers |
azure | Azure-native, AD integration | Tied to the Azure ecosystem |
r2 | Zero egress fees, S3-compatible | Newer, smaller ecosystem |
Queue backends
Section titled “Queue backends”| Backend | Best for | Key trade-off |
|---|---|---|
memory | Dev, testing, single-process | No durability, lost on restart |
redis | Simple queues, low-latency | No delivery guarantees beyond “at most once” by default |
rabbitmq | Reliable delivery, complex routing | Ops overhead, needs Erlang runtime |
kafka | High-throughput, event streaming, replay | Heavy ops complexity, higher latency per message |
sqs | Managed queues, AWS-native | Tied to AWS, polling cost at scale |
Database backends
Section titled “Database backends”| Backend | Best for | Key trade-off |
|---|---|---|
sqlite | Embedded, single-server, dev | No concurrent writers, limited ALTER TABLE |
postgres | Production — most applications | Heavier resource footprint than SQLite |
mysql | Read-heavy workloads, replication | Weaker JSON/array support than Postgres |
| Backend | Best for | Key trade-off |
|---|---|---|
mongodb | Flexible schemas, document store | No joins, weaker consistency |
dynamodb | Managed, auto-scaling, AWS-native | Query patterns designed upfront; cost at scale |
firestore | Real-time sync, GCP-native | Limited query capabilities; tied to GCP |
Vector backends
Section titled “Vector backends”| Backend | Best for | Key trade-off |
|---|---|---|
memory | Dev, small datasets (<10k vectors) | No persistence, lost on restart |
pgvector | Postgres-native, integrated with SQL data | Limited index types, slower at scale |
qdrant | High-performance vector search, filtering | Requires a separate service |
pinecone | Fully managed, serverless | Vendor lock-in, egress costs |
Next Steps
Section titled “Next Steps”- Compatibility — extras, driver strings, wire status
- The Ecosystem — every package
- Database guide — repositories and migrations
- Caching — stampede protection and TTL
- Vector stores — embeddings and hybrid search