# METER_WORK_MONITOR Tarantool 内存加速方案 ## 背景 `METER_WORK_MONITOR` 为计量监控热点表。`POST /doUpdateWf` 与 `POST /doUpdateWfBySpotNo`(`updateLastTime`)写入频率高,直接打 Oracle 易形成锁竞争与连接压力。 ## 目标 1. 在 Tarantool(memtx)建立与 Oracle 同结构的内存表 `METER_WORK_MONITOR`。 2. 基于 `icore-rtdb` 自建多 `Client` 连接池,支撑高并发写入。 3. 上述两个接口只写 Tarantool,立即返回。 4. 定时 Job 将脏数据回写 Oracle。 ## 架构 ``` 秤点/前端 → MeterWorkMonitorController → MeterWorkMonitorServiceImpl → MeterWorkMonitorRtdbRepository → RtdbClientPool → Tarantool METER_WORK_MONITOR MeterWorkMonitorSyncScheduler → SyncService → 读 Tarantool dirty 行 → batchUpdateSelective → Oracle → 清 dirty ``` ## 文档索引 | 文档 | 说明 | |------|------| | [01-tarantool-schema.md](01-tarantool-schema.md) | Space 字段、类型、冷启动 | | [02-rtdb-connection-pool.md](02-rtdb-connection-pool.md) | 连接池设计与配置 | | [03-write-path.md](03-write-path.md) | 写入路径与失败策略 | | [04-oracle-sync-job.md](04-oracle-sync-job.md) | 回写 Job | | [ddl/meter_work_monitor.lua](ddl/meter_work_monitor.lua) | Tarantool 建表脚本 | ## 一致性与降级 - **一致性**:写路径最终一致;Oracle 落后于 Tarantool 最多一个 Job 周期(默认 1 分钟)。 - **降级**:`rtdb.monitor.fallback-oracle=true` 时,Tarantool 写失败回退原 Oracle `updateByPrimaryKeySelective`。 - **范围外**:`PUT /{id}`、`MeterWorkCarActualFirst*` 等其它 Oracle 直写路径不变;`TestClient2` / `DbConstants.client` 暂保留。 ## 配置开关(摘要) ```properties rtdb.host=172.22.42.3 rtdb.port=2101 rtdb.username=guest rtdb.password= rtdb.pool.size=8 rtdb.pool.borrow-timeout-ms=3000 rtdb.monitor.enabled=true rtdb.monitor.fallback-oracle=false rtdb.monitor.bootstrap-enabled=false meter.monitor.sync.enabled=false meter.monitor.sync.cron=0 */1 * * * ? ```