Database
Drivers
Backend-specific behavior for SQL, MongoDB, and Redis connections
SQL Backends (postgres, mysql, sqlite)
Implementation type: *database.SQLDatabase
Behavior
- retries open with exponential backoff (capped)
- applies connection pool settings from
DatabaseConfig - wraps native
*sql.DBwith Bun*bun.DB - attaches query observability hook
- supports transaction helpers with panic recovery
Native Access
Driver() anyreturns*sql.DBDB()returns*sql.DBBun()returns*bun.DB
Observability
- slow query logging (
SlowQueryThreshold) - query duration histogram and error counter
- optional auto-explain via
AutoExplainThreshold
MongoDB Backend (mongodb)
Implementation type: *database.MongoDatabase
Behavior
- retries connect with exponential backoff
- configures pool limits and idle timeout
- derives DB name from
config["database"]or DSN path - adds command monitor for duration/error metrics
Native Access
Driver() anyreturns*mongo.ClientClient()returns*mongo.ClientDatabase()returns*mongo.DatabaseCollection(name)convenience accessor
Transactions
- supports
TransactionandTransactionWithOptions - recovers panics and records metrics
Redis Backend (redis)
Implementation type: *database.RedisDatabase
DSN Formats Supported
- standalone:
redis://host:6379/0 - TLS:
rediss://host:6379/0 - cluster:
redis://host1:6379,host2:6379/0 - sentinel:
redis-sentinel://user:pass@host1:26379,host2:26379/master/0
Behavior
- parses DSN into
redis.UniversalOptions - auto-detects mode: standalone / cluster / sentinel
- applies pool and timeout settings from
DatabaseConfig - adds command and pipeline observability hooks
Native Access
Driver() anyreturnsredis.UniversalClientClient()returnsredis.UniversalClientPipeline()/TxPipeline()convenience methods
Transaction Semantics
Transaction(...)uses WATCH-based flowPipelined(...)andTxPipelined(...)include panic recovery
Health and State Across Drivers
All driver wrappers expose:
Ping(ctx)Health(ctx)returning latency + message- connection
State()andIsOpen() - backend
Stats()in a normalizedDatabaseStatsshape
How is this guide?