PostgreSQL 作为图数据库存储引擎

CayLey是GO语言写的一个图数据库引擎,支持RESTful API,内置查询编辑器和可视化,支持MQL和JAVASCRIPT查询接口,后端存储支持文件格式,PostgreSQL,mongodb,LevelDB,Bolt。模块化设计,扩展后端存储非常容易。

本文将以PostgreSQL为例,演示一下CayLey的使用。

安装go:

yum install -y go

执行以下命令,克隆cayley和依赖:

mkdir -p ~/cayley && cd ~/cayley

export GOPATH=`pwd`

export PATH=$PATH:~/cayley/bin

mkdir -p bin pkg src/github.com/google

cd src/github.com/google

git clone https://github.com/google/cayley

cd cayley

go get github.com/tools/godep

godep restore

go build ./cmd/cayley

样本数据:

$ ll data

-rw-rw-r--. 1 postgres postgres 26M Jan 17 21:45 30kmoviedata.nq.gz

-rw-rw-r--. 1 postgres postgres 463 Jan 17 21:45 testdata.nq

$ gunzip 30kmoviedata.nq.gz

cayley使用帮助:

$ ./cayley --help

No command --help

Usage:

  cayley COMMAND [flags]

Commands:

  init      Create an empty database.

  load      Bulk-load a quad file into the database.

  http      Serve an HTTP endpoint on the given host and port.

  dump      Bulk-dump the database into a quad file.

  repl      Drop into a REPL of the given query language.

  version   Version information.

Flags:

  -alsologtostderr=false: log to standard error as well as files

  -assets="": Explicit path to the HTTP assets.

  -config="": Path to an explicit configuration file.

  -db="memstore": Database Backend.

  -dbpath="/tmp/testdb": Path to the database.

  -dump="dbdump.nq": Quad file to dump the database to (".gz" supported, "-" for stdout).

  -dump_type="quad": Quad file format ("json", "quad", "gml", "graphml").

  -format="cquad": Quad format to use for loading ("cquad" or "nquad").

  -host="127.0.0.1": Host to listen on (defaults to all).

  -ignoredup=false: Don't stop loading on duplicated key on add

  -ignoremissing=false: Don't stop loading on missing key on delete

  -init=false: Initialize the database before using it. Equivalent to running `cayley init` followed by the given command.

  -load_size=10000: Size of quadsets to load

  -log_backtrace_at=:0: when logging hits line file:N, emit a stack trace

  -log_dir="": If non-empty, write log files in this directory

  -logstashtype="": enable logstash logging and define the type

  -logstashurl="172.17.42.1:5042": logstash url and port

  -logtostderr=false: log to standard error instead of files

  -port="64210": Port to listen on.

  -prof="": Output profiling file.

  -quads="": Quad file to load before going to REPL.

  -query_lang="gremlin": Use this parser as the query language.

  -read_only=false: Disable writing via HTTP.

  -replication="single": Replication method.

  -stderrthreshold=0: logs at or above this threshold go to stderr

  -timeout=30s: Elapsed time until an individual query times out.

  -v=0: log level for V logs

  -vmodule=: comma-separated list of pattern=N settings for file-filtered logging

假设已有一个PostgreSQL数据库。

IP : 192.168.150.132

PORT : 1921

DBNAME : postgres

USER : digoal

PWD : digoal_pwd

初始化

./cayley init -db=sql -dbpath="postgres://digoal:digoal_pwd@192.168.150.132:1921/postgres?sslmode=disable"

导入数据

./cayley load -quads="data/" -db=sql -dbpath="postgres://digoal:digoal_pwd@192.168.150.132:1921/postgres?sslmode=disable"

50亿测试数据约2TB。

开启repl或http接口服务。

./cayley repl -db=sql -dbpath="postgres://digoal:digoal_pwd@192.168.150.132:1921/postgres?sslmode=disable" -host="0.0.0.0" -port="64210"

./cayley http -db=sql -dbpath="postgres://digoal:digoal_pwd@192.168.150.132:1921/postgres?sslmode=disable" -host="0.0.0.0" -port="64210"

使用http接口的图例:

 Query Shape:


后端是PostgreSQL时,Cayley自动将MQL或JAVASCRIPT自动转换成SQL到数据库查询,并返回结果。

对于PostgreSQL作为后端的场景,优化的手段:

1. 使用GPU加速HASH JOIN和数据扫描。

2. 使用分区表,减少无用块扫描。

3. 其他通用的PG优化手段

如果数据量大到单库的计算资源和IO资源性能支撑不住,可以用Greenplum来实现分布式查询。

查询接口:

Javascript/Gremlin API documentation

图对象

  根据节点ID,检索,返回路径

路径对象

  路径相交,节点匹配等

查询路径对象

  数值转换,等。

