挖掘三度关系的设计

背景介绍:公司是做B2B平台的,号称要做第一家线上完成所有business业务的的B2B平台。公司产品的主要产品有路由引擎:负责单个业务实例的运行,由于开发初期,公司无法确认具体的业务流程及业务需求,因此开发出一套专门处理业务的路由引擎,将单个原子化的业务(例如:发送采购订单、支付请求等)设计为单个路由实例,每个路由实例运行在路由引擎中辅助处理各个业务。路由引负责实例的维护、监控、管理。数据维护引擎:负责将业务处理后的数据进行维护,过期的业务数据归档操作,无用的业务数据进行删除。

需求:采购订单表中是平台中发生过交易的订单,订单中有卖方和买方的信息。为推进平台中的交易量和为用户提供优质的服务,产品部门提出为采购方推送意向的供应商。为此需要挖掘出三度关系中的意向供应商推送给采购商。

设计设想:利用数据维护引擎对采购订单表进行数据挖掘,挖掘出已发生的具有直接关系的一度关系,定期对一度关系进行维护,当通过计算关系的强度来维护,当一度关系强度低于门槛值时舍弃。路由引擎对一度关系进行分析处理,为每一个采购方挖掘出意向的三度关系,产生意向供应商,以意向供应商作为发起方、此采购方作为接收方生成产品目录。由推送的路由去分发目录。

挖掘一度关系非常简单,相同发起方和接收方并且产品类型相同时,生成一条一度关系,如果一度关系已存在,计算关系的强度,低于门槛值则舍弃,否则将更新强度。

在分析一度关系时遇到了问题!

挖掘三度关系的设计

如示例图中:要为买家C推送卖家B,为买家E推送卖家A。

一度关系表中有4条一度关系:A-C,A-D,B-D,B-E

一、先对一度关系进行分堆,便利一度关系列表,分别创建两个map作为容器,分别存买家的所有卖家(sellerMap:key是买家ID,value是包含此买家的所有卖家的一度关系)和卖家的所有买家(buyerMap:key是卖家ID,value是包含此卖家所有买家的一度关系)。sellerMap中既有{C:[A-C,],D:[A-D,B-D],E:[B-E]},buyerMap中既有{A:[A-C,A-D],B:[B-D,B-E]}

二、分堆完后,遍历一度关系列表,来逐条挖掘分析,获取此条一度关系的买方(A-C中的C),从sellerMap中获取包含此买方的所有卖方的一度关系(A-C),通过一度关系的卖方A到buyerMap中获取包含此卖家所有买家的一度关系(A-C,A-D),此时过滤掉A-C,从上一层获取的一度关系中判断是否包含,此时就得到二度关系C-D(他们有相同的卖家),通过D从sellerMap中获取包含此买家所有卖家的一度关系,得到(A-D,B-D)此时需要过滤掉A-D,从上一级所有买方一度关系列表中判断是否包含,过滤后剩下B-D,此时将D替换为正在分析一度关系中的买方C,生成一条B-C的产品目录。