做风控的朋友讲过一件事:有个团伙用几十个账号轮流下单,每个账号单独看都正常。想把这批人挖出来,靠订单表一层层 join 要写很深的查询,后来把手机号、收货地址、设备号、银行卡全画成一张网,几个账号共用一台设备、一张收款卡,一眼就看出是一条线串起来的。这张网,就是常说的关联网络。
节点和边是它的全部家当
关联网络的表示方法不复杂:实体当节点,关系当边。人、手机号、银行卡、设备都是节点;转账、同设备登录、共用地址就是边。边上还能挂属性,比如这两个人之间转过 12 次账、合计 3 万多元。
数据结构里这叫图,分有向和无向。转账是有向的,谁转给谁要分清;同住一个地址是无向的,两边对等。
哪些地方真的在用
- 金融风控:找团伙欺诈,看二度关系内有没有撞上黑名单的节点
- 推荐系统:用户、商品、类目连成网,顺着边找你可能感兴趣的东西
- 知识图谱问答:把人物、机构、事件连起来,回答谁和谁是什么关系
- 社交传播:好友推荐、谣言扩散路径追踪,本质都是在图上找路径
落地一般用什么工具
专门的图数据库有 Neo4j、NebulaGraph 这类,查询语言就是为找关系设计的。Neo4j 的 Cypher 写起来像画图,比如查所有发生过转账关系的人:
MATCH (a:Person)-[:转账]->(b) RETURN a, b LIMIT 20关系型数据库不是做不了,多层关系要 join 很多次,表一大就慢;图数据库把跳数查询做成原生能力,几度关系一把查完。
什么时候不必上这套
数据就是简单的订单、用户两张表,关联只有一两层,MySQL 加索引足够,别为了赶时髦上图库。图数据库的建模和运维成本不低,属性频繁变更时有些图库写入还吃力。
判断标准很简单:核心问题是不是「找关系」。问题围绕人与人的链路、物与物的连接,就按关联网络的思路建模;问题围绕单条记录的增删改查,老老实实用表。