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的百万,千万,亿量级测试的更多相关文章

  1. 图数据库HugeGraph源码解读 (1) —— 入门介绍

    HugeGraph介绍 以下引自官方文档: HugeGraph是一款易用.高效.通用的开源图数据库系统(Graph Database,GitHub项目地址), 实现了Apache TinkerPop3 ...

  2. 图数据库HugeGraph:HugeGraph-Hubble基于Web的可视化图管理初体验

    原创/朱季谦 一.HugeGraph-Hubble简介 关于HugeGraph,官方资料是这样介绍的,它是一款易用.高效.通用的开源图数据库系统(Graph Database), 实现了 Apache ...

  3. 图数据库 Nebula Graph 是什么

    图数据库(英语:Graph Database)是一个使用图结构进行语义查询的数据库.该系统的关键概念是图,形式上是点 (Node 或者 Vertex) 和边 (Edge 或者 Relationship ...

  4. 图数据库对比:Neo4j vs Nebula Graph vs HugeGraph

    本文系腾讯云安全团队李航宇.邓昶博撰写 图数据库在挖掘黑灰团伙以及建立安全知识图谱等安全领域有着天然的优势.为了能更好的服务业务,选择一款高效并且贴合业务发展的图数据库就变得尤为关键.本文挑选了几款业 ...

  5. 陈宏智:字节跳动自研万亿级图数据库ByteGraph及其应用与挑战

    导读: 作为一种基础的数据结构,图数据的应用场景无处不在,如社交.风控.搜广推.生物信息学中的蛋白质分析等.如何高效地对海量的图数据进行存储.查询.计算及分析,是当前业界热门的方向.本文将介绍字节跳动 ...

  6. 主流图数据库Neo4J、ArangoDB、OrientDB综合对比:架构分析

    主流图数据库Neo4J.ArangoDB.OrientDB综合对比:架构分析 YOTOY 关注 0.4 2017.06.15 15:11* 字数 3733 阅读 16430评论 2喜欢 18 1: 本 ...

  7. linux环境下安装可操作图库语言Gremlin的图框架HugeGraph

    原创/朱季谦 图数据库是一项比较前沿而逐渐热门的技术,是NoSql数据库的一种,它应用图形理论存储实体之间的关系信息,最主要的组成有两种,结点集和连接结点的边.常见的图数据库有Neo4j,Januas ...

  8. 主流开源分布式图数据库 Benchmark

    本文由美团 NLP 团队高辰.赵登昌撰写 首发于 Nebula Graph 官方论坛:https://discuss.nebula-graph.com.cn/t/topic/1377 1. 前言 近年 ...

  9. OPPO 图数据库平台建设及业务落地

    本文首发于 OPPO 数智技术公众号,WeChat ID: OPPO_tech 1.什么是图数据库 图数据库(Graph database)是以图这种数据结构存储和查询的数据库.与其他数据库不同,关系 ...

随机推荐

  1. 基于Wiki的知识共享平台模型架构

    一.引言 当今的全球化知识经济社会中呈现出信息泛滥和知识更新周期短的现象,知识管理逐渐成为现代企业管理中不容忽视的一环.虚拟企业是基于共识目标而组成的动态协作组织,成员参与的流动性与各成员之间地域分布 ...

  2. git基本操作-长期维护

    ###############    初识git    ############## """ git初识: 1,git是什么?git是一个帮助用户版本控制的软件, 2,g ...

  3. 03-Java的基础语法

    一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的 ...

  4. ibatis in语句参数传入方法

    第一种:传入参数仅有数组        <select id="GetEmailList_Test"  resultClass="EmailInfo_"& ...

  5. 被这个C程序折腾死了

    The C programming language 的第13页,1.5.3 行计数的那里,那个统计换行符个数的程序我好像无法运行,无论输入什么,按多少下enter,什么都出不来. #include& ...

  6. 奇点云数据中台技术汇(一) | DataSimba——企业级一站式大数据智能服务平台

    在这个“数据即资产”的时代,大数据技术和体量都有了前所未有的进步,若企业能有效使用数据,让数据赚钱,这必将成为企业数字化转型升级的有力武器. 奇点云自研的一站式大数据智能服务平台——DataSimba ...

  7. EmguCV常用函数总结

    Emgucv常用函数总结: 读取图片 Mat SCr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.AnyColor); //根据路径创建指定的 ...

  8. Pycharm 2019 破解激活方法

    转载:https://blog.csdn.net/guofang110/article/details/87793264 使用破解补丁方法虽然麻烦,但是可用激活到2099年,基本上是永久激活了,毕竟在 ...

  9. ajax 接受后台中文数据出现"?"(疑问号)解决方案

    把后端要返回的数据转成一个JSONObject类型返回,返回String 类型数据使用JSONObject来封装然后返回,绝对不会出现???了, 要是返回的是一个实体类的话,需要在前端或者后端做转换成 ...

  10. [LC] 17. Letter Combinations of a Phone Number

    Given a string containing digits from 2-9 inclusive, return all possible letter combinations that th ...