图数据库性能 - 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将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示例

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练习中创建的社交图。

图形算法库

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。