dbnexus 0.3.1

An enterprise-grade database abstraction layer for Rust with built-in permission control and connection pooling
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
# DBNexus 架构

## 目录

- [概述]#概述
- [设计原则]#设计原则
- [系统架构]#系统架构
- [模块架构]#模块架构
- [核心组件]#核心组件
- [数据流]#数据流
- [安全架构]#安全架构
- [性能架构]#性能架构
- [可扩展性架构]#可扩展性架构

---

## 概述

DBNexus 是一个基于 Sea-ORM 构建的企业级数据库抽象层。架构遵循**分层设计**,具有清晰的关注点分离,使开发者能够通过特性门控选择他们需要的确切功能。

### 关键架构目标

1. **模块化** - 特性门控编译以获得最小二进制文件
2. **安全性** - 基于 RAII 的资源管理和编译时保证
3. **性能** - 异步优先设计与高效连接池
4. **可扩展性** - 可插拔组件(权限引擎、缓存策略)
5. **可观测性** - 内置指标和审计日志(可选特性)

---

## 设计原则

### 1. RAII 资源管理

所有数据库连接都使用 Rust 的 RAII(资源获取即初始化)模式进行管理:

```rust
{
    let session = pool.get_session("admin").await?;
    // 使用会话...
    // 当会话被丢弃时连接自动释放
}
```

**优势:**
- 自动连接清理
- 无需手动资源管理
- 异常安全保证

### 2. 特性门控架构

特性被组织成逻辑组并在编译时启用:

**核心特性(始终可用):**
- 带 RAII 管理的连接池
- 基本配置管理
- 数据库驱动选择(SQLite、PostgreSQL、MySQL、DuckDB)

**可选核心特性:**
- `permission` - 基于角色的访问控制
- `sql-parser` - 用于权限检查的 SQL 解析(含 SQL 注入检测)
- `macros` - 用于代码生成的过程宏

**企业特性(可选):**
- `metrics` - Prometheus 指标收集
- `tracing` - OpenTelemetry 集成(0.3.0 增强:OTLP 导出)
- `audit` - 全面审计日志
- `migration` - 数据库迁移管理
- `sharding` - 数据分片支持(0.3.0 增强:会话级分片路由)
- `cache` - oxcache 缓存(内部 moka L1 后端)
- `authentication` - JWT 认证 + 密码强度验证(0.3.0 新增)
- `health-check` - 健康检查 + 熔断器(0.3.0 新增)
- `permission-engine` - 高级权限引擎(RBAC + ABAC)
- `global-index` - 跨分片全局索引

**特性依赖关系(编译时强制):**

| 特性 | 依赖 | 原因 |
|------|------|------|
| `permission` |`sql-parser`(强制) | 防止 SQL 注入绕过权限检查;同时传递依赖 `dashmap``futures``yaml` |
| `sql-parser` |`cache`(自动启用) | 缓存解析结果以提升性能;同时依赖 `sqlparser``once_cell``regex``unicode-normalization` |
| `permission-engine` |`cache``dashmap``futures``once_cell``regex` | 高级权限引擎需要缓存策略决策、并发 map、异步和正则支持 |

> 这些依赖关系在 `src/lib.rs` 中通过 `compile_error!` 宏强制检查,缺失依赖将导致编译失败。

### 3. 异步优先设计

所有 I/O 操作都使用带有 Tokio 的 `async/await`:

- `AsyncMutex` 用于线程安全状态
- `Notify` 用于高效条件等待
- `tokio::spawn` 用于后台任务

### 4. 类型安全抽象

编译时保证防止常见错误:

- **数据库驱动互斥**:只能启用一个数据库驱动
- **权限验证**:编译时角色验证
- **类型安全**:所有数据库操作都是类型安全的

---

## 系统架构

### 高层级分层图

```mermaid
graph TD
    A[应用层<br/>使用 DbPool 和 Session 的代码] --> B[DBNexus API 层<br/>DbPool、Session<br/>权限检查<br/>事务管理]
    B --> C[特性模块<br/>配置、权限、指标<br/>迁移、分片、审计]
    C --> D[连接池<br/>连接生命周期管理<br/>健康检查<br/>RAII 保证]
    D --> E[Sea-ORM / SQLx<br/>数据库驱动<br/>查询构建器]
```

