首页>博客>行业科普>实体解析怎么做:图数据库在主数据去重中的分块、打分与合并
实体解析怎么做:图数据库在主数据去重中的分块、打分与合并

一个客户打电话投诉,说上周的订单还没到。客服在 CRM 里查到订单,状态显示已发货;财务在核心业务系统里查到这个人还欠着款;物流系统里输入手机号,查无此人。这类问题的答案不在任何一个系统里,而在一张能把三条记录连起来的图数据库里。
三条记录,三个系统,每一个都在正确地做自己的事。姓名差一个字(一个写简体,一个用了异体字),手机号一个带国际区号一个不带,地址一个写「某某路 18 号 3 栋」另一个写「18 号某某路 3 幢」。这些差异没有一条是录入错误,它们只是不同系统在不同时间按不同规范落下的痕迹。
把这三条记录认成同一个人,在数据治理里叫实体解析。听起来是字符串比对问题,实际是图上的簇划分问题——而这正是图数据库能发挥作用的场景,也是这篇文章要拆开讲的三步:分块、打分、合并。
一、同一实体在多源系统里长着不同的脸
先看源头。一个真实企业的客户、供应商、员工数据,通常散在这些地方。
| 源系统 | 主键形态 | 可用的强标识 | 常见缺失 | 主要风险 |
|---|---|---|---|---|
| CRM | 内部编号 | 身份证号或统一社会信用代码 | 录入时未强制校验 | 编号与业务系统不对应 |
| 核心业务系统 | 客户号 | 证件号 | 历史数据大量为空 | 一人多号、一号多人 |
| 电商与小程序 | 手机号 | 手机号 | 无证件信息 | 家庭共享号、换号频繁 |
| 呼叫中心 | 来电号码 | 手机号 | 只有号码无姓名 | 同号多人使用 |
| 发票与税务 | 税号 | 统一社会信用代码 | 只覆盖对公客户 | 集团多主体共用抬头 |
| 物流与仓储 | 收件信息 | 手机号加地址 | 收件人常非本人 | 代收、转运地址 |
| 第三方数据 | 外部 ID | 视数据源而定 | 标识体系不互通 | 匹配率不可预期 |
把这张表横着看,会得到一个不太乐观的结论:能唯一确定一个实体的强标识,实际覆盖率往往不到一半。个人客户缺证件号,企业客户有税号但集团下多个主体共用抬头,历史数据里空值成片。剩下那一半,只能靠组合证据去推断。
这就是实体解析的起点:不是找一个能判定的字段,而是接受没有那个字段,然后设计一套能在证据不足时仍然给出可信结论的机制。
二、第一步不是比对,是分块
一百万条客户记录两两比对,是一万亿次比较次数量级的一半——准确的说是约五千亿对。按每秒一万次比对算,跑完要五十七天多,而且这只是一次全量,还没算重跑。
所以实体解析的第一个工程问题不是「怎么比」,是「比哪些」。这一步叫分块:用一个或几个键把记录分进桶里,只比同桶的记录。
| 分块键 | 命中率 | 稳定性 | 副作用 |
|---|---|---|---|
| 证件号/统一社会信用代码 | 高,对公近乎全覆盖 | 高 | 缺失即整块丢失,对私客户覆盖不足 |
| 手机号后 8 位 | 中高 | 中,换号即失效 | 家庭共享号会把不同人拉进同块 |
| 名称标准化后前 4 字 | 中 | 中 | 简称、更名、集团后缀会错位 |
| 地址标准化后省市区加街道 | 中 | 低,搬迁即失效 | 同一楼宇不同栋会被拆开 |
| 名称拼音首字母 | 低 | 中 | 中文多音字、生僻字会漏 |
分块的设计原则和索引正好相反:目的是不漏,不是不重。宁可把无关记录多带进桶里(顶多浪费算力),也不能让一对真实重复被分到不同桶——后者是不可见的错误,跑完也发现不了。
所以实践中都用多键分块取并集:证件号一桶、手机号一桶、名称加区划一桶,一条记录进多个桶,任何一桶撞上就算候选。
分块效果要测两个数,第二个常被跳过:
- 缩减比:候选对数量相对全量平方的比值,看算力省了多少;
- 漏块率:用人工标注过的重复对,反查有多少对没有被分到同一个桶。这个数才是分块质量的真实刻度。
只测缩减比,会把「分得太狠导致大量真实重复永远发现不了」这种问题藏起来——而它恰恰是分块最常见的失败方式。
三、第二步:字段打分,单字段碰撞从来不够
候选对生成之后,要判断这一对到底是不是同一实体。两种做法,往往要配合使用。
确定性匹配靠强标识精确相等,一锤定音,问题在于覆盖不到没有强标识的那一半。概率匹配则给每个字段算一个权重再累加:某字段在同一实体内部相符的概率高、在不同实体之间偶然相符的概率低,这个字段的区分能力就强;两者取对数就是权重,加总过阈值判定为同一。
字段该给什么角色,取决于三个维度:唯一性、稳定性、以及判错时的代价。
| 字段 | 唯一性 | 稳定性 | 误合并代价 | 建议角色 |
|---|---|---|---|---|
| 身份证号/统一社会信用代码 | 极高 | 高 | 极高 | 强标识,命中即可判同,但仍要排除录入错误 |
| 姓名 | 低 | 中 | 中 | 只做门槛条件,不作判据 |
| 手机号 | 中 | 中,换号频繁 | 高 | 辅助判断,需与姓名同时命中 |
| 地址 | 低 | 低,搬迁频繁 | 低 | 加权项,不宜单独使用 |
| 开户行与账号 | 中 | 中 | 中 | 加权项,对公客户价值高 |
| 邮箱或统一社会信用代码前缀 | 中 | 中 | 中 | 加权项 |
这里有一条必须写进规范的判断:单字段相等只能降低嫌疑,不能认定同一。姓名相同在百万级库里必然有几百人;手机号相同可能是家庭共享号或企业统一预留号;地址相同可能是同一栋写字楼里的几十家公司。任何把单字段相等当作结论的做法,都会在生产环境里制造一批「超级节点」——那些把几十个真实个体合成一个的假实体。
四、第三步:合并成簇,连通分量的陷阱
判定出「这两条是同一实体」之后,最自然的做法是在记录之间连一条 SAME_AS 边,一个实体的全部记录就是图上的一个连通分量。查询一个客户的全貌,一次遍历即可,干净利落。
但这一步藏着一个会放大错误的机制:传递性。
A 与 B 因姓名加地址判定为同一,B 与 C 因手机号判定为同一,于是 A、B、C 合并成一个实体。如果 B 与 C 那一步是误判(家庭共享号),错的不只是 C,整团都被污染。更麻烦的是簇一旦变大,簇内任意两条弱相似记录都会被当成新证据,误合并像传染一样扩散——最后得到一个连接了上百条记录的巨型簇,谁也不敢用。
处理办法不是放弃连通分量,而是给边分级,只允许特定级别的边参与传递。
| 证据类型 | 典型情形 | 是否允许传递 | 处理方式 |
|---|---|---|---|
| 强证据 | 证件号精确相等且姓名一致 | 允许,形成骨架簇 | 直接并入,全程留痕 |
| 中证据 | 姓名加手机号加开户行组合命中 | 只能挂接骨架簇,不允许中证据之间串联 | 挂到最近的骨架簇,抽检 |
| 弱证据 | 名称相似度高、地址相同 | 不允许传递 | 存为候选边,不进簇 |
| 否定证据 | 证件号不同且姓名不同 | — | 阻断边,防止错误合并 |
三条工程手段,缺一条都会在实践中返工。
其一,先建骨架再挂接。只用强证据跑一遍,得到一批体量小但极可靠的骨架簇;中证据只允许把记录挂到骨架上,禁止中证据之间互相串联。这一步把「传染」路径从结构上切断了。
其二,合并必须可撤销。每次合并记录依据(哪几条边、什么证据、谁批的),保留合并前快照。误合并迟早会发生,能不能拆开、拆开之后依赖它的下游关系能不能重算,才是这套系统能不能长期维护的分水岭。悦数图数据库的审计日志与 RBAC、ABAC 双层权限控制在这里有直接用处:谁在什么时候把两条记录合并了,事后查得到。
其三,人工抽检要按簇大小分层。大簇必然可疑,优先抽大簇;同时抽一部分小簇防止漏判。人工的判定结果回流成权重调整的依据,这套闭环比一开始就把权重调准更重要。
五、用业务关系反证解析结果
这是图数据库做法与其他工具最不一样的地方:实体解析的产物是图,业务关系也是图,两者放在同一个库里之后,可以互相校验。
| 反证检查 | 图上怎么查 | 说明什么问题 |
|---|---|---|
| 时空矛盾 | 同一实体的两条记录在同一时间出现在相距很远的两个网点 | 几乎一定是误合并 |
| 环路矛盾 | 合并后出现「A 是 A 的母公司」这类自环 | 主体被错误合并 |
| 度数异常 | 节点度数突然达到同类节点的几十倍 | 多个真实个体被合成一个超级节点 |
| 关系稀疏 | 簇内记录之间没有任何共同交易对手或联系人 | 合并依据可能只有弱证据 |
这类检查本质上就是一次连通子图计算或路径查询,写进日常巡检即可,成本很低。
反过来的价值更值得强调:解析质量决定了关系分析的准确上限。风控做担保圈识别、股权穿透、团伙发现时,最大的误差源往往不是算法不够强,而是同一家公司被拆成五个节点、同一个实控人被当成三个人。图上的关系再准,节点认错了,结论就是错的。
悦数图数据库在这类场景里承担的是底座角色:动态 Schema 支持在不中断服务的情况下新增实体类型与证据边,图谱可以随治理进度持续演进;多源导入覆盖 CSV、MySQL、Hive、Kafka 等格式,能直接对接现有数据管道;内置连通子图、社区发现、最短路径等算法可直接用于簇划分与巡检;千亿点万亿边的规模下多跳查询保持毫秒至百毫秒级响应,全量重跑不必拆成离线任务(具体容量与延迟边界可参照千亿点万亿边的实测口径)。若还要横向比较不同产品在同一场景下的表现,选型的七项可测指标给了可以照着执行的验收方法。
六、落地清单与两个误区
实体解析不适合一次做到位,按下面的顺序推进更稳。
| # | 事项 | 要点 |
|---|---|---|
| 1 | 先盘点强标识覆盖率 | 覆盖率不到一半是常态,直接决定后续投入 |
| 2 | 确定分块键组合 | 多键取并集,同时测缩减比与漏块率 |
| 3 | 建立字段角色表 | 区分强标识、辅助判断、加权项、门槛条件 |
| 4 | 只用强证据跑骨架 | 先得到小而准的簇,再谈覆盖 |
| 5 | 中证据限定挂接 | 禁止中证据之间串联,切断传染路径 |
| 6 | 设计合并留痕与撤销 | 依据、时间、操作人、合并前快照 |
| 7 | 上四条反证巡检 | 时空、环路、度数、关系稀疏 |
| 8 | 按簇大小分层抽检 | 人工判定回流为权重调整依据 |
两个误区值得单独提醒。
其一,追求全自动。实体解析的准确率通常能做到八成五到九成,剩下的部分之所以难,是因为它们本来就模糊——只有当事人的补充信息才能判定。把最后那一成硬塞给算法,代价是误合并大簇,它造成的损失远大于不合并。正确做法是设计一条高效的人工通道,把人的判断沉淀回规则。
其二,用当下的属性比对历史记录。人会换手机号,公司会改名,地址会搬迁。如果拿今天的号码去比对三年前的记录,得到的簇在时间上是错的:它把不同时期的不同状态强行并成了一个人。做法是给每条记录带有效时间窗,比对时限定在重叠窗口内,或者干脆按时间切片分别解析再合并。
回到开头那位投诉的客户。三个系统都没做错,错的是中间少了一层把「这三条记录属于同一个人」显式表达出来的东西。这一层不是又一张关联表,而是一张带证据等级、可撤销、能被业务关系反证的图——这也正是图数据库在主数据治理里不可替代的位置。
相关阅读
- 主数据治理中图数据库的用法
- 图数据库选型该看哪些指标?从查询延迟到多跳深度的评估清单
- 知识图谱必须用图数据库存吗?四种存储路线在查询深度上的差别
- 什么是探索链 Chain of Exploration?图数据库如何先锁定知识范围再定位答案
常见问题(FAQ)
Q1:悦数图数据库是一款什么样的产品?
A:悦数图数据库是杭州悦数科技自主研发的企业级原生分布式 GQL 图数据库,100% 国产自研、自主可控,原生支持 ISO-GQL 国际标准,融合图、向量与全文索引能力,可支撑千亿点万亿边规模。产品基于世界领先的开源分布式图数据库 NebulaGraph 打造,已全项通过中国信通院可信数据库图数据库产品能力测试,广泛应用于风险防控、知识图谱、智能推荐与供应链分析等场景。
Q2:实体解析为什么不能直接用相似度算法跑一遍就完事?
A:三个原因。第一,全量两两比对是平方级规模,必须先用分块把候选对压到可算量级;第二,判定为同一的记录合并成簇时存在传递性,一次误判会污染整个簇,必须给证据分级、只允许强证据传递;第三,合并必须可撤销并留痕,否则误合并无法回滚。此外还需要用业务关系做反证,才能发现合并结果里的时空矛盾与超级节点。
Q3:悦数图数据库在数据治理类场景中有哪些技术积累?
A:悦数图数据库支持动态 Schema,可在不中断服务的情况下新增实体类型与关系类型,适合随治理进度持续演进的图谱;提供 RBAC 与 ABAC 双层权限控制及不可篡改的审计日志,合并与变更动作可追溯;内置连通子图、社区发现、最短路径等图算法,可直接用于簇划分与一致性巡检。底座采用 Shared-Nothing 与存算分离架构,支撑千亿点万亿边规模,据 IDC 2024 年报告,悦数在中国图数据库市场份额位居第二,并连续两年获评中国信通院「领航者」案例。

