cayley+mysql使用

ps:学习cayley使用的话,虽然相关blog不多,但cayley的github提供了较全的api说明,而且有社区提供进行提问和讨论帮助

cayley下载地址:https://github.com/cayleygraph/cayley/releases

一. 配置与启动

cayley + mysql主要有以下几步骤:

(1)解压后,对其进行配置,修改cayley_example.yml如下:

store:
  # backend to use
  backend: mysql
  # address or path for the database
  address: "root:password@tcp(localhost:3306)/cayley?loc=Local&charset=utf8mb4&collation=utf8mb4_general_ci"
  # open database in read-only mode
  read_only: false
  # backend-specific options
  options:
    nosync: false
query:
  timeout: 30s
load:
  ignore_duplicates: false
  ignore_missing: false
  batch: 10000
 

将backend修改为mysql,address的写法参考github中数据库的配置:https://github.com/cayleygraph/cayley/blob/master/docs/Configuration.md

url后面的参数参考github:go-sql-driver(https://github.com/go-sql-driver/mysql#dsn-data-source-name

(2)初始化数据库:

在mysql中新建一个数据库,数据库名为上面配置文件address中的红色内容,然后利用cayley命令初始化:

./cayley init -c cayley_example.yml

初始化后,cayley会自动帮你在mysql的名为cayley的数据库中建两张表nodes和quads。注意,一定要先初始化再load数据,除非我们自己按照要求设计两张表,不然是无法运行的

(3)加载数据:

准备好.nq数据,通常放在cayley的data文件夹下

./cayley load -c cayley_example.yml -i data/**nq --alsologtostderr=true

可以看到mysql中已经存有数据,nodes表负责存储所有的节点,hash作为唯一标识,quads利用subject,predicate和object三个字段将hash关联起来构成三元组

(4)开启http服务,来访问cayley

./cayley http -c cayley_example.yml --host=0.0.0.0:64210

若要希望不同机器间访问的话一定要加上--host=0.0.0.0:64210

(5)MongoDB

网上的教程通常是以MongoDB为backend,这里简单提一下:

配置文件中将backend改为mongo,address只需要host:port即可

然后首先安装MongoDB并启动,推荐先在MongoDB的data文件夹中建一个数据库,然后初始化,load数据(可以指定数据库位置,最后启动即可)

cayley load --config=cayley.cfg.overview --quads=data/*.nq --alsologtostderr=true --dbpath=../mongodb/data/cayley

二. 一点心得

1. 个人觉得cayley有几点优势吧:

(1)开源

虽然数据库排行榜上,图数据排在最前面的是Neo4j,而且很多商用公司也使用的它,但是它不开源,对于像笔者这种以学习为目的,cayley更好一些

(2)支持多种查询语言

cayley支持gizmo(gremlin),MQL和Graphql查询,不同于很多经典图数据库使用的sparql语句。以gizmo查询api来看,相比于sparql较灵活,支持节点作为始点或终点的双向查询,支持交集、并集和差集的双向查询等等

API可查看: https://github.com/cayleygraph/cayley/blob/master/docs/GizmoAPI.md

(3)支持多种后端数据库

比如MongoDB、elasticsearch、mysql等等,有利于按需求进行维护和扩展

(4)N-Quads

相比于传统的rdf三元组概念,cayley使用的N-quads四元组,是对N-triples的扩展,除了传统的三元组外,cayley在存储的时候加入了第四种label节点,这样更有利于表示子图,进行子图查询

 

2. 图数据库

这篇博客只是对使用mysql作为cayley后端的简单使用介绍,帮助快速上手少采坑。但是,在知识图谱的火热浪潮下,会使用图数据库的简单查询只是一角而已,首先,一般的简单入、出查询可以解决很多种情况,但查询语言的使用确有很多种方式;其次,对于知识图谱的应用包括从知识的抽取(实体、关系、属性抽取),到实体链接,做实体消歧和共指消解,再到知识的存储与设计,还有本体的构建,许多时候,使用图数据库往往关注的是数据层的构建而 忽略了模式层(schema)的构建,到应用时,对实体属性的查询,涉及到的子图匹配或是推理,以上涉及到很多理论和技术,尤其是在信息抽取那里很多单独作为一项比较有难度的研究。

知识图谱往往应用在自动问答和智能搜索领域,笔者认为,构建取决于应用。理想状态下,一定是要求知识的质量越高越好,但是目前的技术还不足以完全取代人工构建对质量的影响,那就要考虑所应用的领域知识量大小,对人工或是机器构建进行平衡取舍,对知识涉及范围的多少进行取舍,是采用自底向上还是自顶向下的方式构建等等

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值