Database Engineering Mastery
Production-ready database patterns for PostgreSQL, MongoDB, and Redis. Focuses on design, optimization, and administration — language-agnostic fundamentals that work with any backend (Rust, Go, Python, Node.js, etc.).
Backend-Agnostic Design
This skill focuses on database fundamentals that work with ANY backend:
| This Skill (databases) |
Backend Implementation |
| Pure SQL, schema design |
SQLx (Rust), GORM (Go), SQLAlchemy (Python), Prisma (Node) |
EXPLAIN ANALYZE, indexing |
Query optimization in any language |
| DBA tasks (VACUUM, replication) |
Database administration (language-independent) |
| MongoDB shell & aggregation |
Official drivers: Rust, Go, Python, Node, Java |
| Redis CLI patterns |
Redis clients: redis-rs, go-redis, redis-py, ioredis |
Implementation Examples:
- Rust: See rust-backend-advance
- Go: Use Gin/Echo + GORM or sqlx
- Python: Use FastAPI + SQLAlchemy or asyncpg
- Node.js: Use Express + Prisma or Knex
Database Selection
| Criteria |
PostgreSQL |
MongoDB |
Redis |
| Data model |
Relational tables |
JSON documents |
Key-value / streams |
| Best for |
ACID transactions, complex JOINs |
Flexible schema, rapid iteration |
Caching, real-time, pub/sub |
| Scaling |
Vertical + read replicas |
Horizontal sharding |
In-memory, cluster |
| Query language |
SQL |
MQL (MongoDB Query Language) |
Redis commands |
| When to pick |
Data integrity critical |
Schema evolves fast |
Sub-ms latency needed |
Quick Start
PostgreSQL
-- Create with constraints
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
metadata JSONB DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_users_email ON users(email);
-- Performance check
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT * FROM users WHERE email = 'test@example.com';
MongoDB
// Insert with validation
db.createCollection("users", {
validator: { $jsonSchema: {
bsonType: "object",
required: ["email", "name"],
properties: {
email: { bsonType: "string", pattern: "^.+@.+$" },
name: { bsonType: "string", minLength: 1 }
}
}}
});
// Aggregation pipeline
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$userId", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } },
{ $limit: 10 }
]);
Redis
# Caching pattern
SET user:123 '{"name":"Alice"}' EX 3600
GET user:123
# Pub/Sub
PUBLISH notifications '{"type":"order","id":456}'
SUBSCRIBE notifications
# Sorted set leaderboard
ZADD leaderboard 100 "player1" 200 "player2"
ZREVRANGE leaderboard 0 9 WITHSCORES
Reference Navigation
PostgreSQL Deep-Dive
- Schema Design — Normalization, partitioning, JSONB, constraints, migrations
- Advanced Queries — CTEs, Window Functions, lateral joins, recursive queries
- Optimization — EXPLAIN, indexing strategies, query planner, statistics
- Administration — Users, backups, VACUUM, monitoring, pgBouncer
- Replication & HA — Streaming replication, failover, pg_basebackup
MongoDB Deep-Dive
- Document Modeling — Embedding vs referencing, schema patterns, polymorphism
- Aggregation Mastery — Pipeline stages, $lookup, $graphLookup, optimization
- Indexing & Performance — Compound, multikey, text, 2dsphere, covered queries
- Atlas & Operations — Atlas setup, monitoring, sharding, backup, security
Redis Deep-Dive
- Patterns & Use Cases — Caching, sessions, rate limiting, pub/sub, streams, Lua scripts
Cross-Database
- Selection Guide — When to use what, hybrid architectures, migration strategies
Best Practices
PostgreSQL: Normalize to 3NF first, denormalize for read performance. Always use EXPLAIN ANALYZE. Index foreign keys. VACUUM regularly. Use pgBouncer for connection pooling.
MongoDB: Embed for 1-to-few, reference for 1-to-many. Index every query pattern. Use aggregation pipeline over map-reduce. Enable authentication. Use Atlas for production.
Redis: Set TTL on everything. Use pipelines for bulk ops. Don't store data you can't lose (unless persisted). Monitor memory with INFO memory.
Related Skills
| Skill |
When to Use |
| rust-backend-advance |
Rust/Axum/SQLx implementation (one backend option) |
| authentication |
User/session storage, auth tables |
| payments |
Orders, transactions, subscriptions storage |
| devops |
Database hosting, backups, Docker containers |
| debugging |
Query performance issues, connection problems |
| testing |
Database integration tests |
1---2name: databases3description: Advanced database engineering — PostgreSQL (schema design, advanced queries, optimization, replication, administration), MongoDB (document modeling, aggregation pipelines, sharding, Atlas), Redis (caching, pub/sub, streams). Use for schema design, query optimization, database administration, backup/restore, replication, and performance tuning.4license: MIT5---67# Database Engineering Mastery89Production-ready database patterns for PostgreSQL, MongoDB, and Redis. Focuses on **design, optimization, and administration** — language-agnostic fundamentals that work with any backend (Rust, Go, Python, Node.js, etc.).1011## Backend-Agnostic Design1213This skill focuses on **database fundamentals** that work with ANY backend:1415| This Skill (databases) | Backend Implementation |16|------------------------|------------------------|17| Pure SQL, schema design | SQLx (Rust), GORM (Go), SQLAlchemy (Python), Prisma (Node) |18| `EXPLAIN ANALYZE`, indexing | Query optimization in any language |19| DBA tasks (VACUUM, replication) | Database administration (language-independent) |20| MongoDB shell & aggregation | Official drivers: Rust, Go, Python, Node, Java |21| Redis CLI patterns | Redis clients: redis-rs, go-redis, redis-py, ioredis |2223**Implementation Examples:**24- Rust: See [rust-backend-advance](../rust-backend-advance/SKILL.md)25- Go: Use Gin/Echo + GORM or sqlx26- Python: Use FastAPI + SQLAlchemy or asyncpg27- Node.js: Use Express + Prisma or Knex2829## Database Selection3031| Criteria | PostgreSQL | MongoDB | Redis |32|----------|-----------|---------|-------|33| **Data model** | Relational tables | JSON documents | Key-value / streams |34| **Best for** | ACID transactions, complex JOINs | Flexible schema, rapid iteration | Caching, real-time, pub/sub |35| **Scaling** | Vertical + read replicas | Horizontal sharding | In-memory, cluster |36| **Query language** | SQL | MQL (MongoDB Query Language) | Redis commands |37| **When to pick** | Data integrity critical | Schema evolves fast | Sub-ms latency needed |3839## Quick Start4041### PostgreSQL42```sql43-- Create with constraints44CREATE TABLE users (45 id UUID PRIMARY KEY DEFAULT gen_random_uuid(),46 email TEXT UNIQUE NOT NULL,47 name TEXT NOT NULL,48 metadata JSONB DEFAULT '{}',49 created_at TIMESTAMPTZ DEFAULT now()50);51CREATE INDEX idx_users_email ON users(email);5253-- Performance check54EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)55SELECT * FROM users WHERE email = 'test@example.com';56```5758### MongoDB59```javascript60// Insert with validation61db.createCollection("users", {62 validator: { $jsonSchema: {63 bsonType: "object",64 required: ["email", "name"],65 properties: {66 email: { bsonType: "string", pattern: "^.+@.+$" },67 name: { bsonType: "string", minLength: 1 }68 }69 }}70});7172// Aggregation pipeline73db.orders.aggregate([74 { $match: { status: "completed" } },75 { $group: { _id: "$userId", total: { $sum: "$amount" } } },76 { $sort: { total: -1 } },77 { $limit: 10 }78]);79```8081### Redis82```bash83# Caching pattern84SET user:123 '{"name":"Alice"}' EX 360085GET user:1238687# Pub/Sub88PUBLISH notifications '{"type":"order","id":456}'89SUBSCRIBE notifications9091# Sorted set leaderboard92ZADD leaderboard 100 "player1" 200 "player2"93ZREVRANGE leaderboard 0 9 WITHSCORES94```9596## Reference Navigation9798### PostgreSQL Deep-Dive99- **[Schema Design](references/postgresql-schema-design.md)** — Normalization, partitioning, JSONB, constraints, migrations100- **[Advanced Queries](references/postgresql-advanced-queries.md)** — CTEs, Window Functions, lateral joins, recursive queries101- **[Optimization](references/postgresql-optimization.md)** — EXPLAIN, indexing strategies, query planner, statistics102- **[Administration](references/postgresql-administration.md)** — Users, backups, VACUUM, monitoring, pgBouncer103- **[Replication & HA](references/postgresql-replication.md)** — Streaming replication, failover, pg_basebackup104105### MongoDB Deep-Dive106- **[Document Modeling](references/mongodb-document-modeling.md)** — Embedding vs referencing, schema patterns, polymorphism107- **[Aggregation Mastery](references/mongodb-aggregation.md)** — Pipeline stages, $lookup, $graphLookup, optimization108- **[Indexing & Performance](references/mongodb-indexing.md)** — Compound, multikey, text, 2dsphere, covered queries109- **[Atlas & Operations](references/mongodb-atlas-ops.md)** — Atlas setup, monitoring, sharding, backup, security110111### Redis Deep-Dive112- **[Patterns & Use Cases](references/redis-patterns.md)** — Caching, sessions, rate limiting, pub/sub, streams, Lua scripts113114### Cross-Database115- **[Selection Guide](references/database-selection-guide.md)** — When to use what, hybrid architectures, migration strategies116117## Best Practices118119**PostgreSQL:** Normalize to 3NF first, denormalize for read performance. Always use `EXPLAIN ANALYZE`. Index foreign keys. VACUUM regularly. Use pgBouncer for connection pooling.120121**MongoDB:** Embed for 1-to-few, reference for 1-to-many. Index every query pattern. Use aggregation pipeline over map-reduce. Enable authentication. Use Atlas for production.122123**Redis:** Set TTL on everything. Use pipelines for bulk ops. Don't store data you can't lose (unless persisted). Monitor memory with `INFO memory`.124125## Related Skills126127| Skill | When to Use |128|-------|-------------|129| [rust-backend-advance](../rust-backend-advance/SKILL.md) | Rust/Axum/SQLx implementation (one backend option) |130| [authentication](../authentication/SKILL.md) | User/session storage, auth tables |131| [payments](../payments/SKILL.md) | Orders, transactions, subscriptions storage |132| [devops](../devops/SKILL.md) | Database hosting, backups, Docker containers |133| [debugging](../debugging/SKILL.md) | Query performance issues, connection problems |134| [testing](../testing/SKILL.md) | Database integration tests |