google Cayley图谱数据库初试

一.安装

mkdir cayley

cd cayley

mkdir src

export GOPATH=$(pwd)

go get github.com/google/cayley

go build src/github.com/google/cayley/cayley.go

其中缺什么包下什么包,没有hg工具安装hg

修改下源码cayley.go

    switch cmd {
    case "init":
        db.Init(cfg, *tripleFile)
    case "load":
        ts, _ = db.Open(cfg)
        db.Load(ts, cfg, *tripleFile)
        ts.Close()
    case "repl":
        ts, _ = db.Open(cfg)          
        db.Repl(ts, *queryLanguage, cfg)
        ts.Close()
    case "http":
        ts, _ := db.Open(cfg)
        http.Serve(ts, cfg)
        ts.Close()
    default:
        fmt.Println("No command", cmd)
        flag.Usage()
    }

运行

go build $GOPATH/src/github.com/google/cayley/cayley.go && ./cayley http --port=8080 --assets=$GOPATH/src/github.com/google/cayley --dbpath=src/testdata.nt

assets 参数代表启动http server以后存放html静态资源的目录,源码里是自带的

dbpath 是数据库的一些初始化数据,必须指定,不然启动了,也没法添加数据,默认是指定为/tmp/testdb文件

在浏览器输入http://127.0.0.1:8080/如果有页面输出说明成功了

二.基本概念

testdata.nt内容如下

alice follows bob .
bob follows alice .
charlie follows bob .
dani follows charlie .
dani follows alice .
alice is cool .
bob is "not cool" .
charlie is cool .
dani is "not cool" .

内容的每行都是以空格分隔的四元组,每一行叫做一个Triple,存储多个Triple组成了TripleStore,每个Triple由四部分组成,依次对应数据每行用空格分隔的每项,分别叫Subject,Predicate,Object,Provenance。对应中文里的,Subject是中文里的主语,Predicate是中文里的谓语,Object是宾语,Provenance是来源。也就是说,每行描述了,谁怎么样了XX,或者谁是XX样的。Subject转换成有向图中的顶点,Object是出度的顶点,Predicate是路径。

cayley搭了一套图数据库的框架,官方提供了三种存储memory,leveldb,mongodb 可以切换存储引擎,只需要实现接口,就可以扩展存储方式,和mysql与innodb的关系差不多。

三.使用API

1. g.V()

取一个图中的顶点,也就是Triple中的Subject,返回一个点的对象

2. path.Out([predicatePath], [tags])

Out是取一个顶点的出度。不过,这个出度是按照谓词区分的,当Out()不传递参数的时候,是取出某个顶点不按路径区分的所有出度;当Out传递了predicatePath参数的时候,是取出某个顶点,在某个路径上的所有出度。tags 是用来存储路径的名称。例如:

我们入库的数据中以alice顶点为例,

alice follows bob
alice is cool

可以看出alice这个顶点有两个路径,分别是follows和is

(1) 查询allice的所有出度

g.V("alice").All()

(2) 查询alice的关注:

g.V("alice").Out("follows").All()

(3) 查询allice是否很cool

g.V("alice").Out("is").All() 

(4) 查询alice的关注和是否很cool

g.V("alice").Out(["follows", "is"]).All()

"result": [
  {
   "id": "bob"
  },
  {
   "id": "cool"
  }
 ] 

(5) 虽然你可以直观的看到,alice的关注是bob,并且alice是个很酷的人,那是因为是通过字面意思,比如有些人follows为空,有些人is为空,那就没法判断返回的出度在哪个路径上,这个时候应该使用tag参数

g.V("alice").Out(["follows", "is"], "path").All()

3. path.In([predicatePath], [tags])

和Out正好相反,是求的入度。

(1) 求所有cool的人

g.V("cool").In("is").All()

(2) alice的粉丝

g.V("alice").In("follows").All()

4. path.Both([predicatePath], [tags])

In和Out的的结果并集,没有去重

5. path.Has(predicate, object)

反向查找,paredicate是路径,object是三元组中的宾语

(1) 查找alice的粉丝

g.V().Has("follows", "alice").All()

6.path.Follow(morphism)

通过管道加速

g.V().Has("name","Casablanca") .Out("/film/film/starring").Out("/film/performance/actor") .Out("name").All()

等价于

var filmToActor = g.Morphism().Out("/film/film/starring").Out("/film/performance/actor")

g.V().Has("name", "Casablanca").Follow(filmToActor).Out("name").All()

总体的查询模式就是,选顶点,选路径,ALL输出

google Cayley图谱数据库初试

时间: 2024-11-09 02:07:19

google Cayley图谱数据库初试的相关文章

Google Cayley图数据库使用方法

