将persist和后端分离,方便替换为其他数据库

This commit is contained in:
strepsiades
2026-03-24 10:15:16 +08:00
parent 7d92b3f1fe
commit 03a22b0c1c
19 changed files with 665 additions and 471 deletions
+41
View File
@@ -28,6 +28,8 @@ remote_datasource:
jsonl_dir: ${PROJECT_ROOT}/remote_datasource/datasource
persist:
db_path: ${PROJECT_ROOT}/test_results/sync_state_machine/demo.db
backend: sqlite
backend_options: {}
strategies:
project:
config:
@@ -109,6 +111,45 @@ logging:
- 每个业务类型的行为策略(依赖、自动绑定、创建方向、更新方向、跳过等)。
- `persist`
- 持久化开关与数据库位置。
- `persist.backend`
- 持久化后端注册表里的名称,例如 `sqlite`
- backend 实现会自行解释 `persist` 的其余字段。
- `persist.backend_options`
- 后端私有配置,后端自己决定如何解释。
### 6. 持久化后端注册
如果你希望在 backend 初始化阶段替换持久化后端,可以先在启动代码里按名称注册,再通过配置选择,不需要改调用方。
#### 6.1 内置 SQLite
```yaml
persist:
backend: sqlite
db_path: ${PROJECT_ROOT}/test_results/sync_state_machine/demo.db
backend_options: {}
```
#### 6.2 注册自定义后端
```python
from sync_state_machine.common.persistence import register_persistence_backend
register_persistence_backend("mysql", lambda config: MySQLPersistenceBackend(config))
```
然后在配置里选择这个名字:
```yaml
persist:
backend: mysql
db_path: ${PROJECT_ROOT}/test_results/sync_state_machine/demo.db
backend_options:
url: mysql+aiomysql://user:pass@127.0.0.1/depm_sync?charset=utf8mb4
pool_size: 5
```
后端实现会收到整份 `PersistConfig`,自行决定是读取 `db_path``backend_options`,还是额外扩展别的字段。
- `logging`
- 运行日志输出位置与级别。