试一试图数据库cayley

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 这是谷歌的一个开源免费的图数据库。是用Go语言写的。支持多种存储后端。 之所以要试这个,是因为它能够水平可扩展,就是说它支持分片。backend配置成分布式的存储系统就可以了。

这是谷歌的一个开源免费的图数据库。是用Go语言写的。支持多种存储后端。
之所以要试这个,是因为它能够水平可扩展,就是说它支持分片。backend配置成分布式的存储系统就可以了。我选择mongodb。
由于网络的原因,我只能离线安装了。需要安装这三个东西:Golang, Mongo, Cayley。

1.下载go。go1.8.linux-amd64.tar.gz
2.下载mongo mongodb社区版
3.下载cayley cayley_v0.6.1_linux_amd64.tar.gz

安装go:

解压tar.gz文件后,打开doc目录下的install.html, 里面有安装教程:

tar -C /usr/local -xzf go1.8.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
source /etc/profile

然后下面有 Test your installation。
运行那个小程序之前要先设置GOPATH. 根据提示“How to Write Go Code ”,打开code.html。
里面提到可以运行下面这个指令查看默认的路径。

go env GOPATH 

默认路径是~/go。 这个路径我挺满意的就不改它了。 这个路径就是go的workspace所在的地方。 如果你要改这个路径就要按文档里说的将GOPATH加入到环境变量里。
如果你愿意可以按照文档里说的,弄一个hello world的程序跑一下。

安装mongodb:

解压完之后,在某个目录下新建一个配置文件。我的在/home/ubt1604/mongodb/mongodb.conf
主要就是配置logpath和dbpath这两个路径。其他都默认就OK,内容如下:

#日志文件位置
logpath=/home/ubt1604/mongodb/log/mongodb.log

# 以追加方式写入日志
logappend=true

# 是否以守护进程方式运行
fork=true

# 默认27017
#port = 27017

# 数据库文件位置
dbpath=/home/ubt1604/mongodb/data/db

# 启用定期记录CPU利用率和 I/O 等待
#cpu = true

# 是否以安全认证方式运行,默认是不认证的非安全方式
#noauth = true
#auth = true

# 详细记录输出
#verbose = true

# Inspect all client data for validity on receipt (useful for
# developing drivers)用于开发驱动程序时验证客户端请求
#objcheck = true

# Enable db quota management
# 启用数据库配额管理
#quota = true
# 设置oplog记录等级
# Set oplogging level where n is
#   0=off (default)
#   1=W
#   2=R
#   3=both
#   7=W+some reads
#diaglog=0

# Diagnostic/debugging option 动态调试项
#nocursors = true

# Ignore query hints 忽略查询提示
#nohints = true
# 禁用http界面,默认为localhost:28017
#nohttpinterface = true

# 关闭服务器端脚本,这将极大的限制功能
# Turns off server-side scripting.  This will result in greatly limited
# functionality
#noscripting = true
# 关闭扫描表,任何查询将会是扫描失败
# Turns off table scans.  Any query that would do a table scan fails.
#notablescan = true
# 关闭数据文件预分配
# Disable data file preallocation.
#noprealloc = true
# 为新数据库指定.ns文件的大小,单位:MB
# Specify .ns file size for new databases.
# nssize =

# Replication Options 复制选项
# in replicated mongo databases, specify the replica set name here
#replSet=setname
# maximum size in megabytes for replication operation log
#oplogSize=1024
# path to a key file storing authentication info for connections
# between replica set members
#指定存储身份验证信息的密钥文件的路径
#keyFile=/path/to/keyfile

启动mongodb:

./bin/mongod -f /home/ubt1604/mongodb/mongodb.conf

关闭mongodb

./bin/mongod --shutdown -f /home/ubt1604/mongodb/mongodb.conf

安装Cayley:

解压完之后打开docs目录下的Quickstart-As-Application.md,最好用markdown工具打开一下,看的清楚一些。多看几遍,你会发现那个init根本用不上。

复制一份cayley.cfg.example,改名为cayley.cfg.overview,内容如下:

{
"database": "mongo",
"db_path": "ubuntu:27017",
"read_only": false
}

db_path是设置backend的。我们用mongodb作为backend。注意ubuntu是mongodb所在的 主机名,不是IP。
把已有的数据加载到库里:


./cayley load --config=cayley.cfg.overview --quads=data/testdata.nq --alsologtostderr
./cayley load --config=cayley.cfg.overview --quads=data/30kmoviedata.nq.gz --alsologtostderr

如果你之前已经执行过一次了,可以在命令最后加上一个 -ignoredup。

启动cayley:

./cayley http --config=cayley.cfg.overview --host=0.0.0.0

–host=0.0.0.0是说外部机器都可以访问到cayley。
启动好了之后,在浏览器里访问 http://localhost:64210/
在输入框输入

graph.Vertex("<dani>").All(),然后点击Query,就看到如下结果:
这里写图片描述

再输入graph.Vertex("<dani>").Out("<follows>").All()

这里写图片描述

语言选择Gizmo,输入g.V("<dani>").Tag("source").Out("<follows>").Tag("target").All()
这里写图片描述

根据官方的说法,Gizmo - a JavaScript, with a Gremlin-inspired* graph object.
就是说如果使用Quickstart-As-Application.md里给的JavaScript代码,webUI上语言就要选择Gizmo。

如何插入节点?

这可有点难为我了。Cayley用了一个叫做N-quad的东西,The N-Quads format is an extension of the N-Triples, the main distinction is that N-Quads allows encoding multiple graphs.这玩意我也不清楚,在webui上选择Write,输入4个字符串也能插入两个节点,但是我检索关系的时候却怎么查不出来。看来是我对这四个参数理解不够透彻吧。cayley的文档实在太少了,连个详细的tutorial都没有。好在我找到了这篇文章。Google Cayley graph database tutorial - family tree

