apache / incubator-hugegraph

A graph database that supports more than 100+ billion data, high performance and scalability (Include OLTP Engine & REST-API & Backends)
https://hugegraph.apache.org
Apache License 2.0
2.63k stars 517 forks source link

[Question] HugeGraph 序列化优化/性能优化任务疑问 #2255

Open Z-HUANT opened 1 year ago

Z-HUANT commented 1 year ago

Problem Type (问题类型)

others (please edit later)

Before submit

Environment (环境信息)

需求疑问,没有环境信息

Your Question (问题描述)

我想问下这个需求的相关信息 image

问题1:这个需求优化的接口是不是 org.apache.hugegraph.api.graph.EdgeAPI#list 接口

问题2:如果是该接口的话,那么我理解是如果查询的 label 不为空,那么直接从 schema 中判断是否存在对应的 edgelabel,但是需求描述是“如果顶点类型不具有该类型边”,我的判断好像是直接判断 label,并没有判断到顶点

问题3:如果我上面的理解没有错误的话,那么添加的代码大概如下图1,当 label 不存在时,我返回一个空迭代器,但是当 page != null 成立时,会报错,大致调用大概如下图2,我问了ChatGPT和查阅了部分文档,不知道这里怎么返回空,如果有相关文档的话,请发送一下,我去看看 8d92fed18ffc5b2db36dea15f3bf05a 5e0d99ce0dfb371b620fc92aa0a8681

Vertex/Edge example (问题点 / 边数据举例)

No response

Schema [VertexLabel, EdgeLabel, IndexLabel] (元数据结构)

No response

imbajin commented 1 year ago

@javeme @zyxxoo could we add more context for it for development?

Z-HUANT commented 1 year ago

针对问题一:接口不仅限于 api,也包括 gremlin 查询,所以需要在解析的 query 里面进行判断 针对问题二:是的,如果查询的 label 不为空,那么直接从 schema 中判断是否存在对应的 edgelabel(schema 存在于内存中,所以可以快速判断,进行无效查询的跳过,加速性能)

javeme commented 1 year ago

对于问题1、2已解答。

对于问题1进一步问题query如何改造,可以参考代码块入口optimizeQuery()https://github.com/apache/incubator-hugegraph/blob/fc9bc2866e4bbcd65bf67a6dbbeb541b06da8649/hugegraph-core/src/main/java/org/apache/hugegraph/backend/tx/GraphTransaction.java#L1416

对于问题3:不建议手动去构造traversal因为需要一些上下文信息,可以简单的模拟空查询比如g.E().limit(0)。不过在下层query进行优化,所以不涉及此问题。

msgui commented 9 months ago

@Z-HUANT hi,我已经在你的仓库提交了pr,看看代码逻辑是否对你目前有帮助? 👉link: https://github.com/Z-HUANT/incubator-hugegraph/pull/1