TigerGraph图数据库性能

以TigerGraph图数据库44亿边缘的反欺诈演示的测试结果,解读TigerGraph图数据库性能。

与关系数据库或NoSQL数据库相比,图形数据库提供了更有效的关系和网络建模方法。

最初(1999年)Neo4j是这个领域的唯一,最近在出现了很多同类产品。

TigerGraph

TigerGraph是一个“实时原生并行图数据库”。可在云端或内部部署,支持横向扩展和纵向扩展,能在集群中自动划分图形,兼容ACID,内置数据压缩。

它使用消息传递架构,这种结构本质上是并行的,且能够根据数据大小进行伸缩。

TigerGraph旨在支持深度链接分析,实时在线事务处理(OLTP)及大容量数据加载。

通过“深度链接分析”TigerGraph支持从一个顶点到图形的三个或更多跳的关系,在此基础上进行结果分析。

大多数同类图形数据库主要为OLTP设计,用于导航和分析少量跳数,很多重要的分析功能都是后来添加的。

GSQL

TigerGraph有一种全新的查询语言GSQL。GSQL类似SQL、Cypher、存储过程及用户自定义函数的结合体。

注:Cypher、Gremlin、SPARQL是得到广泛采用的开源图形查询语言。

GSQL支持并行化,TigerGraph能将Cypher转换为GSQL,以便从Neo4j数据库进行迁移。

做为惯例,在面一种新的编程语言时都应该问问自己,是否值得花时间和精力来系统学习它。

TigerGraph架构

TigerGraph架构图

TigerGraph有一个ETL加载器(左),图形存储和处理引擎。包括查询语言和可视化客户端及REST API(中间),涵盖了企业数据基础服务的集成。

TigerGraph使用Apache Kafka与图形处理和存储引擎进行通信,Nginx Web服务器处理来自用户的GraphStudio和GSQL请求,然后传递给后端服务器。

TigerGraph Analytics Platform结合了图形存储引擎,图形处理引擎和三种类型的API,能够在本地、云端或混合配置中运行。

TigerGraph的消息传递允许在每个顶点和每个边缘级别进行并行处理。

RESTPP是一种增强的REST API服务器,是任务管理的核心。

根据TigerGraph的说法,该系统每小时可加载多达150 GB的数据,每台机器每秒传输数亿个顶点或边缘。

在20台商用机器上,每天能够将2B实时事件流式传输到具有100B顶点和600B边缘的图形上,将实时分析与大规模离线数据处理统一起来。

TigerGraph处理流程

Docker环境安装TigerGraph

在开始安装之前,更新Docker并将可用的RAM和处理器增加到4 GB和4个内核。

在网站上注册开发人员许可证后,从收到的电子邮件中,将Docker TigerGraph镜像下载到本地计算机。

Martins-iMac:Downloads mheller$ docker load < ./tigergraph-developer-2.2.3-docker-image.tar.gz
8823818c4748: Loading layer    119MB/119MB
19d043c86cbc: Loading layer  15.87kB/15.87kB
883eafdbe580: Loading layer  14.85kB/14.85kB
4775b2f378bb: Loading layer  5.632kB/5.632kB
75b79e19929c: Loading layer  3.072kB/3.072kB
2106b49716cb: Loading layer  7.168kB/7.168kB
da572f4e0c2f: Loading layer  4.034GB/4.034GB
6cd767fef659: Loading layer  338.4kB/338.4kB
Loaded image: tigergraph:2.2.3
Martins-iMac:Downloads mheller$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tigergraph          2.2.3               e1911655f9a7        3 weeks ago         4.11GB
hello-world         latest              4ab4c602aa5e   

如上所示,安装时没有警报,下面是启动的过程:

