cayley基本使用

1. 概述

Cayley是Google开源的图数据库,受到Freebase和Google知识图谱(Google's Knowledge Graph)的启发,其目标是成为开发者在Linked Data和图数据(语义网络、社交网络等)的工具之一。

  • 编程语言 Go
  • 运行简单,只需 3 到 4 个命令
  • RESTful API
    • REPL(Read Eval Print Loop)
  • 内建查询编辑器和可视化界面
  • 支持多种查询语言
    • Gizmo - a JavaScript, with a Gremlin-inspired* graph object.
    • GraphQL-inspired* query language.
    • (simplified) MQL, for Freebase fans
  • 支持多种后端存储
    • KVs: Bolt, LevelDB
    • NoSQL: MongoDB
    • SQL: PostgreSQL, CockroachDB, MySQL
    • In-memory, ephemeral
  • 模块化设计,易于扩展对新语言和新后端的支持
  • 良好的测试覆盖率
  • 性能好

初步性能测试表明,在普通PC硬件和硬盘上,LevelDB跑1.34亿三元组毫无问题,多跳交叉查询(比如由X和Y两位影星同时出演的电影)只需150ms。

图数据库是一种NoSQL数据库,是基于节点、边和属性的图论,适合处理大量复杂、互连接、低结构化的数据。它更擅长描述数据之间的关系,因此被大量用于社交网络、推荐系统等专注于构建关系图谱的系统。

2. 基本概念

  • n-quad

quads/triples是cayley中的一行,描述了起点、关系和终点,可以想象成是两个节点用一条边连接了起来。

例如,cayley内置的测试数据data/testdata.nq内容如下:

<alice> <follows> <bob> .
<bob> <follows> <fred> .
<bob> <status> "cool_person" .
<charlie> <follows> <bob> .
<charlie> <follows> <dani> .
<dani> <follows> <bob> .
<dani> <follows> <greg> .
<dani> <status> "cool_person" .
<emily> <follows> <fred> .
<fred> <follows> <greg> .
<greg> <status> "cool_person" .
<predicates> <are> <follows> .
<predicates> <are> <status> .
<emily> <status> "smart_person" <smart_graph> .
<greg> <status> "smart_person" <smart_graph> .

每一行是一个Triple,每个Triple由四部分组成,依次对应数据用空格分隔的每项,分别叫Subject,Predicate,Object,Provenance,对应中文里的主语、谓语、宾语、来源。Subject转换成有向图中的顶点,Object是出度的顶点,Predicate是路径,Provenance是指可以在一个数据库里存多个图,用其来区分不同的图。

上述关系可以用下图来表示:

image

其中箭头指明了follows的关系,而#括起来的人名表示,这些人有status为cool_person or smart_person。

  • triple,基于内存的TripleStore数据结构
type Triple struct {
  Subject string
  Predicate string
  Object string 
  Provenance string
}
type TripleStore struct {
  idCounter int64  //idMap的长度     
  tripleIdCounter int64  //tripleId的序列
  idMap map[string]int64  //
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值