跟文档一样,搞一个.nq的文件,然后导进去。
在data下新建一个familytree.nq。内容如下:

"john" "name" "John Smith" .
"mary" "name" "Mary Smith" .
"brian" "name" "Brian Smith" .
"susan" "name" "Susan Smith" .
"david" "name" "David Smith" .
"jennifer" "name" "Jennifer Smith" .
"lisa" "name" "Lisa Smith" .
"michelle" "name" "Michelle Johnson" .
"kevin" "name" "Kevin Smith" .
"elizabeth" "name" "Elizabeth Smith" .
"john" "spouse" "mary" .
"john" "brother" "brian" .
"brian" "spouse" "susan" .
"john" "child" "david" .
"john" "child" "jennifer" .
"mary" "child" "david" .
"mary" "child" "jennifer" .
"david" "spouse" "lisa" .
"lisa" "brother" "michelle" .
"david" "child" "kevin" .
"david" "child" "elizabeth" .
"lisa" "child" "kevin" .
"lisa" "child" "elizabeth" .

然后
./cayley load --config=cayley.cfg.overview --quads=data/familytree.nq --alsologtostderr

再次启动cayley

./cayley http --config=cayley.cfg.overview --host=0.0.0.0

最后在webui里选择Visualize,语言选择Gizmo,输入如下查询语句就可以看到全家福了

graph.V("john").Save('name', 'source').As('source').Out(['child', 'brother', 'spouse'], 'relation').Save('name', 'target').As('target' ).ForEach(function(d) {
    g.Emit(d);

    g.V(d.id).Save('name', 'source').As('source').Out(['child', 'brother', 'spouse'], 'relation').Save('name', 'target').As('target').ForEach(function(d2) {
        g.Emit(d2);

        g.V(d2.id).Save('name', 'source').As('source').Out(['child', 'brother', 'spouse'], 'relation').Save('name', 'target').As('target').ForEach(function(d3) {
            g.Emit(d3);
        } );
    } );
} );

这里写图片描述

文章里有几个demo,我查出来的结果跟他的不一样。可能是版本不同吧。
cayley环境是我在虚拟机里做的。检索的时候有卡住的情况。不知道是cayley不稳定还是虚拟机本来就卡。总之就是有点问题。如果你们也遇到这种情况请让我知道。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
1月前
|
算法 数据可视化 安全
《统计学简易速速上手小册》第6章:多变量数据分析(2024 最新版)
《统计学简易速速上手小册》第6章:多变量数据分析(2024 最新版)
34 1
|
编解码 数据可视化 定位技术
神器-可视化分析之Basemap入门详(一)
今天咱们讲解一个画地图神器-BaseMap,看看这个神器讲给我们带来怎样的使用体验。
364 0
神器-可视化分析之Basemap入门详(一)
|
1月前
|
SQL 存储 分布式计算
Kylin使用心得:从入门到进阶的探索之旅
【5月更文挑战第2天】Apache Kylin是开源大数据分析平台,提供亚秒级OLAP查询。本文深入解析Kylin的工作原理,包括预计算模型Cube、构建过程和查询引擎。常见问题涉及Cube设计、查询性能和资源管理,解决方案涵盖合理设计、性能监控和测试验证。文中还分享了Cube创建的JSON示例,并探讨了Cube构建优化、查询优化、与其他组件集成、监控维护及生产环境问题解决。通过学习和实践,读者能有效提升数据洞察力和决策效率。
57 5
|
1月前
|
架构师 关系型数据库 分布式数据库
实战秘籍 | 《学姐和你一起学PolarDB-X》课程拓展资料(第二讲)
本期课程,由阿里云的开源架构师——黄心雨学姐为大家带来《使用云起实验室体验PolarDB分布式版》,在课后学姐还精心准备了拓展学习资料,供各位开发者们进一步探索和学习,早日成为数据大师!
|
1月前
|
架构师 开发者
实战秘籍 | 《学姐和你一起学PolarDB-X》课程拓展资料(第一讲)
本期课程,由阿里云的开源架构师——王江颖学姐为大家带来《PolarDB-X的架构介绍》,在课后学姐还精心准备了拓展学习资料,供各位开发者们进一步探索和学习,早日成为数据大师!
|
1月前
|
NoSQL 数据可视化 Docker
这是一份简单到没朋友的上手图数据库的图文教程
本文是一份极度友好,你即便只会一个开机操作、不懂任何数据库的人,也能通过学习本文查询到你想要的图关系。
68 0
|
10月前
|
人工智能 算法 Cloud Native
向量数据库小白必关注的“扫盲贴”来啦
自从ChatGPT问世以来,大语言模型受到广泛关注。但大模型更新频率低且不擅长垂直领域知识,向量数据库恰好可以与之互补,通过Retrieval Plugin为大模型和企业私有数据构建了一座桥梁,成为数据面向大模型的切入口。不过,你真的了解向量吗?什么又是向量数据库呢?向量检索的原理又是什么呢?向量爱好者们速速上车,跟着小编一起开启“向量探索之旅”吧!
3361 4
向量数据库小白必关注的“扫盲贴”来啦
|
SQL 数据库
学通4中数据库SQL教程练习和答案
编写一个SQL语句,输出下面的结果
|
SQL 索引
yyds,SQL基础教程,进阶必须(建议收藏!) 下
yyds,SQL基础教程,进阶必须(建议收藏!) 下
93 0
|
SQL 存储 Oracle
yyds,SQL基础教程,进阶必须(建议收藏!) 上
yyds,SQL基础教程,进阶必须(建议收藏!) 上
130 0
yyds,SQL基础教程,进阶必须(建议收藏!)   上

热门文章

最新文章