大规模知识图谱数据流设计

知识图谱的数据量,更新方式,使用场景的不同,决定其数据流如何设计。

在应用有着上亿级别的节点数,数据存在着离线批量更新以及用户实时手工修改两种方式,使用场景也有着图查询以及模糊的搜索查询。这样就决定着数据流设计如下图:
在这里插入图片描述
分别介绍其中的功能模块:
(1)图数据库

采用图数据库来存储知识图谱的数据,图数据库天然地满足节点–>关系–>节点这种存储格式。目前业界多使用neo4j,titan等,使用分布式图数据库。感觉目前业界图数据库还没有一个有压倒性优势的系统,配置运维起来也比较麻烦。

(2)离线计算平台

要求每天会对图谱数据进行一次离线批量更新,在离线计算平台hadoop上完成,具体数据流如下:

2.1,新数据:数据源会有新实体进来,例如新增的歌曲,变化的电影播放次数等;

2.2,全量数据:把图数据库的最新全量数据同步回来,这部分数据里会包含用户的修改,会在后文中讲到;

2.3,增量数据:对新数据和全量数据进行diff,计算出增量数据,为了简洁起见,这里的增量数据仅仅考虑新增的节点,以及某些指定的节点属性,新增的边。

(3)Elasticsearch

由于对于图谱的查询存在一些分词模糊查询,原生的图数据库无法很好地满足查询需求,所以接入了Elasticsearch来承载这部分需求,每天会将图数据库数据同步到search。

(4)用户操作界面

用户有直接编辑知识图谱数据的需求,因此提供了操作界面,可以支持用户的编辑,包括新增节点,删除节点,修改边,修改节点属性等。对于这种用户操作会将其记录到mysql,实现操作记录可追溯,可重放,可撤销。

(5)定时清理程序

在长期的数据操作过程中,由于程序异常,数据异常等原因,不可避免地会出现一些无效数据,而图数据库的数据清理逻辑比较复杂,单独开启了一个定期清理程序。它会清理无效节点和无效边,保证图数据库的数据干净。

链接:https://www.jianshu.com/p/9528ea343d26

发布了25 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/for_yayun/article/details/104192585