[参考]
1. https://github.com/google/cayley

时间: 2024-12-03 21:09:13

PostgreSQL 作为图数据库存储引擎的相关文章

MySQL专用开源数据库存储引擎出炉

来自国际领先的数据库厂商Solid Information Technology公司的消息宣称,该公司为MySQL量身定制的开源数据库存储引擎 ─ Solid DB Storage Engine for MySQL的Beta版,已于当地时间2006年7月25日正式对外发布.欢迎广大开源社区的用户及MySQL的忠实追随者在 http://dev.soliddb.com/download下载,抢先感受全新的.更高价值的体验. Solid公司此次面向全球开放的Solid DB Storage Engi

MySQL数据库存储引擎和分支现状

在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,基本处于停滞发展的情况,在可以预见的未来,MySQL是肯定会被Oracle搁置并且逐步雪藏消灭掉的.MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不同的引擎和分支,让MySQL有希望继续发扬光大起来. 本文大致讲解一下MySQL目前除了主要的 MyISAM.InnoDB.Heap(Memory).NDB 等引擎之外的其他引擎的发展和现状,以及MySQL主干以外的分支的状况,为了我们未来更好的使用MyS

MySQL数据库存储引擎和分支现状分析_Mysql

MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不同的引擎和分支,让MySQL有希望继续发扬光大起来.  在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,基本处于停滞发展的情况,在可以预见的未来,MySQL是肯定会被Oracle搁置并且逐步雪藏消灭掉的.MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不同的引擎和分支,让MySQL有希望继续发扬光大起来. 本文大致讲解一下MySQL目前除了主要的 MyISAM.InnoDB.Heap(Mem

MySQL数据库MyISAM存储引擎转为Innodb的方法_Mysql

mysql数据库存储引擎为MyISAM的时候,在大访问量的情况下数据表有可能会出现被锁的情况,这就会导致用户连接网站时超时而返回502,此时就需要MySQL数据库MyISAM存储引擎转为Innodb.步骤如下: 1.导出CentOS数据库的表结构 复制代码 代码如下: mysqldump -d -uxxx -p centos > centos_table.sql 其中-d参数表示不导出数据,只导出表结构 2.替换centos_table.sql里的MyISAM为INNODB 复制代码 代码如下:

MySQL 6和新存储引擎

在csdn上看到一则新闻: 在最近举行的MySQL用户大会上,MySQL的首席执行官Marten Mickos宣布,即将推出MySQL开源数据库的下一个大型版本,也就是MySQL 6.0,这个新版数据库中将加入它们自主研发的Falcon存储引擎.MySQL之所以开发Falcon存储引擎是对MySQL的竞争对手数据库厂商甲骨文进行回应. 原文地址: http://news.csdn.net/n/20070508/103685.html 原因是,MySQL依赖InnoDB为它提供最主要的存储引擎,而

MySql数据库插入式的多存储引擎机制

什么是MySql数据库? 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等.根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点. MySql数据库是开放源代码的关系型数据库.目前,它可以提供的功能有:支持sql语言.子查询.存储过程.触发器.视图.索引.事务.锁.

SQL Server数据库中存储引擎深入探讨

本文是存储引擎结构的高级指南,推荐了配置参数,SQL Server的最佳硬件以及通过文件和文件组存储大量数据的创新方法.本文也概述了SQL Server 7.0存储引擎的新的动态特性. 概述 巧妙的规划是实现关系型数据库管理系统(RDBMS)的基础.要满足对更多存储容量的要求,对更快地取得信息的要求,它是唯一方法.想从Microsoft SQL Server 7.0中获得最多,要求组织机构了解它的关键部件--存储引擎--内在和外在. 介绍 十年前,数据库应用程序的开发要用数月或数年并不罕见.那时

MySQL数据库的存储引擎简介

[导读]在这篇文章中,我们将集中介绍这些不同的引擎分别最适应哪种需求和如何启用不同的存储引擎. 存储引擎 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. 例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎.内存存储引擎能够在内存中存储所有的表格数据.又或者,你也许需要一个支持事务处理的数据库(以确保

把mmapv1存储引擎存储的mongodb3.0数据库数据复制到WiredTiger存储引擎的mongodb3.2中

mongodb3.0在mmapv1的存储引擎基础上添加了一个新的存储引擎WiredTiger.但是3.0的默认存储引擎依旧是mmapv1,因此我们项目之前也就用的默认方式. 但是mongodb更新实在太快,转眼间,从3.0直接跳到3.2,默认的存储引擎也改成了WiredTiger.据说这个引擎具有占用磁盘空间更小,占用内存空间更小,查询效率更高等一系列特点. 为了防患于未然,今天尝试了一下把3.0的数据复制到3.2中.由于以前都是用mongovue直接复制,但是新的存储引擎,mongovue连表