3.5 KiB
3.5 KiB
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() 使用:
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 KEYeq_ref回表。
v1.4.6 修改
POINT / LINE / AREA
分别使用现有 MySQL 5.7 SPATIAL INDEX:
chart_point_geometry.spx_point_geomchart_line_geometry.spx_line_geomchart_area_geometry.spx_area_geom
查询结构改为:
- geometry table
FORCE INDEX(spx_*); STRAIGHT_JOIN chart_feature,防止 MySQL 5.7 重新选择chart_feature为驱动表;MBRIntersects(g.geom, tile envelope)做 R-tree candidate lookup;- 保留 v1.4.5 四个
f.bbox_*条件作为第二道候选一致性 gate; - 继续通过
chart_featurePRIMARY KEY 读取属性; - 不增加/修改 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 前执行:
& ".\.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。