-
perf(sync): PR5a — 并行化 CH query(load 阶段 ~4x) · d3635199
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, 风险略高,留作后续按需开。luoqi committed
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| pac-service | Loading commit data... | |
| pac-web | Loading commit data... |