Files
CM95/docs/CM95_PBF生产化阶段_v1_4_6.md

117 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CM95 PBF 生产化阶段 v1.4.6
## 目标
v1.4.6 是 **纯生产查询性能修复**。不改变 NavSea delivery 语义、FID、mapping、Style、Sprite、量化、encoder reconcile、non-renderable omission 或 Japan z12 G=1:7,500 policy。
## 已确认根因
正确 Japan Dataset 1(1492 cells / 1,282,431 source features)在 z11 高密度生产时,v1.4.5 的 `_fetch_scale_features()` 使用:
```sql
FROM chart_feature f
JOIN chart_cell c ...
JOIN chart_area_geometry g ...
WHERE f.dataset_id=?
AND f.native_scale=?
AND f.geometry_type='AREA'
AND four numeric bbox predicates
ORDER BY c.source_relative_path, f.source_record_index
```
代表性 tile EXPLAIN:
- `chart_feature` 驱动;
- `key=idx_feature_class`;
- `rows≈611,396`;
- `Using temporary; Using filesort`。
同一 tile 改为 geometry spatial-first 后:
- `chart_area_geometry` 驱动;
- `type=range`;
- `key=spx_area_geom`;
- `rows≈38`;
- `chart_feature` 通过 PRIMARY KEY `eq_ref` 回表。
## v1.4.6 修改
### POINT / LINE / AREA
分别使用现有 MySQL 5.7 SPATIAL INDEX:
- `chart_point_geometry.spx_point_geom`
- `chart_line_geometry.spx_line_geom`
- `chart_area_geometry.spx_area_geom`
查询结构改为:
1. geometry table `FORCE INDEX(spx_*)`;
2. `STRAIGHT_JOIN chart_feature`,防止 MySQL 5.7 重新选择 `chart_feature` 为驱动表;
3. `MBRIntersects(g.geom, tile envelope)` 做 R-tree candidate lookup;
4. 保留 v1.4.5 四个 `f.bbox_*` 条件作为第二道候选一致性 gate;
5. 继续通过 `chart_feature` PRIMARY KEY 读取属性;
6. 不增加/修改 importer schema。
### Deterministic ordering
v1.4.5 的 SQL `ORDER BY c.source_relative_path, f.source_record_index` 会对包含 JSON/WKB 的结果触发大量 disk temporary/filesort。
v1.4.6 删除 SQL ORDER BY,改为 Python 排序,同时保留原有顺序语义:
- 外层仍固定 `POINT → LINE → AREA`;
- 每一种 geometry 内按 `(source_relative_path, source_record_index)` 排序;
- sounding 按 `(source_relative_path, source_record_index, point_index)` 排序。
### SOUNDING
`chart_sounding_point` 同样显式:
- `FORCE INDEX(spx_sounding_geom)`;
- `STRAIGHT_JOIN chart_feature`;
- 保持原 `MBRContains(tile envelope, s.geom)` 语义不变;
- 排序移到 Python。
## 不变项
- Dataset / importer / MySQL schema:不变;
- `cm95_to_navsea_v1.yaml`:不变;
- FID identity contract:不变;
- delivery source-layer contract:不变;
- encoder reconcile:不变;
- non-renderable label omission:不变;
- Japan gap disposition:不变;
- Japan z12 G=1:7,500 policy:不变;
- z0-z12 extent:不变。
## Builder contract
- project: `0.4.6`
- runtime: `0.4.6-production-spatial-candidate-query`
- builder: `cm95pbf-builder/0.4.6-spatial-candidate-query`
Builder contract 参与 production plan hash,因此必须创建新的 plan / release ID。不得用 v1.4.5 plan 直接继续 v1.4.6 build。
## 验收
正式 build 前执行:
```powershell
& ".\.venv\Scripts\python.exe" .\tools\cm95_v1_4_6_preflight.py
& ".\.venv\Scripts\python.exe" .\tools\cm95_v1_4_6_query_equivalence.py `
--dataset-id 1
```
query equivalence 必须满足:
- POINT old IDs == new IDs;
- LINE old IDs == new IDs;
- AREA old IDs == new IDs;
- SOUNDING old IDs == new IDs;
- new query geometry table 为第一驱动表;
- `type=range`;
- 使用对应 `spx_*` index。
最终 release 仍允许 `semantic_completeness=PENDING_REVIEW`,但 technical final status 必须 PASS。