Skip to content

数据库集成架构分析

高层架构

数据库集成架构可以分为以下几个层次:

┌─────────────────────────────────────────────────┐
│           应用层 (Application)               │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │  路由    │  │  控制器   │  │  服务层   ││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│           数据访问层 (Data Access)            │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │  Model   │  │  Schema  │  │  Query   ││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│           数据库驱动层 (Driver)              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │ Mongoose │  │  pg      │  │  Driver  ││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│           数据库层 (Database)                │
│  ┌──────────┐  ┌──────────┐             │
│  │ MongoDB  │  │PostgreSQL │             │
│  └──────────┘  └──────────┘             │
└─────────────────────────────────────────────────┘

MongoDB 架构

MongoDB 架构组件

┌─────────────────────────────────────────────────┐
│              MongoDB 集群                    │
├─────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │  Config  │  │  Shard   │  │  Router  ││
│  │ Server   │  │  Server  │  │  Server  ││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │  Replica │  │  Replica │  │  Replica ││
│  │  Set 1   │  │  Set 2   │  │  Set 3   ││
│  └──────────┘  └──────────┘  └──────────┘│
└─────────────────────────────────────────────────┘

MongoDB 核心组件

  1. Config Server:存储集群元数据
  2. Shard Server:存储数据分片
  3. Query Router:路由查询到正确的分片
  4. Replica Set:提供高可用性

MongoDB 数据模型

文档结构:
{
  "_id": ObjectId("..."),
  "title": "文章标题",
  "content": "文章内容",
  "author": {
    "id": ObjectId("..."),
    "name": "作者名"
  },
  "tags": ["Node.js", "MongoDB"],
  "createdAt": ISODate("2024-01-01"),
  "updatedAt": ISODate("2024-01-01")
}

PostgreSQL 架构

PostgreSQL 架构组件

┌─────────────────────────────────────────────────┐
│              PostgreSQL 实例                │
├─────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │  进程管理  │  │  内存管理  │  │  存储管理  ││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │  查询优化  │  │  事务管理  │  │  连接池   ││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │  数据库   │  │  表空间   │  │  扩展     ││
│  └──────────┘  └──────────┘  └──────────┘│
└─────────────────────────────────────────────────┘

PostgreSQL 核心组件

  1. 进程管理:管理客户端连接和后台进程
  2. 内存管理:共享缓冲区和缓存管理
  3. 存储管理:文件系统和 WAL 管理
  4. 查询优化:查询规划和执行
  5. 事务管理:ACID 事务支持
  6. 连接池:连接复用和管理

PostgreSQL 数据模型

sql
表结构:
CREATE TABLE articles (
  id SERIAL PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  content TEXT,
  author_id INTEGER REFERENCES users(id),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE article_tags (
  article_id INTEGER REFERENCES articles(id),
  tag_id INTEGER REFERENCES tags(id),
  PRIMARY KEY (article_id, tag_id)
);

Node.js 数据库集成架构

连接管理

┌─────────────────────────────────────────────────┐
│            应用程序                          │
├─────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │ 连接池   │  │  连接池   │  │  连接池   ││
│  │ MongoDB  │  │PostgreSQL │  │  Redis   ││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │  Mongoose │  │    pg     │  │  ioredis ││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │ MongoDB  │  │PostgreSQL │  │  Redis   ││
│  └──────────┘  └──────────┘  └──────────┘│
└─────────────────────────────────────────────────┘

数据访问模式

Repository 模式:
┌─────────────────────────────────────────────────┐
│              Service Layer                   │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │ UserService│  │ArticleSvc │  │CommentSvc││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│              Repository Layer                │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │ UserRepo  │  │ArticleRepo│  │CommentRepo││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│              Database Layer                 │
│  ┌──────────┐  ┌──────────┐             │
│  │ MongoDB  │  │PostgreSQL │             │
│  └──────────┘  └──────────┘             │
└─────────────────────────────────────────────────┘

数据流

写入流程

客户端请求

路由层

控制器层

服务层

数据验证

Repository 层

数据库驱动

数据库

返回结果

读取流程

客户端请求

路由层

控制器层

服务层

Repository 层

查询构建

数据库驱动

数据库

结果映射

返回结果

并发模型

MongoDB 并发

┌─────────────────────────────────────────────────┐
│              Node.js 事件循环                │
├─────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │ 异步查询  │  │ 异步查询  │  │ 异步查询  ││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│              连接池                         │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │ 连接 1   │  │ 连接 2   │  │ 连接 3   ││
│  └──────────┘  └──────────┘  └──────────┘│
└─────────────────────────────────────────────────┘

PostgreSQL 并发

┌─────────────────────────────────────────────────┐
│              Node.js 事件循环                │
├─────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │ 异步查询  │  │ 异步查询  │  │ 异步查询  ││
│  └──────────┘  └──────────┘  └──────────┘│
├─────────────────────────────────────────────────┤
│              连接池                         │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐│
│  │ 连接 1   │  │ 连接 2   │  │ 连接 3   ││
│  └──────────┘  └──────────┘  └──────────┘│
└─────────────────────────────────────────────────┘

事务处理

MongoDB 事务

┌─────────────────────────────────────────────────┐
│              事务开始                       │
├─────────────────────────────────────────────────┤
│  操作 1:插入用户                         │
│  操作 2:创建文章                         │
│  操作 3:添加标签                         │
├─────────────────────────────────────────────────┤
│              提交事务                       │
│  或                                       │
│              回滚事务                       │
└─────────────────────────────────────────────────┘

PostgreSQL 事务

┌─────────────────────────────────────────────────┐
│              BEGIN TRANSACTION               │
├─────────────────────────────────────────────────┤
│  操作 1:INSERT INTO users                │
│  操作 2:INSERT INTO articles              │
│  操作 3:INSERT INTO article_tags           │
├─────────────────────────────────────────────────┤
│              COMMIT                        │
│  或                                       │
│              ROLLBACK                      │
└─────────────────────────────────────────────────┘

性能优化策略

MongoDB 优化

  1. 索引策略:为常用查询创建索引
  2. 查询优化:使用投影减少数据传输
  3. 分片策略:合理选择分片键
  4. 读写分离:使用副本集分担读压力
  5. 内存优化:调整工作集大小

PostgreSQL 优化

  1. 索引策略:为常用查询创建索引
  2. 查询优化:使用 EXPLAIN 分析查询
  3. 连接池:复用数据库连接
  4. 分区表:大表分区提高性能
  5. 缓存查询:使用查询缓存

总结

数据库集成架构涉及多个层次,从应用层到数据库层。理解 MongoDB 和 PostgreSQL 的架构差异,有助于我们选择合适的数据库和设计高效的数据库集成方案。通过合理的架构设计,我们可以构建高性能、可扩展的数据存储系统。