### 组件交互流程

1. **应用程序**`DbPool` 请求具有特定角色的会话
2. **DbPool** 验证角色并创建带有数据库连接的 `Session`
3. **Session** 处理所有数据库操作并进行自动权限检查
4. **权限系统**基于角色策略验证表访问
5. **连接**在会话被丢弃时自动返回到池中

### 关键实现细节

- **连接池**:使用 `AsyncMutex<Vec<DatabaseConnection>>` 配合原子计数器
- **权限缓存**:角色策略的 oxcache 缓存(内部 moka L1 后端)以提高性能
- **健康检查**:后台任务定期验证空闲连接
- **RAII 管理**:会话丢弃时连接自动释放

---

## 模块架构

DBNexus 采用清晰的八层架构,每层有明确职责。各层通过 `src/lib.rs` 统一声明和导出。

### 1. 公共类型层 (`common/`)

零依赖的基础类型,被所有层共用。

- `common/mod.rs` — 模块入口
- `common/error.rs``DbNexusError``DbNexusResult``ErrorCategory``QueryErrorReport`(顶层统一错误类型)

### 2. 基础层 (`foundation/`)

配置和错误处理的基础设施,无业务逻辑。

- `foundation/mod.rs` — 模块入口,re-export config/error 及 Sea-ORM trait(`ActiveModelTrait``EntityTrait``Condition``Set`- `foundation/config/` — 配置系统(纯数据结构,通过 serde 反序列化)
  - `mod.rs` — 模块入口
  - `types.rs``DbConfig``CacheConfig``PoolConfig``DatabaseType``ConfigError`
- `foundation/error/` — 子错误类型
  - `mod.rs``DbError``DbResult``AuditError``MigrationError``MigrationResult``ConfigResult``PermissionResult``PoolResult`

> **注意**:顶层统一错误类型 `DbNexusError` 定义在 `common/error.rs`,本层定义各模块的子错误类型。

### 3. 领域层 (`domain/`)

业务领域接口和数据模型,可依赖 foundation 层和第三方库。

- `domain/mod.rs` — 模块入口
- `domain/audit/` — 审计领域(cfg = "audit")
  - `mod.rs``AuditLogger``AuditEvent``AuditEventBuilder``AuditOperation``AuditSeverity``AuditStatus``AuditStorage``MemoryAuditStorage``AuditContext``AuditQueryFilters``AuditConfig`
- `domain/migration/` — 迁移领域
  - `mod.rs` — 模块入口
  - `schema.rs``types.rs``converter.rs``metadata.rs``column_changes.rs` — 基础模块(始终可用,供 `#[db_entity]` 宏生成的 `schema()` 方法使用)
  - `executor.rs``differ.rs``sql_reverser.rs` — 执行模块(cfg = "migration",依赖 `sqlparser``regex`- `domain/permission/` — 权限领域接口(cfg = "permission")
  - `mod.rs``PermissionProvider``PermissionChecker``PolicyManager``PermissionLifecycle` trait,工厂函数 `new`/`with_cache`/`new_in_memory`
  - `interface.rs` — trait 定义
  - `config.rs``PermissionConfig``DefaultPolicy`
  - `types.rs``PermissionAction``RolePolicy``TablePermission``PolicySet`
  - `error.rs``PermissionError``PermissionConfigError`
  - `impl_/` — 实现(`default.rs` = `YamlPermissionProvider``memory.rs` = `MemoryPermissionProvider`
### 4. 数据库层 (`database/`)

数据库连接、会话和分片管理。

- `database/mod.rs` — 模块入口
- `database/pool/` — 连接池
  - `mod.rs``ConnectionPool` trait、`DatabaseSession` trait、`DbPoolBuilder``DbConnection` 枚举、`PoolStatus`
  - `db_pool.rs``DbPool``DatabaseConnection` 类型别名
  - `session.rs``Session`(RAII 会话,drop 时自动归还连接)
  - `duckdb_conn.rs``DuckDbConnection``DuckDbRow``DuckDbExecResult`(cfg = "duckdb",0.3.0 新增)
- `database/sharding.rs``ShardRouter``ShardConfig``ShardingStrategy` trait、`create_strategy`(cfg = "sharding")
- `database/migration/` — 运行时迁移执行器(cfg = "migration",重导出 `domain::migration`
### 5. 访问层 (`access/`)

权限控制、安全检查、认证。

- `access/mod.rs` — 模块入口
- `access/permission/` — 运行时 RBAC 权限(cfg = "permission")
  - `mod.rs` — 模块入口,re-export 各子模块
  - `types.rs``PermissionAction``PermissionConfig``RolePolicy``TablePermission``PermissionError`
  - `context.rs``PermissionContext`(缓存 + 速率限制 + 缓存击穿防护,cfg = "cache")
  - `cache.rs``PermissionCache``PermissionCacheConfig`(TTL + SWR 缓存,0.3.0 新增)
  - `provider.rs``PermissionProvider` trait、`MemoryPermissionProvider``YamlPermissionProvider``RefreshablePermissionProvider`
  - `rate_limiter.rs``RateLimiter`(速率限制)
  - `stats.rs``PermissionCheckStats``CacheStats`(权限统计)
  - `rbac.rs``RbacProvider`(RBAC 实现)
  - `advanced.rs``AdvancedRbacProvider`(高级权限功能)
- `access/security/` — 安全模块
  - `mod.rs` — 模块入口
  - `ddl_guard.rs``DdlGuard``DdlValidationResult`(cfg = "sql-parser",AST-based DDL 验证)
  - `sensitive.rs``SensitiveMasker``MaskType``SensitiveError``SensitiveResult`(数据脱敏)
- `access/authentication/` — JWT 认证(cfg = "authentication",0.3.0 新增)
  - `mod.rs``AuthenticationManager``AuthCredentials``AuthResult``AuthError`
  - `jwt.rs``JwtManager``JwtClaims``TokenType`
  - `password.rs``PasswordHasher`(bcrypt 哈希 + 密码强度验证)
  - `models.rs``User``AuthCredentials` 数据模型
- `access/permission_engine.rs``PolicyDecisionPoint``RbacPermissionProvider``PermissionRule``PermissionDecision``PermissionSubject``PermissionResource``Role`(cfg = "permission-engine",RBAC + ABAC 高级权限引擎)
- `access/sql_parser.rs``SqlParser``SqlParseError``is_ddl_operation``contains_sql_injection`(cfg = "sql-parser")

#### 双 Permission 实现说明

项目中存在两套 permission 实现,分工明确:

- **`domain/permission/`** — 权限**领域接口层**,提供 trait 定义(`PermissionProvider``PermissionChecker``PolicyManager``PermissionLifecycle`)和配置类型。适用于仅需接口或配置类型的场景。
- **`access/permission/`** — 权限**运行时实现层**,提供 `PermissionContext`(缓存 + 速率限制 + 缓存击穿防护)、`RateLimiter``RbacProvider`/`AdvancedRbacProvider`、统计等运行时能力。适用于需要运行时上下文/缓存/速率限制的场景。

两层互补共存,非"已弃用"关系。新代码如需运行时上下文/缓存/速率限制,使用 `access/permission`;如仅需接口或配置类型,使用 `domain/permission`。

### 6. 观测层 (`observability/`)

可观测性基础设施。

- `observability/mod.rs` — 模块入口
- `observability/metrics.rs``MetricsCollector``MetricsCollectorTrait``QueryStats``LatencyPercentiles``LatencyHistogram``PoolMetrics``SlowQueryRecord``ThroughputStats``ConnectionAcquireStats``TransactionStats`(cfg = "metrics",Prometheus 指标导出)
- `observability/health.rs``HealthChecker``HealthStatus``HealthCheckResult``CircuitBreaker``CircuitBreakerConfig``CircuitBreakerState``PoolHealthMetrics`(cfg = "health-check",健康检查 + 熔断器)
- `observability/tracing.rs``TracingGuard``TracingError`(cfg = "tracing",OpenTelemetry 集成)

### 7. 存储层 (`storage/`)

- `storage/mod.rs` — 模块入口
- `storage/global_index.rs``GlobalIndex``IndexEntry``SyncEvent``SyncResult``SYNC_STATUS_PENDING``SYNC_STATUS_SYNCED``SYNC_STATUS_FAILED` 常量(cfg = "global-index",跨分片全局索引)

### 8. 工具包层 (`kit/`)

基于 `trait-kit` 的统一能力管理。

- `kit/mod.rs``DbNexusKit`(门面,提供 `provide_*` / `*` 方法注册和获取能力)
- `kit/keys.rs``CapabilityKey` 系列类型(`PermissionCapKey``ConnectionPoolCapKey``DatabaseSessionCapKey``MetricsCapKey``HealthCapKey`
### 自动生成模块

- `generated_roles.rs` — 编译时生成的角色常量(由 `#[db_entity]` 宏生成,`mod generated_roles;` 声明)

---

## 核心组件

### 1. 过程宏系统

**目的:**编译时代码生成以减少样板代码

**提供的宏:**

|| 目的 |
|--------|---------|
| `#[db_entity(...)]` | 统一的属性宏,将结构体映射到数据库表并生成 CRUD 方法、缓存、审计等功能 |

**宏扩展示例:**

**输入:**
```rust
#[db_entity(table_name = "users", primary_key = "id")]
#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "users")]
struct User {
    #[sea_orm(primary_key)]
    id: i64,
    name: String,
}
```

**生成的代码(简化):**
```rust
impl User {
    // CRUD 方法
    pub async fn insert(session: &Session, value: User) -> DbResult<User> { /* ... */ }
    pub async fn find_by_id(session: &Session, id: i64) -> DbResult<Option<User>> { /* ... */ }
    pub async fn update(session: &Session, value: User) -> DbResult<User> { /* ... */ }
    pub async fn delete(session: &Session, id: i64) -> DbResult<()> { /* ... */ }

    // 实体方法
    pub const TABLE_NAME: &str = "users";
    pub const PRIMARY_KEY: &str = "id";
}
```

### 2. SQL 解析器

**目的:**从 SQL 中提取操作类型和目标表

**支持的操作:**

```rust
pub enum SqlOperationType {
    Select,    // SELECT 查询
    Insert,    // INSERT 语句
    Update,    // UPDATE 语句
    Delete,    // DELETE 语句
    Ddl,       // CREATE/ALTER/DROP/TRUNCATE
    Dcl,       // GRANT/REVOKE
    Transaction, // BEGIN/COMMIT/ROLLBACK
    Other,      // 其他所有
}
```

**使用:**

```rust
let parser = SqlParser::new();
let (table_name, operation) = parser.parse_operation("SELECT * FROM users WHERE id = 1")?;

// 返回: ("users", SqlOperationType::Select)
```

### 3. 健康检查系统

**目的:**维护连接池健康

**架构:**

```mermaid
flowchart TD
    Start[后台任务<br/>tokio::spawn] --> Interval[间隔触发<br/>每 N 秒]

    Interval --> Validate[验证空闲连接]
    Validate --> Execute[执行 SELECT 1]
    Execute --> CheckValid{是否有效?}

    CheckValid -->|是| Keep[保留连接]
    CheckValid -->|否| Remove[移除连接]

    Keep --> Recreate[重新创建连接<br/>以维持 min_connections]
    Remove --> Recreate

    Recreate --> Interval
```

**健康检查实现:**

```rust
pub async fn validate_and_recreate_connections(&self) -> Result<u32, sea_orm::DbErr> {
    let mut invalid_count = 0;

    for conn in idle_connections.drain(..) {
        let is_valid = timeout(Duration::from_secs(2), conn.execute_raw("SELECT 1"))
            .await
            .is_ok_and(|result| result.is_ok());

        if is_valid {
            valid_connections.push(conn);
        } else {
            invalid_count += 1;
        }
    }

    // 重新创建以维持最小值
    let needed = min_connections - valid_connections.len();
    for _ in 0..needed {
        let new_conn = create_connection().await?;
        valid_connections.push(new_conn);
    }

    Ok(invalid_count)
}
```

---

## 数据流

### 查询流

```mermaid
sequenceDiagram
    participant App as 应用程序
    participant CRUD as #[db_entity]
    participant Session as Session
    participant PermCtx as PermissionContext
    participant Parser as SQL 解析器
    participant SeaORM as Sea-ORM
    participant Audit as 审计日志

    App->>CRUD: 1. User::find_by_id(&session, 1)
    CRUD->>CRUD: 2. 检查权限
    CRUD->>Session: 3. check_permission("users", "SELECT")

    Session->>PermCtx: PermissionContext.check_table_access()
    PermCtx->>PermCtx: 速率限制检查
    PermCtx->>PermCtx: LRU 缓存查找
    PermCtx->>PermCtx: 加载策略并评估
    PermCtx-->>Session: 返回允许/拒绝

    Session-->>CRUD: 权限结果
    CRUD->>SeaORM: 4. 构建 Sea-ORM 查询
    CRUD->>Session: 5. execute(query)

    Session->>Parser: 6. SQL 解析器验证操作类型
    Parser-->>Session: 返回验证的查询

    Session->>SeaORM: 7. 通过 Sea-ORM 执行
    SeaORM-->>Session: 8. 返回结果
    Session-->>CRUD: 返回结果
    CRUD-->>App: 返回结果

    App->>Audit: 9. 审计日志条目(如果启用)
```

### 写流(带事务)

```mermaid
sequenceDiagram
    participant App as 应用程序
    participant Session as Session
    participant PermCtx as 权限上下文
    participant SeaORM as Sea-ORM
    participant Cache as 缓存
    participant Audit as 审计日志

    App->>Session: 1. User::insert(&session, user)
    Session->>Session: 2. begin_transaction()

    Session->>PermCtx: 3. 权限检查(在 "users" 上的 INSERT)
    PermCtx-->>Session: 返回允许/拒绝

    Session->>SeaORM: 4. 通过 Sea-ORM 插入
    SeaORM-->>Session: 返回结果

    Session->>Cache: 5. 缓存失效(如果启用)
    Session->>Audit: 6. 审计日志(如果启用)

    Session->>Session: 7. commit()
    Session-->>App: 8. 返回成功

    Note over Session: 如果错误:<br/>rollback()
```

---

## 安全架构

### 纵深防御

```mermaid
graph TD
    subgraph Layer1["第 1 层:编译时保证"]
        Unsafe[禁止不安全代码]
        DriverMutual[数据库驱动互斥]
        PermMacro[权限宏验证]
    end

    subgraph Layer2["第 2 层:运行时权限检查"]
        RoleAccess[基于角色的表访问]
        OpPerm[操作级权限]
        RateLimit[权限检查速率限制]
    end

    subgraph Layer3["第 3 层:SQL 注入防护"]
        ParamQueries[参数化查询]
        SQLParser[SQL 解析器验证]
        DDLBlock[DDL 操作阻止]
        MultiStmt[多语句预防]
    end

    subgraph Layer4["第 4 层:配置安全"]
        PathPrev[路径遍历预防]
        URLWhitelist[URL 白名单]
        EnvSanitize[环境变量清理]
    end

    subgraph Layer5["第 5 层:审计跟踪"]
        OpLog[完整操作日志]
        UserTrack[用户上下文跟踪]
        ErrorCapture[错误捕获]
    end

    Layer1 --> Layer2
    Layer2 --> Layer3
    Layer3 --> Layer4
    Layer4 --> Layer5
```

### 权限模型

```mermaid
graph TD
    subgraph PermConfig["权限配置 (YAML)"]
        Roles[角色]
    end

    subgraph Admin["admin"]
        AdminTables[表: *<br/>所有操作]
    end

    subgraph Manager["manager"]
        ManagerTables[表: users, orders]
        ManagerOps[操作: SELECT, INSERT, UPDATE]
    end

    subgraph User["user"]
        UserTables[表: users]
        UserOps[操作: SELECT]
    end

    Roles --> Admin
    Roles --> Manager
    Roles --> User

    Admin --> AdminTables
    Manager --> ManagerTables
    ManagerTables --> ManagerOps
    User --> UserTables
    UserTables --> UserOps

    subgraph Algorithm["权限检查算法"]
        Step1[1. 从会话获取角色]
        Step2[2. 查找角色策略<br/>(或使用缓存)]
        Step3{3. 是 "*"?}
        Step4[3a. 授予所有访问]
        Step5[3b. 检查操作列表]
        Step6[4. 对于特定表:<br/>检查操作列表]
        Step7[5. 返回允许/拒绝]
    end

    Step1 --> Step2
    Step2 --> Step3
    Step3 -->|是| Step4
    Step3 -->|否| Step5
    Step5 --> Step6
    Step4 --> Step7
    Step6 --> Step7
```

---

## 性能架构

### 零成本抽象

```rust
// 特性门控编译
#[cfg(feature = "metrics")]
pub fn track_metric(&self, name: &str, value: u64) {
    // 指标代码
}

#[cfg(not(feature = "metrics"))]
pub fn track_metric(&self, name: &str, value: u64) {
    // 无操作 - 编译时移除
}
```

### 无锁计数器

```rust
pub struct PoolStatus {
    pub total: AtomicU32,      // 无锁
    pub active: AtomicU32,     // 无锁
    pub wait_count: AtomicU32,  // 无锁
}
```

### 异步操作

- 所有 I/O 使用 `async/await`
- `AsyncMutex` 用于保护共享状态
- `Notify` 而不是条件变量(避免忙等待)

### 连接池

```
策略: 池 + LRU

优势:
├── 重用连接(避免 TCP 握手)
├── 限制最大连接(防止耗尽)
├── 维持最小值(避免冷启动)
└── 健康检查(移除死连接)
```

---

## 可扩展性架构

### 水平扩展(分片)

```mermaid
flowchart TD
    App[应用程序] --> ShardRouter[分片路由器]

    ShardRouter --> Yearly[年度策略]
    ShardRouter --> Monthly[月度策略]
    ShardRouter --> Hash[哈希策略]

    Yearly --> Shard2024[shard_2024]
    Monthly --> Shard2024_01[shard_2024_01]
    Hash --> ShardHash[shard_{hash key % N}]

    App --> QueryRouting[查询路由]
    QueryRouting --> GlobalIndex[全局索引<br/>可选]
    GlobalIndex --> Route[路由到正确分片]
```

### 垂直扩展(缓存)

```mermaid
flowchart TD
    Start[查询请求] --> CheckCache[检查缓存]

    CheckCache --> Hit{缓存命中?}
    Hit -->|是| ReturnCached[返回缓存值]
    Hit -->|否| DBQuery[数据库查询]

    DBQuery --> UpdateCache[更新缓存<br/>写透]
    UpdateCache --> ReturnDB[返回结果]

    ReturnCached --> End[结束]
    ReturnDB --> End
```

### 基于特性的扩展

```mermaid
graph TD
    subgraph Minimal["最小部署"]
        SQLite[SQLite]
        config_env[config-env]
        lru[lru]
        sql_parser[sql-parser]
    end

    subgraph Microservice["微服务部署"]
        PostgreSQL[PostgreSQL]
        permission[permission]
        pool_health_check[pool-health-check]
        config_yaml[yaml]
    end

    subgraph Enterprise["企业部署"]
        AllFeatures[所有可选特性]
        metrics[metrics]
        tracing[tracing]
        audit[audit]
        sharding[sharding]
    end

    AllFeatures --> metrics
    AllFeatures --> tracing
    AllFeatures --> audit
    AllFeatures --> sharding
```

---

## 结论

DBNexus 架构设计具有:

1. **模块化** - 清晰的关注点分离,特性门控
2. **安全性** - RAII、编译时保证、无不安全代码
3. **性能** - 异步优先、尽可能无锁、高效池化
4. **安全性** - 多层防御、RBAC、审计跟踪
5. **可扩展性** - 可插拔组件、基于 trait 的设计
6. **可观测性** - 指标、跟踪、内置审计日志

这种架构使 DBNexus 能够从嵌入式设备扩展到企业部署,同时保持简单性和人体工程学。

更多组件细节,请参见:
- [API 参考]API_REFERENCE.md
- [用户指南]USER_GUIDE.md
- [Rust 文档]https://docs.rs/dbnexus