关于图数据库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)是以图这种数据结构存储和查询的数据库.与其他数据库不同,关系 ...
随机推荐
- Linux基础篇七:Linux的命令执行
首选区分内置命令和外置命令: 内置命令:shell程序自带的命令,系统内核一启动就可以使用的命令 外置命令:在系统PATH变量路径下的命令 如何查看一个命令是内置命令还是外置命令: type -a c ...
- day24-练习
#17.有四个数字:1 2 3 4 ,能组成多少个各不相同且数字不重复的三位数?各是多少? count = 0 for i in range(1,5): for j in range(1,5): fo ...
- CHI 2013:人机交互领域那些令人兴奋的新技术
2013:人机交互领域那些令人兴奋的新技术" title="CHI 2013:人机交互领域那些令人兴奋的新技术"> 编者按:CHI是人机交互领域首屈一指的国际盛会, ...
- vue2.0学习之基础内容
import BScroll from 'better-scroll'; import star from '../star/star.vue'; import split from '../spli ...
- python学习笔记(13)常用模块列表总结
os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有文件 os.chdir() 改变当前工作 ...
- IPC之——信号量集
信号量集用于对存在竞争的资源加锁 1.semId=semget(key,nsems,semflg) key:为信号量集名称,可以指定为0455等数字,也可以为PC_PRIVATE nsems:创建几个 ...
- [LC] 244. Shortest Word Distance II
Design a class which receives a list of words in the constructor, and implements a method that takes ...
- vuex分模块管理
1.定义命名空间 dog.js export default { namespaced: true, // 局部状态 state: { name: "拉布拉多", age: 1 } ...
- JStorm:任务调度
前一篇文章 JStorm:概念与编程模型 介绍了JStorm的基本概念以及编程模型方面的知识,本篇主要介绍自己对JStorm的任务调度方面的认识,主要从三个方面介绍: 调度角色 调度方法 自定义调度 ...
- MOOC(1)-使用pycharm新建Django项目、开发post接口
https://www.cnblogs.com/liqu/p/9308966.html 1.安装Django的两种方式: > 1) pip install django 2)下载离线安装包,进入 ...