Martins-iMac:Downloads mheller$ docker run -i -t --name tigergraph -p 4142:14240 tigergraph:2.2.3
Welcome to TigerGraph Developer Edition, for non-commercial use only.
[RUN    ] rm -rf /home/tigergraph/tigergraph/logs/ALL*.pid
[FAB    ][2018-11-30 21:56:06] check_port_of_admin_servers
[RUN    ] /home/tigergraph/tigergraph/.gium/GSQL_LIB/service/../scripts/admin_service.sh start
/home/tigergraph/tigergraph/bin/admin_server/config.sh
=== zk ===
[SUMMARY][ZK] process is down
[SUMMARY][ZK] /home/tigergraph/tigergraph/zk is ready
=== dict ===
[SUMMARY][DICT] process is down
[SUMMARY][DICT] dict server has NOT been initialized
=== kafka ===
[SUMMARY][KAFKA] process is down
[SUMMARY][KAFKA] queue has NOT been initialized
=== gse ===
[SUMMARY][GSE] process is down
[SUMMARY][GSE] id service has NOT been initialized
=== gpe ===
[SUMMARY][GPE] process is down
[SUMMARY][GPE] graph has NOT been initialized
=== nginx ===
[SUMMARY][NGINX] process is down
[SUMMARY][NGINX] nginx has NOT been initialized
=== restpp ===
[SUMMARY][RESTPP] process is down
[SUMMARY][RESTPP] restpp has NOT been initialized
[FAB    ][2018-11-30 21:56:47] launch_zookeepers
[FAB    ][2018-11-30 21:57:00] launch_gsql_subsystems:DICT
[FAB    ][2018-11-30 21:57:04] launch_kafkas
[FAB    ][2018-11-30 21:57:22] launch_ts3s
[FAB    ][2018-11-30 21:57:25] launch_gsql_subsystems:GSE
[FAB    ][2018-11-30 21:57:28] launch_gsql_subsystems:GPE
[FAB    ][2018-11-30 21:57:31] launch_gsql_subsystems:NGINX
[FAB    ][2018-11-30 21:57:34] launch_gsql_subsystems:RESTPP
[FAB    ][2018-11-30 21:57:38] check_port_of_vis_services
[RUN    ] LD_LIBRARY_PATH="/home/tigergraph/tigergraph/bin" 
home/tigergraph/tigergraph/visualization/utils/start.sh
[FAB    ][2018-11-30 21:57:39] check_port_of_admin_servers
[RUN    ] 
home/tigergraph/tigergraph/.gium/GSQL_LIB/service/../scripts/admin_service.sh start 
home/tigergraph/tigergraph/bin/admin_server/config.sh
[RUN    ] /home/tigergraph/tigergraph/dev/gdk/gsql/gsql_server_util START || :
=== 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 (not_ready)
=== dict ===
[SUMMARY][DICT] process is up
[SUMMARY][DICT] dict server is ready
=== ts3 ===
[SUMMARY][TS3] process is up
[SUMMARY][TS3] ts3 is ready
=== graph ===
[SUMMARY][GRAPH] graph has NOT been initialized
=== nginx ===
[SUMMARY][NGINX] process is up
[SUMMARY][NGINX] nginx is ready
=== restpp ===
[SUMMARY][RESTPP] process is up
[SUMMARY][RESTPP] restpp is ready
=== gpe ===
[SUMMARY][GPE] process is up
[SUMMARY][GPE] graph has NOT been initialized (not_ready)
=== gsql ===
[SUMMARY][GSQL] process is up
[SUMMARY][GSQL] gsql is ready
=== Visualization ===
[SUMMARY][VIS] process is up (VIS server PID: 1242)
[SUMMARY][VIS] gui server is up
[RUN    ] rm -rf ~/.gsql/gstore_gs*_autostart_flag
Done.
tigergraph@2089c417aa54:~$

GSQL 101和GSQL示例

GSQL 101教程引导如何创建图形模式、加载数据和运行查询。

通过如下的查询演示,了解如何使用累加器、嵌套查询和安装定制查询。

USE GRAPH social
CREATE QUERY hello2 (VERTEX<person> p) FOR GRAPH social{
  OrAccum  @visited = false;
  AvgAccum @@avgAge;
  Start = {p};
  FirstNeighbors = SELECT tgt
                   FROM Start:s -(friendship:e)-> person:tgt
                   ACCUM tgt.@visited += true, s.@visited += true;
  SecondNeighbors = SELECT tgt
                    FROM FirstNeighbors -(:e)-> :tgt
                    WHERE tgt.@visited == false
                    POST_ACCUM @@avgAge += tgt.age;
  PRINT SecondNeighbors;
  PRINT @@avgAge;
}
INSTALL QUERY hello2
RUN QUERY hello2("Tom")

GSQL示例

https://docs.tigergraph.com/dev/gsql-examples

示例包括协同过滤、PageRank、产品推荐和最短路径算法。这些文件值得研究和运行。

由于开发人员许可证对每个数据库只允许一个图,所以,需要运行DROP ALL删除在GSQL 101练习中创建的社交图。

GSQL图形算法库

https://docs.tigergraph.com/graph-algorithm-library

GSQL图形算法库实现了标准图形算法、测试、GSQL查询,可从GitHub下载该库。

https://github.com/tigergraph/ecosys/tree/master/graph_algorithms

基本算法与安装脚本相结合,为图形生成自定义算法。

算法目前包括紧密度中心性,连通分量检测、社区检测、PageRank,最短路径和三角计数。

GraphStudio

除了GSQL的命令行界面外,TigerGraph还有一个GUI界面GraphStudio。

通过访问localhost:4142在本地实例上打开它,如下所示:

GraphStudio和TigerGraph测试驱动器

若想进行一步探索TigerGraph测试驱动器演示,访问如下链接:

https://testdrive.tigergraph.com/main/dashboard

测试数据

这些是只读图形数据库,包含一些预定义的参数化查询,也可编写自己的查询。

具有大量数据集(数十亿边缘)的三个测试用例,使用Amazon EC2 r4.4xlarge(16个vCPU,122个GiB RAM)实例。

两个小型数据库的测试用例,使用更经济的Amazon EC2 t2.xlarge(4个vCPU,16个GiB RAM)实例。

即使面对具有44亿边缘的反欺诈演示图,性能也相当不错。

GraphStudio和TigerGraph测试驱动器

TigerGraph提供高度并行性,及多跳分析查询的良好支持。

一般而言,数据库通常至少城西十年才能成熟健壮。

TigerGraph的开发始于2012年,至今已有六年历史。

TigerGraph Developer是免费的。

TigerGraph Enterprise具有基于RAM的订阅许可证,根据应用程序的查询和性能要求进行配置。每月每GB RAM的起价为105美元。

在AWS Marketplace t2.2xlarge实例上,在Ubuntu运行TigerGraph Enterprise评估版每小时0.371美元(每月271美元),加30天试用期后的许可证费用。

在Azure市场上,标准D2s v3实例的价格为每月71.42美元,加上30天试用期后的许可证费用。评估仅限于单个实例。

TigerGraph支持的平台:Linux(Red Hat,CentOS,Ubuntu和Debian)、Docker、VirtualBox、AWS,Azure。