TigerGraph图数据库安装试用性能测试

从TigerGraph图数据库的安装、试用体验、结合44亿边缘的反欺诈演示的测试结果,全方位解读TigerGraph图数据库的性能。

与关系(SQL)数据库或其他类型的NoSQL数据库(文档,宽列等)相比,图形数据库提供了更有效的关系和网络建模方法。最近在这个领域出现了许多产品,最初(1999年)Neo4j是这个领域的唯一。

TigerGraph图数据库

最近出现的TigerGraph是一个“实时原生并行图数据库”。TigerGraph可以在云端或内部部署,可以横向扩展和纵向扩展,可以在集群中自动划分图形,它兼容ACID,内置数据压缩,并声称比竞争对手更快。正如我们将要看到的,它使用了一种消息传递架构,这种结构本质上是并行的,并且可以根据数据的大小进行伸缩。

TigerGraph旨在支持深层链接分析,以及实时在线事务处理(OLTP)和大容量数据加载。通过“深度链接分析”,TigerGraph支持从一个顶点到图形的三个或更多跳的关系,并在此基础上进行结果分析。大多数其他图形数据库主要是为OLTP设计的,用于导航和分析少量跳数,大多重要的分析功能都是后来添加的。

虽然有一些被广泛采用的开源图形查询语言,如Cypher,Gremlin和SPARQL,但TigerGraph有一种全新的查询语言GSQL。 GSQL类似SQL的查询语法和Cypher的图形导航,存储过程以及用户自定义的函数相结合。

TigerGraph的GSQL查询语言,支持并行化,TigerGraph能够将Cypher转换为GSQL,以便从Neo4j数据库进行迁移。 做为惯例,在面一种新的编程语言时,都应该问问自己,是否值得花时间和精力来系统学习它。

TigerGraph架构

正如下图中看到的,TigerGraph有一个ETL加载器(左),图形存储和处理引擎,包括查询语言和可视化客户端以及REST API(中间),还涵盖了企业数据基础服务的集成。下面的系统流程图清楚地表明,TigerGraph使用Apache Kafka消息队列,与图形处理和存储引擎进行通信,Nginx Web服务器处理,来自多个用户的GraphStudio和GSQL请求,并将它们传递给后端服务器。

TigerGraph架构图

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

TigerGraph中的消息传递允许在每个顶点和每个边缘级别进行并行处理。RESTPP是一种增强的REST API服务器,是任务管理的核心。

根据TigerGraph的说法,该系统每小时可以加载多达150 GB的数据,每台机器每秒传输数亿个顶点或边缘,在拥有20台商用机器的规模上,每天能够将2B实时事件,流式传输到具有100B顶点和600B边缘的图形上,并将实时分析与大规模离线数据处理统一起来。

TigerGraph处理流程

Docker环境安装TigerGraph

可以在各种流行的Linux版本,以及Docker和VirtualBox上安装TigerGraph。以使用Docker在iMac上安装为例。在开始安装之前,更新了Docker安装,并将Docker可用的RAM和处理器增加到4 GB和4个内核。在网站上注册开发人员许可证后,从收到的电子邮件链接中,将Docker的当前TigerGraph镜像下载到本地计算机。

--cil-*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:~$

TigerGraph的GSQL 101和GSQL示例

GSQL 101教程引导如何创建图形模式、加载数据和运行查询。为了了解GSQL,下面的查询演示了如何使用累加器、嵌套查询和安装定制查询。

--sql-*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和TigerGraph

除了GSQL的命令行界面外,TigerGraph还有一个名为GraphStudio的GUI。可以通过访问localhost:4142在本地实例上运行它,如下所示。

GraphStudio和TigerGraph测试驱动器

如果想进行一步探索TigerGraph测试驱动器演示。可以访问以下链接:

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

TigerGraph测试数据

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

具有大量数据集(数十亿边缘)的三个测试用例,使用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。