Files
ccdi/docs/plans/fullstack/2026-05-28-graph-production-db-change-list.md
2026-05-29 18:33:26 +08:00

4.1 KiB
Raw Blame History

图谱生产数据库手工变更清单

本清单只记录资金流图谱涉及的生产数据库表结构和数据准备事项。该部分由人工在生产库手动执行,不随应用发布自动执行,也不要求测试环境自动更新。

1. DDL 脚本

生产建表脚本:

sql/ccdi/graph/01_lx_fund_graph_mysql_ddl.sql

当前减法版创建五张资金流图谱必要表:

  • lx_fund_flow_subject_node
  • lx_fund_flow_account_node
  • lx_fund_flow_own_account_edge
  • lx_fund_flow_detail_edge
  • lx_fund_flow_manual_edge

不创建、不依赖 lx_fund_flow_sum_edge。资金图谱页面由后端基于 lx_fund_flow_detail_edge.trx_date 按当前查询条件实时聚合真实资金边,手工资金流向汇总边单独存入 lx_fund_flow_manual_edge

2. 生产执行边界

  • 生产库 DDL 由人工手动执行。
  • 应用发布包不自动执行 DDL。
  • 测试环境不会自动同步这些变更。
  • 代码库保留 SQL 文件,只作为生产执行、评审和本地验证依据。
  • 后端开发默认目标库中上述 lx_* 表已存在。

3. ODPS 基座同步

生产建表后,先从 ODPS 同步已验证的资金流图谱基座到 MySQL。

同步来源:

  • ODPS 中原图谱 SQL 产出的 lx_fund_flow_subject_node
  • ODPS 中原图谱 SQL 产出的 lx_fund_flow_account_node
  • ODPS 中原图谱 SQL 产出的 lx_fund_flow_own_account_edge
  • ODPS 中原图谱 SQL 产出的 lx_fund_flow_detail_edge

同步原则:

  • ODPS 基座是已验证数据,作为 MySQL 图谱基座保留。
  • 同步时建议使用显式字段列表,不依赖 select *
  • MySQL 侧新增字段允许为空。
  • lx_fund_flow_sum_edge 不作为纪检资金图谱页面必要表,可不从 ODPS 同步。
  • lx_fund_flow_manual_edge 不从 ODPS 同步,生产建表后初始为空,由纪检平台手工分析功能写入。

4. 后续增量

ODPS 基座同步后,后续新增流水在纪检 MySQL 内处理。

增量来源:

  • ccdi_bank_statement

增量原则:

  • 先标准化候选流水。
  • 再和既有 lx_fund_flow_detail_edge 做一致性判重。
  • 已存在一致流水,不同步进图谱。
  • 不存在一致流水,才增量插入主体点、账户点、持有边、明细边。
  • 不维护汇总表;页面查询时实时聚合。

5. 调度建议

一期建议采用每日定时任务,不建议一开始做实时。

推荐方式:

  • RuoYi/Quartz 定时任务。
  • 每日低峰期执行。
  • 保留手动触发能力,用于补跑、排查和修复。

6. 前后端依赖

前后端开发依赖上述 MySQL 图谱表的查询结果。

  • 前端不直接访问数据库。
  • 后端接口读取 lx_* 表。
  • 页面入口放在项目详情的“专项排查”页签。
  • 资金流图谱中真实资金边基于 lx_fund_flow_detail_edge 实时聚合。
  • 手工资金边来自 lx_fund_flow_manual_edge,属于主体级汇总边,只存 from_object_keyto_object_key,不存冗余 from_keyto_key;图谱展示时由后端临时拼出 idno_node/{object_key},不提供逐笔流水下钻。
  • 查询按全局 cret_no、姓名或节点 object_key,不按 project_id 过滤。

7. 性能和索引口径

一期资金图谱默认只查一个中心主体的一层资金边,并设置 minTotalAmount = 1000limit = 20,不会默认拉全量毛刺边。

生产索引重点:

  • lx_fund_flow_subject_nodePRIMARY KEY(object_key)idx_lx_fund_flow_subject_idnocfno(idnocfno)idx_lx_fund_flow_subject_name(name)
  • lx_fund_flow_own_account_edgeidx_lx_fund_flow_own_from_key(from_key)idx_lx_fund_flow_own_to_key(to_key)
  • lx_fund_flow_detail_edgeidx_lx_fund_flow_detail_from_date(from_key, trx_date)idx_lx_fund_flow_detail_to_date(to_key, trx_date)idx_lx_fund_flow_detail_from_to(from_key, to_key)
  • lx_fund_flow_manual_edgeidx_lx_fund_flow_manual_from(from_object_key)idx_lx_fund_flow_manual_to(to_object_key)idx_lx_fund_flow_manual_pair_direction(from_object_key, to_object_key, direction)

如果后续单个主体关联流水达到几十万级,再考虑增加主体级冗余字段或月度汇总表;一期不建 sum_edge