HugeGraph
文章平均质量分 83
Jermy Li
HugeGraph图数据库作者,专注于云计算及大数据方向的研发。
展开
-
Comparison of Graph Database: Neo4j, JanusGrraph and HugeGraph
Main FeaturesNeo4jJanusGraphHugeGraphOpen Source EcologyThe community version is open source, the commercial version is closed sourceOpen source, compatible with the Apache Tinkerpop ecosystem, mainly provided by IBM on cloud services.(Janus ...原创 2022-01-04 22:00:09 · 1151 阅读 · 1 评论 -
记一次Java性能优化及分析
hugegraph core性能优化 - 提升插入速度35%背景HugeGraph是一个Java语言编写的图数据库,也是开源的项目,本文记录了一次HugeGraph早期优化性能的过程分析与结果。HugeGraph之前使用Cassandra后端时,插入数据基本上90%时间花在写数据库操作上。随着后端存储RocksDB性能的不断优化(目前已达到 12w edges/s),HugeGraph在插入数据时core本身所占时间比重越来越大,因此core本身性能的优化又一次提上日程。如何优化性能?大体步骤原创 2021-10-28 15:47:02 · 408 阅读 · 0 评论 -
tinkerpop Step算子的框架结构
最顶层接口 Step:// org.apache.tinkerpop.gremlin.process.traversal.Steppublic interface Step<S, E> { public void addStarts(final Iterator<Traverser.Admin<S>> starts); public void addStart(final Traverser.Admin<S> start);原创 2021-02-24 20:47:48 · 481 阅读 · 0 评论 -
SOFA-RPC使用自定义类型数组参数报错 argument type mismatch
SOFA-RPC使用自定义类型数组参数报错:argument type mismatch1 问题表现2 问题定位分析1 定位客户端在发送数据之前是否有问题2 定位服务端接收到的数据是否有问题3 定位服务端处理数据是否有问题3 临时解决方法1 将RPC方法参数由`Id[] ids`改为`Object[] ids`,经过验证没有问题:2 或者将Id由`interface`改为`class`,经过验证也没有问题,但是由于需要修改大量已有代码,所以没办法实际应用,仅为测试该方案可行性:1 问题表现客户端通过RP原创 2021-02-13 20:32:42 · 621 阅读 · 1 评论 -
Gremlin在count step结束后会再次调用hasNext的原因分析
执行语句:g.V().hasLabel('电影').limit(26).count()count()调用栈:Thread [gremlin-server-exec-4] (Suspended (breakpoint at line 1713 in GraphTransaction$LimitIterator)) GraphTransaction$LimitIterator<T>.fetch() line: 1713 GraphTransaction$LimitIterator&l原创 2020-12-27 17:42:44 · 358 阅读 · 0 评论 -
图数据库有哪些优点?
图数据库(Graph Database)是一种以图结构进行存储和查询的数据库。图数据库的关键概念是点(代表实体)和边(代表关系),通过边将顶点连接在一起,从而进行快速的图检索操作。图数据库的优点总结如下:使用图(或者网)的方式来表达现实世界的关系很直接、自然,易于建模。比如某人喜欢看某电影,就可以建立一条边连接这个人和这部电影,这条边就叫做“喜欢”边,同时这个人还可以有其它边,比如“朋友”边...原创 2020-03-12 14:54:55 · 4628 阅读 · 0 评论 -
HugeGraph图数据库性能评测结果
HugeGraph Database Performance Test下面是HugeGraph的性能测试结果一览,两个典型后端存储–RocksDB单机版、Cassandra集群版:RocksDB单机版性能(48CPUs 128G内存 HDD盘)https://hugegraph.github.io/hugegraph-doc/performance/hugegraph-api-0.5.6-...原创 2020-03-11 19:38:23 · 1574 阅读 · 1 评论 -
HugeGraph图数据库各类索引功能对比
HugeGraph Database IndexHugeGraph图数据库的索引支持比较全面,图数据库的索引一般包括几方面:图索引/边索引(graph-index):主要用于加速获取顶点的关联边,一般使用邻接表或十字链表等方式,也可以使用hash索引。hugegraph使用的是邻接表。超级点索引(vertex-centric-index):主要用于加速获取超级顶点的部分关联边,比如查...原创 2020-03-06 17:12:17 · 1190 阅读 · 0 评论 -
Java缓存库对比-以及OHCache总结
堆内缓存:LinkedHashMap:Java自带类,内置LRU驱逐策略的实现(access-order);多线程访问需要自己实现同步。Guava Cache:Google Guava工具包中的缓存实现,支持LRU驱逐策略;支持多线程并发访问,支持按时间过期,但只有在访问时才清除过期数据。Ehcache:支持多种驱逐策略:LFU、LRU、FIFO,支持持久化和集群。性能跟Guava Cac...原创 2020-02-25 00:35:41 · 3913 阅读 · 0 评论 -
基于图数据库的新型肺炎传染图谱建模与分析
原文地址:https://mp.weixin.qq.com/s/9BYk1ONd3gKTzBW0WnxuJw一、背景与数据来源介绍新型肺炎作为一种存在潜伏期的传染病,分析其传染关系及接触关系非常有利于疫情的防控,对疫后的研究分析也有帮助。本文将介绍基于图数据库对新型肺炎图谱进行建模与分析的过程及效果。图数据库(Graph Database)是一种复杂关系数据的处理系统,一种使用顶点...转载 2020-02-11 16:13:35 · 2838 阅读 · 1 评论 -
Cassandra的4种超时参数汇总
Cassandra的4种超时参数汇总read_request_timeout_in_ms、write_request_timeout_in_ms、SocketOptions.setReadTimeoutMillisSocketOptions.setConnectTimeoutMillisStatement.setReadTimeoutMillisrequest timeout原创 2019-12-17 21:44:00 · 2493 阅读 · 0 评论 -
深入学习Gremlin(24):附加操作sideEffect
第24期 Gremlin Steps:`sideEffect()``sideEffect()`: 在某个位置插入一个附加操作,以执行额外的操作,通常可与`store`、`sack`等配合使用。另外如下一些Step本质上也是`sideEffect`: `group(string)`、`groupCount(string)`、`subgraph(string)`、`aggregate(string)`、`inject(string)`、`profile(string)`、`withSideEffect`原创 2019-04-10 15:23:43 · 5040 阅读 · 3 评论 -
深入学习Gremlin(20):遍历栅栏barrier
第20期 Gremlin Steps:barrier()本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据,如下图所示:![init-data](file:////Users/lizhangmei/Documents/hugegraph/深入学习Gremlin/init-dat...原创 2019-04-10 14:45:20 · 3960 阅读 · 2 评论 -
深入学习Gremlin(19):结果存取口袋sack
深入学习Gremlin(19):结果存取口袋sack第19期 Gremlin Steps:sack()本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据,如下图所示:上一期:深入学习Gremlin(18):随机过滤与注入结果存取口袋说明Gremlin在路径游走的时候,可...原创 2019-04-05 00:37:34 · 4500 阅读 · 2 评论 -
深入学习Gremlin(13):路径选取与过滤
第8期 Gremlin Steps:as()+select()、as()+where()、as()+match()、as()+dedup()本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据,如下图所示:上一期: 深入学习Gremlin(12):数学运算路径选取与过滤说明...原创 2019-03-12 11:22:04 · 10122 阅读 · 9 评论 -
深入学习Gremlin(16):结果聚集与展开
第16期 Gremlin Steps:aggregate()、store()、unfold()、fold()本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据,如下图所示:上一期: 深入学习Gremlin(15):分支操作结果聚集与展开说明Gremlin在路径游走的时候,...原创 2019-03-15 15:49:39 · 8512 阅读 · 3 评论 -
通过Gremlin语言构建关系图并进行图分析
背景Gremlin是Apache TinkerPop框架下实现的图遍历语言,支持OLTP与OLAP,是目前图数据库领域主流的查询语言,可类比关系型数据库之于SQL语言。HugeGraph是国内的一款开源图数据库,完全支持Gremlin语言。本文将讲述如何在HugeGraph图数据库上通过Gremlin来构建一张图,并进行一些基本的图分析。该图描述了TinkerPop框架、Gremlin语言...原创 2018-09-04 16:36:40 · 6639 阅读 · 5 评论 -
图数据库入门教程-深入学习Gremlin(1):图基本概念与操作
深入学习Gremlin(1):图基本概念与操作前言:Gremlin语言是图数据库查询语言,相当于SQL之于关系型数据库。为了图数据库使用者更好的掌握Gremlin这门图语言,我们对Gremlin Steps进行了分类与总结,接下来将会为大家出一个Gremlin系列文章(初步准备分20~25期来完成这个计划),每一期会针对一类Step进行语法讲解与实例分析。第1期 Gremlin Steps:V()、E()、id()、label()、properties()...原创 2018-09-07 20:07:56 · 63483 阅读 · 7 评论 -
深入学习Gremlin(2):边的遍历操作
第2期 Gremlin Steps:out()、in()、both()、outE()、inE()、bothE()、outV()、inV()、bothV()、otherV()。边遍历是指通过顶点来访问与其有关联边的邻接顶点(或者仅访问邻接边),边遍历是图数据库与图计算的核心。原创 2018-09-11 16:29:31 · 32816 阅读 · 7 评论 -
深入学习图数据库语言Gremlin 系列文章链接汇总
深入学习Gremlin系列文章 链接汇总 --图遍历语言Gremlin教程、Gremlin语法、Gremlin实例、Gremlin运用。1.图基本概念与操作。2.边的遍历操作。3.has条件过滤。4.图查询返回结果数限制。5.查询路径path。6.循环操作。7查询结果排序。8.数据分组与去重。9.条件和过滤。10.逻辑过滤条件。...原创 2018-09-11 20:09:13 · 33161 阅读 · 5 评论 -
深入学习Gremlin(3):has条件过滤
第3期 Gremlin Steps:hasLabel(labels…)、hasId(ids…)、has(key, value)、...转载 2018-09-11 20:15:28 · 1967 阅读 · 1 评论 -
深入学习Gremlin(6):循环操作
第2期 Gremlin Steps:repeat()、times()、until()、loops()循环操作是指多次执行某一部分语句,用于语句需要重复运行的场景,比如“查找朋友的朋友的朋友”,可以直接使用循环操作来完成即“查找3层朋友”。原创 2018-09-18 16:47:36 · 20711 阅读 · 20 评论 -
深入学习Gremlin(8):数据分组与去重
第8期 Gremlin Steps:group()、groupCount()、dedup()、by()Gremlin支持对数据进行分组和去重。数据分组是指:从某个维度上对拥有相同点的数据进行分组,比如根据年龄分组、根据出生省份分组等。数据去重是指:去除结果集中相同的元素,或者去除在某个维度上具有相同点的数据,比如根据年龄选出一些代表,每个年龄最多只能有一个人。原创 2018-09-19 11:18:55 · 13823 阅读 · 1 评论 -
HugeGraph Plugin机制及插件扩展流程
HugeGraph是一个开源的图数据库,内置支持多种后端存储,此外还支持通过插件的方式扩展存储后端。插件实现者无需更改HugeGraph本身源代码,插件使用者无需关注代码实现,就能轻松增加插件扩展功能。这篇文章主要讲述了HugeGraph扩展自定义插件的流程。可扩展维度:自定义后端存储、自定义系列化器、自定义配置项、自定义分词器。原创 2018-09-20 16:02:51 · 1429 阅读 · 4 评论 -
Java SPI机制实现插件化扩展功能
Java SPI机制实现插件化扩展功能。我们有一个图数据库的服务,用户希望在不修改现有源代码的情况下扩展自定义的分词器,达到可插件式扩展功能的目标。通过Java的SPI机制实现插件式的扩展功能还是比较简便的。特别的,在实现过程中遇到一个比较怪异的问题:ServiceLoader.load()时抛出NoClassDefFoundError,文末会记录一下这个问题的解决过程及原因分析。原创 2018-09-20 17:37:04 · 5070 阅读 · 1 评论 -
HugeGraph图数据库有哪些功能?
HugeGraph简介图数据库(Graph Database)是一种使用顶点、边和属性来表示与存储数据,并以图结构进行语义查询的数据库。图数据库的关键概念是边,通过边将顶点连接在一起,从而进行快速的图检索操作。HugeGraph是一款开源图数据库系统,可以存储海量的顶点(Vertex)和边(Edge), 实现了Apache TinkerPop 3框架,支持Gremlin查询语言。 Huge...原创 2018-08-26 19:54:07 · 8305 阅读 · 5 评论