关于 databases
面向 MongoDB 和 PostgreSQL 使用者的数据库技能指南,涵盖数据库选型、设计、查询与运维。还提供迁移、备份和性能检查脚本,帮助处理常见管理任务。
主要功能
- 01MongoDB 与 PostgreSQL 选型指南
- 02查询与聚合操作参考
- 03索引和性能优化建议
- 04数据库迁移、备份与恢复脚本
适用场景
- 01为新项目选择数据库
- 02编写 SQL 或 MongoDB 查询
- 03迁移数据并设置备份
- 04排查慢查询和索引问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ samhvw8/ dotfiles --skill databases安装后在 Claude Code 中输入/databases确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/mongodb-aggregation.mdmongodb-atlas.mdmongodb-crud.mdmongodb-indexing.mdpostgresql-administration.mdpostgresql-performance.mdpostgresql-psql-cli.mdpostgresql-queries.mdscripts/db_backup.pydb_migrate.pydb_performance_check.pydot_coveragerequirements.txtscripts/tests/coverage-db.jsonrequirements.txttest_db_backup.pytest_db_migrate.pytest_db_performance_check.py详细介绍
数据库技能
MongoDB(面向文档)和 PostgreSQL(关系型)数据库的统一指南。根据使用场景选择合适的数据库,并掌握这两种系统。
何时使用此技能
适用于:
- 设计数据库架构和数据模型
- 编写查询(SQL 或 MongoDB 查询语言)
- 构建聚合管道或复杂联接
- 优化索引和查询性能
- 实施数据库迁移
- 设置复制、分片或集群
- 配置备份和灾难恢复
- 管理数据库用户和权限
- 分析慢查询和性能问题
- 管理生产环境中的数据库部署
数据库选择指南
选择 MongoDB 的情况:
- 架构灵活性:结构频繁变化、数据异构
- 以文档为中心:天然适配 JSON/BSON 数据模型
- 横向扩展:需要跨多台服务器进行分片
- 高写入吞吐量:IoT、日志记录、实时分析
- 嵌套/层级数据:更适合使用嵌入式文档
- 快速原型开发:无需迁移即可演进架构
最适用于: 内容管理、目录、IoT 时间序列、实时分析、移动应用、用户资料
选择 PostgreSQL 的情况:
- 强一致性:ACID 事务至关重要
- 复杂关系:多对多联接、引用完整性
- 需要 SQL:团队专业知识、报告工具、BI 系统
- 数据完整性:严格的架构验证和约束
- 成熟的生态系统:丰富的工具和扩展
- 复杂查询:窗口函数、CTE、分析型工作负载
最适用于: 金融系统、电商交易、ERP、CRM、数据仓库、分析
两者均支持:
- JSON/JSONB 存储和查询
- 全文搜索功能
- 地理空间查询和索引
- 复制和高可用性
- ACID 事务(MongoDB 4.0+)
- 强大的安全功能
快速开始
MongoDB 设置
# Atlas (Cloud) - Recommended
# 1. Sign up at mongodb.com/atlas
# 2. Create M0 free cluster
# 3. Get connection string
# Connection
mongodb+srv://user:[email protected]/db
# Shell
mongosh "mongodb+srv://cluster.mongodb.net/mydb"
# Basic operations
db.users.insertOne({ name: "Alice", age: 30 })
db.users.find({ age: { $gte: 18 } })
db.users.updateOne({ name: "Alice" }, { $set: { age: 31 } })
db.users.deleteOne({ name: "Alice" })
PostgreSQL 设置
# Ubuntu/Debian
sudo apt-get install postgresql postgresql-contrib
# Start service
sudo systemctl start postgresql
# Connect
psql -U postgres -d mydb
# Basic operations
CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT, age INT);
INSERT INTO users (name, age) VALUES ('Alice', 30);
SELECT * FROM users WHERE age >= 18;
UPDATE users SET age = 31 WHERE name = 'Alice';
DELETE FROM users WHERE name = 'Alice';
常见操作
创建/插入
// MongoDB
db.users.insertOne({ name: "Bob", email: "[email protected]" })
db.users.insertMany([{ name: "Alice" }, { name: "Charlie" }])
-- PostgreSQL
INSERT INTO users (name, email) VALUES ('Bob', '[email protected]');
INSERT INTO users (name, email) VALUES ('Alice', NULL), ('Charlie', NULL);
读取/查询
// MongoDB
db.users.find({ age: { $gte: 18 } })
db.users.findOne({ email: "[email protected]" })
-- PostgreSQL
SELECT * FROM users WHERE age >= 18;
SELECT * FROM users WHERE email = '[email protected]' LIMIT 1;
更新
// MongoDB
db.users.updateOne({ name: "Bob" }, { $set: { age: 25 } })
db.users.updateMany({ status: "pending" }, { $set: { status: "active" } })
-- PostgreSQL
UPDATE users SET age = 25 WHERE name = 'Bob';
UPDATE users SET status = 'active' WHERE status = 'pending';
删除
// MongoDB
db.users.deleteOne({ name: "Bob" })
db.users.deleteMany({ status: "deleted" })
-- PostgreSQL
DELETE FROM users WHERE name = 'Bob';
DELETE FROM users WHERE status = 'deleted';
索引
// MongoDB
db.users.createIndex({ email: 1 })
db.users.createIndex({ status: 1, createdAt: -1 })
-- PostgreSQL
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_status_created ON users(status, created_at DESC);
参考指南
MongoDB 参考
- mongodb-crud.md - CRUD 操作、查询运算符、原子更新
- mongodb-aggregation.md - 聚合管道、阶段、运算符、模式
- mongodb-indexing.md - 索引类型、复合索引、性能优化
- mongodb-atlas.md - Atlas 云端设置、集群、监控、搜索
PostgreSQL 参考
- postgresql-queries.md - SELECT、JOIN、子查询、CTE、窗口函数
- postgresql-psql-cli.md - psql 命令、元命令、脚本编写
- postgresql-performance.md - EXPLAIN、查询优化、清理、索引
- postgresql-administration.md - 用户管理、备份、复制、维护
Python 实用工具
scripts/ 中的数据库实用脚本:
- db_migrate.py - 为两种数据库生成并应用迁移
- db_backup.py - 备份和恢复 MongoDB 与 PostgreSQL
- db_performance_check.py - 分析慢查询并推荐索引
# Generate migration
python scripts/db_migrate.py --db mongodb --generate "add_user_index"
# Run backup
python scripts/db_backup.py --db postgres --output /backups/
# Check performance
python scripts/db_performance_check.py --db mongodb --threshold 100ms
主要差异总结
| 特性 | MongoDB | PostgreSQL |
|---|---|---|
| 数据模型 | 文档(JSON/BSON) | 关系型(表/行) |
| 架构 | 灵活、动态 | 严格、预定义 |
| 查询语言 | MongoDB 查询语言 | SQL |
| 联接 | $lookup(有限) | 原生支持,经过优化 |
| 事务 | 多文档(4.0+) | 原生 ACID |
| 扩展 | 横向(分片) | 纵向(主),横向(扩展) |
| 索引 | 单字段、复合、文本、地理空间等 | B-tree、hash、GiST、GIN 等 |
最佳实践
MongoDB:
- 对一对少关系使用嵌入式文档
- 对一对多或多对多关系使用文档引用
- 为经常查询的字段创建索引
- 使用聚合管道进行复杂转换
- 在生产环境中启用身份验证和 TLS
- 使用 Atlas 托管服务
PostgreSQL:
- 将架构规范化至 3NF,并在需要提升性能时进行反规范化
- 使用外键确保引用完整性
- 为外键和经常用于筛选的列创建索引
- 使用 EXPLAIN ANALYZE 优化查询
- 定期执行 VACUUM 和 ANALYZE 维护操作
- Web 应用使用连接池(pgBouncer)
资源
- MongoDB:https://www.mongodb.com/docs/
- PostgreSQL:https://www.postgresql.org/docs/
- MongoDB University:https://learn.mongodb.com/
- PostgreSQL 教程:https://www.postgresqltutorial.com/
评论
支持 Markdown