性能炸裂!图数据库TigerGraph开发者版本入门

性能炸裂!图数据库TigerGraph开发者版本入门

简介

图数据库是近年来随着大数据逐渐崛起的一种数据库类型。

低调深耕数年之后,TigerGraph发布了其图数据库的开发者版本。TigerGraph的数据库号称图数据库3.0,具备并行处理海量数据的能力,同时支持实时更新和查询,并拥有自主研发的GSQL查询语言,这对于图数据库爱好者来说无疑是一个巨大的好消息。

开发者版本可以到 tigergraph.com/download 下载, 填写注册信息后会立即收到一封包含下载链接的邮件,文档可以在 doc.tigergraph.com/ 查阅。

下面我们将一步步安装TigerGraph开发者版本,并尝试加载31G的社交网络数据集。从测试结果看,TigerGraph的数据处理能力十分惊人,在业内遥遥领先。

安装

目前TigerGraph支持包括Ubuntu和CentOS在内的多个主流的Linux平台。下载好TigerGraph的安装包之后,首先进行解压:

ubuntu@ip-172-31-6-254:~$ tar -xzvf tigergraph-developer-latest.tar.gz
tigergraph-2.1.2-developer/
tigergraph-2.1.2-developer/tsar.tar.gz
tigergraph-2.1.2-developer/LICENSE.txt
...


然后便可以管理员权限执行install.sh进行安装。


ubuntu@ip-172-31-6-254:~/tigergraph-2.1.2-developer$ sudo ./install.sh -n
   _______                 ______                 __
  /_  __(_)___ ____  _____/ ____/________ _____  / /_
   / / / / __ `/ _ \/ ___/ / __/ ___/ __ `/ __ \/ __ \
  / / / / /_/ /  __/ /  / /_/ / /  / /_/ / /_/ / / / /
 /_/ /_/\__, /\___/_/   \____/_/   \__,_/ .___/_/ /_/
       /____/                          /_/

Welcome to the TigerGraph platform installer!

[PROGRESS]: Checking operation system (OS) version ...
[NOTE    ]: OS obtained: UBUNTU 16.04
[NOTE    ]: OS check passed [OK]
...
---------------------------------------------------------------
Congratulations! Installation Finished!
---------------------------------------------------------------

Thank you for using TigerGraph platform!
[PROGRESS]: Cleaning up ...
DONE
[NOTE    ] The TigerGraph user: tigergraph
ubuntu@ip-172-31-6-254:~$


现在TigerGraph已经安装在/home/tigergraph/tigergraph/下。需要注意的几点是:


  1. 安装过程中创建了tigergraph用户,由于我们使用了-n选项使用默认设置,所以密码也是tigergraph
  2. 之后的数据库相关的操作都应该在tigergraph用户下,而不是原来具有sudo权限的用户

服务管理

TigerGraph使用gadmin命令进行管理,需要在tigergraph用户下执行

启动与停止

TigerGraph在安装后默认会启动。

可以在命令行内执行gadmin startgadmin stop启动和停止服务

系统状态

命令行下可以使用gadmin status查看各个组件的状态:


tigergraph@ip-172-31-6-254:~/$ gadmin status
Welcome to TigerGraph Developer Edition, for non-commercial use only.
=== zk ===
[SUMMARY][ZK] process is up
[SUMMARY][ZK] /home/tigergraph/tigergraph/zk is ready
=== kafka ===
[SUMMARY][KAFKA] process is up
[SUMMARY][KAFKA] queue is ready
=== gse ===
[SUMMARY][GSE] process is up
[SUMMARY][GSE] id service has NOT been initialized (online)
...
=== Visualization ===
[SUMMARY][VIS] process is up (VIS server PID: 37708)
[SUMMARY][VIS] gui server is up


实战应用

接下来我们通过创建一个最简单的图、加载数据并做一些简单查询来初步体验TigerGraph的使用和性能。


硬件与数据集

TigerGraph的硬件要求很低,只需要8G内存和20G硬盘,所以虚拟机里也可以运行。当然,如果要加载特别大的图的话需要更大的内存和硬盘。

简单测试可以采用Amazon商品购买关联数据集,解压缩后只有12.6M.

为了实测性能,我们在这里采用Friendster 社交网络数据集,它和Amazon商品购买关联数据集格式相同,但是共有6560万个顶点和接近20亿条边。这里采用的测试硬件为AWS EC2 c4.8xlarge, 硬盘为GP2, 系统为Ubuntu 16.04.

首先对下载下来的数据集进行解压缩:gunzip com-friendster.ungraph.txt.gz

解压缩之后可以看到数据文件大小,解压缩后大小约为31G。同时在加载之前留意一下硬盘占用,在数据完全加载之后可以进行对比。


tigergraph@ip-172-31-6-254:~/data$ ll com-friendster.ungraph.txt  --block-size=G
-rw-rw-r-- 1 tigergraph tigergraph 31G Nov 13  2012 com-friendster.ungraph.txt
tigergraph@ip-172-31-6-254:~/data$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             30G     0   30G   0% /dev
tmpfs           5.9G  8.5M  5.9G   1% /run
/dev/xvda1      194G   67G  127G  35% /
tmpfs            30G     0   30G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            30G     0   30G   0% /sys/fs/cgroup
tmpfs           5.9G     0  5.9G   0% /run/user/1000


