| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| data/jvs-dw | ||
| prisma | ||
| src | ||
| tests | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| .swcrc | ||
| Dockerfile | ||
| jest.config.cjs | ||
| nest-cli.json | ||
| package.json | ||
| tsconfig.json |
loadTablesForCohort + loadAllTables 的 N 个 ClickHouse query 从串行
for-await 改 Promise.all 并行。
瓶颈分析:远程 DW 每 query 往返 170-580ms,5-6 个串行 = ~2.3s/批,
是 cohort batch 里 load 阶段的主要耗时。@clickhouse/client 基于 HTTP,
单 client 可并发多请求。
并发安全:
- cursorAdvances 在 Promise.all 前预初始化(避免并行 callback 各自 ?? {} 互相覆盖)
- 每个 tableName 写自己的 key,无竞争
- tables[tableName] 各写各的 key,无竞争
本地验证(2 批 × ~100 患者):
并行前(串行累加):191+193+329+393+579+584 = ~2269ms/批
并行后(取最慢): max ≈ 584ms/批 → ~4x load 加速
幂等正确:superseded=2 unchanged=285 evidence=1632(重读决策正确)
资源利用:之前 1 核串行等 IO,现在 6 query 并发打满网络/CH;
内存不变(本来就 hold 全部表)。
PR5b(可选,未做):cohort 级并行 worker pool(env PAC_COHORT_CONCURRENCY)
— 多 cohort 并发处理,3-4x 吞吐;但需 bump prisma pool + checkpoint 改 count-based,
风险略高,留作后续按需开。
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| data/jvs-dw | Loading commit data... | |
| prisma | Loading commit data... | |
| src | Loading commit data... | |
| tests | Loading commit data... | |
| .dockerignore | Loading commit data... | |
| .env.example | Loading commit data... | |
| .gitignore | Loading commit data... | |
| .swcrc | Loading commit data... | |
| Dockerfile | Loading commit data... | |
| jest.config.cjs | Loading commit data... | |
| nest-cli.json | Loading commit data... | |
| package.json | Loading commit data... | |
| tsconfig.json | Loading commit data... |