AgentSkillsCN

databases

高级数据库工程——PostgreSQL(Schema 设计、高级查询、优化、复制、管理)、MongoDB(文档建模、聚合管道、分片、Atlas)、Redis(缓存、发布/订阅、流处理)。适用于 Schema 设计、查询优化、数据库管理、备份与恢复、数据复制,以及性能调优。

SKILL.md
--- frontmatter
name: databases
description: 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.
license: MIT

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 designSQLx (Rust), GORM (Go), SQLAlchemy (Python), Prisma (Node)
EXPLAIN ANALYZE, indexingQuery optimization in any language
DBA tasks (VACUUM, replication)Database administration (language-independent)
MongoDB shell & aggregationOfficial drivers: Rust, Go, Python, Node, Java
Redis CLI patternsRedis 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

CriteriaPostgreSQLMongoDBRedis
Data modelRelational tablesJSON documentsKey-value / streams
Best forACID transactions, complex JOINsFlexible schema, rapid iterationCaching, real-time, pub/sub
ScalingVertical + read replicasHorizontal shardingIn-memory, cluster
Query languageSQLMQL (MongoDB Query Language)Redis commands
When to pickData integrity criticalSchema evolves fastSub-ms latency needed

Quick Start

PostgreSQL

sql
-- 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

javascript
// 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

bash
# 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

Redis Deep-Dive

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

SkillWhen to Use
rust-backend-advanceRust/Axum/SQLx implementation (one backend option)
authenticationUser/session storage, auth tables
paymentsOrders, transactions, subscriptions storage
devopsDatabase hosting, backups, Docker containers
debuggingQuery performance issues, connection problems
testingDatabase integration tests