要感性地体会一下这个数据集有多大的话,可以执行time wc -l com-friendster.ungraph.no.header.txt这个命令:

tigergraph@ip-172-31-6-254:~/data$ time wc -l com-friendster.ungraph.no.header.txt
1806067135 com-friendster.ungraph.no.header.txt

real    3m8.286s
user    0m31.372s
sys     0m18.412s
tigergraph@ip-172-31-6-254:~/data$ ls -al --block-size=G com-friendster.ungraph.no.header.txt
-rw-rw-r-- 2 tigergraph tigergraph 31G Jun 12 05:36 com-friendster.ungraph.no.header.txt


从结果可以看到,这个文件总共有18亿行,即便是在SSD上使用wc命令看行数也要了将近4分钟!


创建图模型

TigerGraph可以通过两种方式创建图模型,一种是命令行gsql,另一种是通过GUI工具GraphStudio.

我们采用GraphStudio来创建模型。在主机上访问http://localhost:14240即可打开GraphStudio,如果是远程主机的话可以直接把localhost替换成其外部IP. 打开之后即可进入其主界面:

GraphStudio Home

在左边栏切换到Design Schema,单击箭头所指的按钮即可添加点,设置属性,并和选择图标和颜色:

添加点

单击其右侧的按钮可以添加边,选择源点和目标点之后会弹出相应的对话框:

添加边

之后,只需要点击发布按钮即可创建图模型:


保存图模型

添加数据源

从左边栏切换到Map Data To Graph,单击如图所示的按钮即可打开对话框,上传文件:

添加数据源

由于这次实测的文件实在太大,而且本来就在服务器上,所以解压缩之后可以直接将其移动或使用ln命令创建硬连接到/home/tigergraph/tigergraph/loadingData/目录下,无需上传。

在选择正确的文件类型、分隔符之后,就可以把数据源添加到操作界面了。这时候,再单击箭头所指的按钮,分别单击源文件和刚刚创建的friend边,即可完成数据到模型的映射。

添加数据映射

加载数据


从左边栏切换到Load Data,单击启动按钮即可开始加载,点击日志按钮还可以查看加载时间。


加载数据
数据载入日志

部分加载日志:

filename = .gsql.loader.progress.2018.6.12-5.57.54, progress size = 309
...
906761 lines/second|------------------- |99 %
899769 lines/second|------------------- |99 %
907965 lines/second|--------------------|100%
352247 lines/seconddestroy worker

06:41:54.181621 gcleanup.cpp:38] System_GCleanUp|Finished

可以看到,31G的原始数据,从5点57分到6点41分,总共44分钟。实际上,我们创建的图是无向图,所以数据量应该翻倍,即原始数据等价于62G的有向图。仅仅是开发者版本就能够达到这个速度,这是非常惊人的。

而硬盘使用的情况

tigergraph@ip-172-31-6-254:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             30G     0   30G   0% /dev
tmpfs           5.9G  8.5M  5.9G   1% /run
/dev/xvda1      194G  110G   85G  57% /
tmpfs            30G     0   30G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            30G     0   30G   0% /sys/fs/cgroup
tmpfs           5.9G     0  5.9G   0% /run/user/1000

硬盘使用了110G,加载前是67G,相较于等价于62G的无向图,硬盘使用仅仅增加了43G!

再看内存:

tigergraph@ip-172-31-6-254:~/data$ free -m
              total        used        free      shared  buff/cache   available
Mem:          60382       24114       19564          16       16703       35686
Swap:             0           0           0

在加载数据之后,所有的内存使用也不过24G。


查询

数据加载完之后就可以使用Explore Graph进行一些简单的查询。由于TigerGraph是实时数据库,刚才的数据加载是在线的,所以其实不必等待数据加载完就可以使用查询功能。

下图简单展示了取点、一步邻居、6步连通子图的查询结果:

6步连通子图查询结果
随机取点、一步邻居查询结果


这些查询的速度非常快,几乎感觉不到延迟。

从左边栏切换到Write Queries使用查询语言GSQL可以实现更多自定义查询,它的查询语言GSQL风格跟常见的语言比较接近,非常的容易上手。同时其IDE非常强大,能够实时进行语法语义检查。

下面就是一个简单的对给定顶点的k步邻居集合的查询。

CREATE QUERY k_step_neighbor(VERTEX<person> p, int k) FOR GRAPH MyGraph { 
  initial_set = {p};
  result = initial_set;
  FOREACH i in RANGE[1, k] DO
    result = SELECT dest_vertex 
      FROM result:start_vertex-(friend)->person:dest_vertex
    ;
  END;
  PRINT result;
}

保存并安装之后,就可以进行查询了:

GSQL查询语言

再进一步可以增加查询条件,比如对点、边属性的筛选等等,在这里就不做展开了。
更多更复杂的查询和使用场景,比如反欺诈、供应链、社交网络、公司信息知识图谱等,可以到附录中的TestDrive查看


总结

TigerGraph开发者版本性能非常优异,GraphStudio使用体验平滑,查询语言也非常容易上手。

此次开发者版本的发布有可能引发图数据库一波新的浪潮。


附录

编辑于 2018-06-14

文章被以下专栏收录

    你好,这里是 图数据库杂谈,我们专注图数据库的技术、开发、应用和推广,也欢迎大家到公众号【图数据库杂谈】和网站【www.graphdbs.com】来交流