自己动手写NBA自动问答系统——数据存储

存储 容灾备份
本文需要进一步研究知识图谱的数据存储。由于知识图谱的图结构特点,使用传统的关系型数据库存储大量的关系表,在做查询的时候需要大量的表连接,速度非常慢,所以往往知识图谱采用的是图数据库。

 公司旧电脑到期,换了一台电脑的原因之前爬取的数据全部忘了备份,全部弄丢了。所以这个项目好久没开工了。

本文需要进一步研究知识图谱的数据存储。由于知识图谱的图结构特点,使用传统的关系型数据库存储大量的关系表,在做查询的时候需要大量的表连接,速度非常慢,所以往往知识图谱采用的是图数据库。

[[243363]]

一、图数据库和关系型数据库的差别

还是以NBA里的数据为例,为了表示球员和球队的效力关系,关系型数据库需要增加一张球员和球队关系表来存储这个关系。如下图:

而图数据库通过引入“效力于”关系边的概念来加以解决。不需要建表,关系边上可以存储属性,比如效力时间这一字段。

工作中我们团队的知识图谱是存储在阿里自研的图数据库上,鉴于数据安全问题,在这个项目里我采用了比较流行的neo4j图数据库。

二、Neo4J的使用

neo4j的使用,主要参考了官方文档https://neo4j.com/docs/developer-manual/current/drivers/client-applications/。Neo4J设计了一种叫做Cypher的查询语言,语法非常奇怪。官方提供的一个二跳的查询例子,查询John的朋友的朋友:

Query:

  1. MATCH(john{name:'John'})-[:friend]->()-[:friend]->(fof)RETURNjohn.name,fof.name 

Result:

  1. +----------------------+ 
  2. | john.name | fof.name | 
  3. +----------------------+ 
  4. "John"    | "Maria"  | 
  5. "John"    | "Steve"  | 
  6. +----------------------+ 
  7. rows 

我尝试创建了一个NBA的DB,用create语句创建了NBA火箭队、保罗和哈登三个实体。创建语句如下

创建了2个球员实体,包括了身高/体重/生日/合同情况,创建了一个球队实体,包括了球馆、城市等信息,创建了两条球员和球队的关系边,每条边上定义球员在该球队效力时间。可视化结果如下图:

OK,至此一个小的知识图谱就在图数据库里被创建完毕了,后续要做的是把大规模数据导入图数据库

 

责任编辑:武晓燕 来源: 十点睡的吴先生
相关推荐

2020-09-29 12:13:46

SQL引擎底层

2017-03-02 13:31:02

监控系统

2014-11-26 10:54:20

C#

2015-07-23 14:53:50

贝叶斯分类器

2023-12-15 10:14:42

数据库select语句

2018-02-07 10:46:20

数据存储

2015-06-02 10:24:43

iOS网络请求降低耦合

2015-06-02 09:51:40

iOS网络请求封装接口

2023-12-16 13:21:00

Python元类ORM

2022-04-05 13:46:21

日志数据库系统

2009-12-10 18:24:17

2011-08-16 15:14:32

打印机常见问题

2011-08-25 09:30:22

2010-05-10 16:13:44

方德移动手写签批系统

2010-06-08 14:23:44

方德移动手写签批系统

2015-06-02 09:41:00

iOS网络请求NSURLSessio

2015-09-01 09:49:28

2020-05-20 13:53:41

HTTP环境安装

2009-10-28 09:25:18

VB.NET List

2010-04-30 10:30:09

方德移动手写签批系统
点赞
收藏

51CTO技术栈公众号