软件测试
用户271
添加快捷方式
分享
商务智能项目文档
输入“/”快速插入内容
商务智能项目文档
本文地址:
商务智能项目文档
项目简介
本项目实现了一个
知识图谱数据
的展示系统,为相关的图数据实现了数据采集、数据转换、数据存储、数据分析和相关的可视化功能。
项目主要分为四个模块:ETL、Storage System、Query Server、
UI
项目主要功能有以下两点:
•
基本业务查询,展示数据的统计结果,如学术领域的关键作者,关键会议/期刊
•
基本功能查询,以图的方式展示查询到的结果,并且能够通过点击节点动态的扩展图形
项目使用的主要工具包括但不限于以下几种:
•
SpringBoot JPA
•
neo4j
•
py2neo
•
Redis
•
ECharts
项目仓库
•
前端
:
前端地址
•
后端:
后端地址
ETL
数据读取
采用
python
作为数据处理的脚本语言,对于数据读取采用按行读取的方法
对于节点的字段数据,需要逐个字段来判断其所属的字段类型,因为数据中有部分数据字段存在缺失问题,对于空字段一律不储存
存储策略
因为在图数据库中节点之间存在关系,因此如果使用一边创建节点一边创建关系的方法存储数据,可能需要递归的创建节点与关系,可能会导致内存溢出。因此对于图数据的存储,我们采用了节点与关系分开存储的方法,即先读取数据完成所有节点的存储,然后再次读取数据,存储节点之间的关系。
对于
neo4j
的
Python
驱动,我们采用了
py2neo
py2neo handbook
。对于数据存储工作,
py2neo
可以以面向对象的方式来完成节点以及关系的存储,减少了大量
Cypher
语句的编写,同时它也能方便的做简单的查询操作,因此对于关系的创建也非常便捷
多线程存储
因为在数据存储的过程中,都是对数据的读取操作,如果将每个节点的数据创建任务分配给不同的线程来进行创建,可以提高数据的存储速度。
使用
ThreadPoolExecutor
来创建一个线程池,线程池中线程数量为2,在读取数据的循环中不断提交创建节点的任务到线程池来实现多线程读取数据,可以实现多线程的创建图节点
(但是由于服务器性能原因,使用线程池的存储脚本在服务器中运行会导致服务器崩溃,因此在实际的存储过程中并没有采用多线程的方案)
Storage System
以下列出了图数据库中存储的节点和关系的类型,及它们所拥有的字段,以及每部分数据存储的时长统计
节点类型 30h
•
PAPER
2092356
◦
属性列表
◦
index (#index)
◦
title (#*)
◦
authors (#@) (冗余)
◦
affiliations 作者们的隶属单位,数量和作者数量一致(#o)(冗余)
◦
year (#t)
◦
venue 发布论文的期刊/会议集 (#c) (冗余)
◦
ref 引用 (#%)(冗余)
◦
abstract 摘要(#!)
•
AUTHOR
1712440
◦
index (#index)
◦
name (#n)
◦
affiliations (#a) 作者的隶属单位,可以多个(冗余)
◦
publishCount (#pc)发表论文数
◦
referenceCount (#cn)被引次数
◦
Hindex
(#hi)
◦
Pindex (#pi)
◦
UPindex (#upi)
◦
interests (#t)研究兴趣领域(冗余)