最近在用Golang做流程引擎,对于流程图的存储,我看到了Google的Cayley图数据库,感觉它可能会比较适合我的应用,于是便拿来用了用. 项目地址在这里:https://github.com/google/cayley 系统环境 : Windows 7 1. 安装 安装的过程项目文档里写的很明白,有两种安装方式: 直接下载二进制版本.解压到你喜欢的位置. 从源码安装,遵照项目文档一步一步来即可. 2. 使用 安装完成之后,你会看到一个[cayley.exe]的文件,它就是我们要用的程序了.

Google 分布式关系型数据库 F1

F1是Google开发的分布式关系型数据库,主要服务于Google的广告系统.Google的广告系统以前使用MySQL,广告系统的用户经常需要使用复杂的query和join操作,这就需要设计shard规则时格外注意,尽量将相关数据shard到同一台MySQL上.扩容时对数据reshard时也需要尽量保证这一点,广告系统扩容比较艰难.在可用性方面老的广告系统做的也不够,尤其是整个数据中心挂掉的情况,部分服务将不可用或者丢数据.对于广告系统来说,短暂的宕机服务不可用将带来重大的损失.为了解决扩容/高

ASP.NET MVC EF 数据库初试水

首先,创建MVC项目,引用EntityFramework,创建了一个Student类 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace EFF.Models { public class Student { public int StudentID { get; set; } public string Name { get; set; } public i

NopCommerce架构分析之三---数据库初试化及数据操作

系统启动时执行任务:IStartupTask,启动时执行的任务主要是数据库的初始化和加载. IStartupTask调用IEfDataProvider进行数据库的初始化. IEfDataProvider,SqlCeDataProvider:获取数据连接工厂,不同类型数据库,连接工厂不同. 接口IStartupTask的实体类EfStartUpTask的实现如下: [csharp] view plain copy public class EfStartUpTask : IStartupTask

2017年数据库技术盘点

欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~. 作者 | 那海蓝蓝,腾讯金融云数据库技术专家 作者 | 小编0.7,腾讯TDSQL分布式数据库专家 作者 | 大米,腾讯TDSQL分布式数据库专家 责编 | 仲培艺 由腾讯技术工程官方号发布在云+社区 在数据库领域,回顾2017这一年,精彩纷呈,热点不断,而且不乏标志性的事件发生. 如Oracle提出的自治数据库这样的概念,把数据库技术带入一个新世界.其实AI技术应用于数据库由来已久,如AI技术调优数据库的性能.AI技术优化SQL.AI技

知识图谱文献综述(第一章)

既然决定了以知识图谱作为研究方向,文献综述是必不可少的. 本文主要总结<知识图谱发展报告(2018)-中国中文信息学会> 1. 知识图谱的研究目标与意义 (略) 2. 知识工程的发展历程 3. 知识图谱技术 人们通过概念掌握对客观世界的理解,概念是对客观世界事物的抽象,是将 人们对世界认知联系在一起的纽带.知识图谱以结构化的形式描述客观世界中概 念.实体及其关系.实体是客观世界中的事物,概念是对具有相同属性的事物的 概括和抽象.本体是知识图谱的知识表示基础,可以形式化表示为,O={C,H, P

干货好文!自底向上——知识图谱构建技术初探

知识图谱的构建技术主要有自顶向下和自底向上两种.其中自顶向下构建是指借助百科类网站等结构化数据源,从高质量数据中提取本体和模式信息,加入到知识库里.而自底向上构建,则是借助一定的技术手段,从公开采集的数据中提取出资源模式,选择其中置信度较高的信息,加入到知识库中. 在本文中,笔者主要想分享一下自底向上构建知识图谱的全过程,抛砖引玉,欢迎大家交流. “The world is not made of strings , but is made of things.” ——辛格博士,from Goo

自下而上构建知识图谱全过程

导读:关于知识图谱构建的过程,<详解自下而上构建知识图谱全过程>基本都覆盖到了,安利一下,作为入门读物是极好的,本篇并非原创,内容基本来自于此(原作者如果疑问,请联系删除).当然知识图谱的概念定义,现在个人感觉并没有完全统一的标准,文中有些分类和观点我也不是完全认同,后续会有博客系统阐述我对于知识图谱相关概念理解和定义 "The world is not made of strings , but is made of things."--辛格博士,from Google.

Google App Engine 学习和实践

这个周末玩了玩Google App Engine,随手写点东西,算是学习笔记吧.不当之处,请多多指正. 作者:liigo,2009/04/26夜,大连 原创链接:http://blog.csdn.net/liigo/archive/2009/04/26/4127055.aspx 转载请注明出处:http://blog.csdn.net/liigo 一,怎么想起来玩Google App Engine了呢? 近期想写一个小程序,以便在公司的电脑和家里的电脑之间随时共享数据.但是没有现成的server