关于图数据库HugeGraph的百万,千万,亿量级测试
1、Hugegraph测试硬件
1.1、本机硬件
本机测试hugeGraph版本:0.10.4
后置存储数据库:rocksdb,1TB的普通硬盘
1.2、测试服务器硬件
测试服务器hugegraph版本:0.9.2,服务器分配16G空间,16核
后置存储数据库cassandra:3.11.0,存储空间未限制,普通硬盘
2、基准测试
2.1、数据加载
加载功能:hugegraph自带的原生的导入工具,其schema定义其数据类型,索引和边标签属性,struct定义边。
加载大量数据时间和速度:主要是测试百万,千万,亿级别的加载速度。
2.2、查询性能
查询响应时间——针对于多度查询
查询响应时间——针对于遍历所有路径查询
查询响应时间——针对于最短路径查询
3、测试报告
3.1、本机和测试flink写入速度
|
测试 |
写入速度 |
硬件情况 |
|
本地流程 |
前期数据量少大概4000条/分钟(数据量大概10多万)后期数据量大的写入未进行测试。 |
Intel® Core™ i5-9400 CPU @ 2.90GHz × 6,RocksDB后置数据库存储内存1TB |
|
测试flink |
前期数据量比较少大概写入2624条/分钟(3h38m-571988) 后期数据量多了大概写入1200/分钟(3d2h-5292999) |
hugeGraph的16G,16核,Cassandra后置数据库存储内存未做限制 服务器上的写入速度小于本地写入速度原因: 1、服务器硬件 2、网络不稳定性 |
3.2、数据快速导入查询
3.2.1、百万级别导入
3.2.2、百万级别数据查询
点:150万
边:75万+新增边1万
查询最多五度,点定义有六个属性值,边只有一个属性值(id)
|
耗时 查询 |
g.V() |
g.E() |
g.V().out() |
g.V().outE()或g.V().inE() |
g.V().drop()或g.E().drop() |
|
第一次耗时 |
0.656S |
0.315S |
报错 |
报错 |
报错 |
|
第一次查询后均耗时 |
0.04S |
0.04S |
报错 |
报错 |
报错 |
|
原因 |
g.V()遍历只显示250条数据 |
g.E()遍历只显示250条数据 |
错误的请求,已超过最大数值 |
遍历的最大值不能超过80万 |
删除的最大值不能超过1万 |
遍历所有点的g.V().out()报错:请求错误
遍历所有点的出边g.V().outE()或g.V().inE()报错:最大值不能超过80W
删除所有点的数据g.V().drop()或g.E().drop()报错:最大值不能超过1W
3.2.2.1、多度查询
|
时间 多度 |
一度 |
二度 |
三度 |
四度 |
五度 |
查询单个点 |
|
查询耗时 |
0.04S |
0.03S |
0.03S |
0.03S |
由于数据问题,此次查询数据结果和四度一样,时间没有参考意义 |
0.03S——g.V().hasLabel("person").has("id","id值") |
3.2.2.2、路径遍历
路径分为两种:有环路径和无环路径。
有环路径是指路径中至少有一个对象出现的次数大于等于两次。
无环路径是指路径中所有的对象只出现一次。
查询未过滤环路的路径遍历:
|
时间 遍历路径 |
一层 |
二层 |
三层 |
四层 |
|
查询耗时 |
均耗时:0.075S |
第一次:0.274S 后均耗时:0.08S |
均耗时:0.1S |
第一次:0.875S 后均耗时:0.085S |
查询已过滤环路的路径遍历:
|
时间 遍历路径 |
一层 |
二层 |
三层 |
四层 |
五层 |
|
查询耗时 |
第一次:2.729S 后均耗时:0.450S |
第一次:1.983S 后均耗时:0.300S |
第一次:5.849S 后均耗时:5.210S |
第一次:6.881S 后均耗时:6.75S |
Error! Failed to do request 没有存在五层的数据,导致查询报错 |
3.2.2.3、最短路径查询
g.V("src_v_id")
.repeat(both().simplePath()).until(hasId("target_v_id")
.and().loops().is(lte(4))).hasId("target_v_id")
.path().limit(10)
src_v_id:起点顶点ID
target_v_id:终点顶点ID
lte(4):深度小于4
limit(10) :显示10条数据
如果不限制数据量:将10改为-1
|
时间 最短路径 |
深度小于2 |
深度小于3 |
深度小于4 |
深度小于5 |
|
查询耗时 |
第一次:0.894S 后均耗时:0.055S |
均耗时:0.055S |
第一次:0.347S 后均耗时:0.050S |
第一次:0.241S 后均耗时:0.060S |
3.2.3、千万级别导入
点:1500W 耗时:2H
边:750万 耗时:1H38M
3.2.4、千万级别数据查询
|
耗时 查询 |
g.V() |
g.E() |
g.V().out() |
g.V().outE()或g.V().inE() |
g.V().drop()或g.E().drop() |
|
第一次耗时 |
1.212S |
0.449S |
报错 |
报错 |
报错 |
|
第一次查询后均耗时 |
0.05S |
0.234S |
报错 |
报错 |
报错 |
|
原因 |
g.V()遍历只显示250条数据 |
g.E()遍历只显示250条数据 |
错误的请求,已超过最大数值 |
遍历的最大值不能超过80万 |
删除的最大值不能超过1万 |
3.2.4.1、多度查询
|
时间 多度 |
一度 |
二度 |
三度 |
四度 |
五度 |
查询单个点 |
|
第一次查询耗时 |
1.065S |
2.218S |
1.149S |
1.222S |
1.453S |
开始查询耗时:0.232S 多次查询后均耗时:0.035S——g.V().hasLabel("person").has("id","161f2f39beb3bdc6f2d0747a15fcefd5") |
|
第一次查询后多次查询均耗时 |
0.04S |
0.04S |
0.03S |
0.03S |
0.03S |
3.2.4.2、路径遍历
|
时间 遍历路径 |
一层 |
二层 |
三层 |
四层 |
|
查询耗时 |
第一次:0.958S 后均耗时:0.08S |
第一次:0.639S 后均耗时:0.08S |
存在环路的三层和四层路径遍历,存在对象大于等于2的情况,而且数据边的不完整性,查询的时间不具有参考性。 |
|
查询已过滤环路的路径遍历:
|
时间 遍历路径 |
一层 |
二层 |
三层 |
四层 |
五层 |
|
查询耗时 |
第一次:0.742S 后均耗时:0.075S |
第一次:1.284S 后均耗时:0.096S |
第一次:6.483S 后均耗时:5.111S |
第一次:7.574S 后均耗时:6.876S |
Error! Failed to do request 没有存在五层的数据,导致查询报错 |
3.2.4.3、最短路径查询
|
时间 最短路径 |
深度小于2 |
深度小于3 |
深度小于4 |
深度小于5 |
|
查询耗时 |
第一次:2.728S 后均耗时:0.055S |
均耗时:0.082S |
耗时:0.31S |
耗时:0.264S |
3.2.5、亿级别数据导入
点:1.05亿 耗时:13H35M34S
边:5268万 耗时:12H36M
3.2.6、亿级别数据查询
|
耗时 查询 |
g.V() |
g.E() |
g.V().out() |
g.V().outE()或g.V().inE() |
g.V().drop()或g.E().drop() |
|
第一次耗时 |
1.841S |
1.835S |
报错 |
报错 |
报错 |
|
第一次查询后均耗时 |
0.212S |
0.250S |
报错 |
报错 |
报错 |
|
原因 |
g.V()遍历只显示250条数据 |
g.E()遍历只显示250条数据 |
错误的请求,已超过最大数值 |
遍历的最大值不能超过80万 |
删除的最大值不能超过1万 |
页面上限制显示250条数据:limit(251)
3.2.6.1、多度查询
|
时间 多度 |
一度 |
二度 |
三度 |
四度 |
五度 |
查询单个点 |
|
第一次查询耗时 |
7.352S |
3.958S |
3.149S |
3.12S |
1.453S |
开始查询耗时:0.136S 多次查询后均耗时:0.030S——g.V().hasLabel("person").has("id","161f2f39beb3bdc6f2d0747a15fcefd5") |
|
第一次查询后多次查询均耗时 |
0.254S |
0.057S |
0.04S |
0.045S |
0.03S |
3.2.6.2、路径遍历
路径分为两种:有环路径和无环路径。
有环路径是指路径中至少有一个对象出现的次数大于等于两次。
无环路径是指路径中所有的对象只出现一次。
查询未过滤环路的路径遍历:
|
时间 遍历路径 |
一层 |
二层 |
三层 |
四层 |
|
查询耗时(id:d9530e5495fbf25d7aae082e8a65c722) |
查询耗时:0.759S |
查询耗时:2.77S |
环路的三层和四层路径遍历,存在对象大于等于2的情况,而且数据边的不完整性,查询的时间不具有参考性。 |
|
|
查询耗时(id:161f2f39beb3bdc6f2d0747a15fcefd5) |
查询耗时:2.28S |
查询耗时:1.358S |
||
查询已过滤环路的路径遍历:
|
时间 遍历路径 |
一层 |
二层 |
三层 |
四层 |
五层 |
|
查询耗时(id:d9530e5495fbf25d7aae082e8a65c722) |
第一次:1.213S 后均耗时:0.095S |
第一次:2.659S 后均耗时:0.116S |
第一次:29.457S 后均耗时:14.990S |
第一次:12.604S 后均耗时:9.01S |
第一次:1.421S 后均耗时:0.122S |
|
查询耗时(id:161f2f39beb3bdc6f2d0747a15fcefd5) |
第一次:2.024S 后均耗时:0.080S |
第一次:1.777S 后均耗时:0.096S |
第一次:10.318S 后均耗时:5.199S |
第一次:8.816S 后均耗时:6.615S |
Error! Failed to do request 没有存在五层的数据,导致查询报错 |
3.2.6.3、最短路径查询
|
时间 最短路径 |
深度小于2 |
深度小于3 |
深度小于4 |
|
查询耗时 |
报错:Error! Failed to do request |
由于深度小于2的报错,深度3测跑也报错,深度小于4的未进行操作。 |
|
4、测试总结:
①:当点的数据达到亿级别的时候,最短路径查询出现Error!Failed to do request,不知道是由于什么原因导致该查询出现错误,需到issue上查找是否有针对于该错误的具体的原因。
②:后端存储数据库cassandra是分布部署到三台服务器上,对于单服务器部署cassandra的查询未进行测试。
该文档仅代表测试情况,具体数据仅具供参考
关于图数据库HugeGraph的百万,千万,亿量级测试的更多相关文章
- 图数据库HugeGraph源码解读 (1) —— 入门介绍
HugeGraph介绍 以下引自官方文档: HugeGraph是一款易用.高效.通用的开源图数据库系统(Graph Database,GitHub项目地址), 实现了Apache TinkerPop3 ...
- 图数据库HugeGraph:HugeGraph-Hubble基于Web的可视化图管理初体验
原创/朱季谦 一.HugeGraph-Hubble简介 关于HugeGraph,官方资料是这样介绍的,它是一款易用.高效.通用的开源图数据库系统(Graph Database), 实现了 Apache ...
- 图数据库 Nebula Graph 是什么
图数据库(英语:Graph Database)是一个使用图结构进行语义查询的数据库.该系统的关键概念是图,形式上是点 (Node 或者 Vertex) 和边 (Edge 或者 Relationship ...
- 图数据库对比:Neo4j vs Nebula Graph vs HugeGraph
本文系腾讯云安全团队李航宇.邓昶博撰写 图数据库在挖掘黑灰团伙以及建立安全知识图谱等安全领域有着天然的优势.为了能更好的服务业务,选择一款高效并且贴合业务发展的图数据库就变得尤为关键.本文挑选了几款业 ...
- 陈宏智:字节跳动自研万亿级图数据库ByteGraph及其应用与挑战
导读: 作为一种基础的数据结构,图数据的应用场景无处不在,如社交.风控.搜广推.生物信息学中的蛋白质分析等.如何高效地对海量的图数据进行存储.查询.计算及分析,是当前业界热门的方向.本文将介绍字节跳动 ...
- 主流图数据库Neo4J、ArangoDB、OrientDB综合对比:架构分析
主流图数据库Neo4J.ArangoDB.OrientDB综合对比:架构分析 YOTOY 关注 0.4 2017.06.15 15:11* 字数 3733 阅读 16430评论 2喜欢 18 1: 本 ...
- linux环境下安装可操作图库语言Gremlin的图框架HugeGraph
原创/朱季谦 图数据库是一项比较前沿而逐渐热门的技术,是NoSql数据库的一种,它应用图形理论存储实体之间的关系信息,最主要的组成有两种,结点集和连接结点的边.常见的图数据库有Neo4j,Januas ...
- 主流开源分布式图数据库 Benchmark
本文由美团 NLP 团队高辰.赵登昌撰写 首发于 Nebula Graph 官方论坛:https://discuss.nebula-graph.com.cn/t/topic/1377 1. 前言 近年 ...
- OPPO 图数据库平台建设及业务落地
本文首发于 OPPO 数智技术公众号,WeChat ID: OPPO_tech 1.什么是图数据库 图数据库(Graph database)是以图这种数据结构存储和查询的数据库.与其他数据库不同,关系 ...
随机推荐
- Matlab高级教程_第二篇:Matlab相见恨晚的模块_02_并行运算-关于parfor的问题
1 我们知道MATLAB支持并行运行一般有四种模式: 第一种模式:本机调用多核CPU性能并行运算 第二种模式:本机调用GPU性能并行运算 第三种模式:多计算机组成集群,调用集群CPU性能并行运算 第四 ...
- Metasploit详解
title date tags layout Metasploit 详解 2018-09-25 Metasploit post 一.名词解释 exploit 测试者利用它来攻击一个系统,程序,或服务, ...
- Linux的基础知识
什么是操作系统? 操作系统是人与计算机的中介. 操作系统是干什么的? 控制所有资源{硬件资源和软件资源(驱动,应用软件)} 常用的操作系统:Unix Windows Linux Linux的哲学思想: ...
- linux 上安装 keepalive
1.keepalive 单机安装 1.1 安装环境 yum -y install kernel-devel* openssl-* popt-devel lrzsz openssh-clients li ...
- Linux 杀死进程方法大全(kill,killall)
杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志. 首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: # kill -pid 注释:标准的kill命令通常 ...
- 阿里巴巴IconFont的使用方式
一.解释一下为什么要使用IconFont? IconFont顾名思义就是把图标用字体的方式呈现. 其优点在于以下几个方面: 1.可以通过css的样式改变其颜色:(最霸气的理由) 2.相对于图片来说,具 ...
- Jmeter阶梯式压测
https://www.cnblogs.com/Zfc-Cjk/p/11639219.html 什么是阶梯式压测? 阶梯式压测,就是对系统的压力呈现阶梯性增加的过程,每个阶段压力值都要增加一个数量值, ...
- [LC] 345. Reverse Vowels of a String
Write a function that takes a string as input and reverse only the vowels of a string. Example 1: In ...
- python库之——sklearn
机器学习库sklearn 官方documentation(资料)中分为不同的部分: 其中我们主要讲User Guide(机器学习算法理论介绍).API(程序实现方法): 一.User Guide ht ...
- [LC] 442. Find All Duplicates in an Array
Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others ...