
实操 |LDBC 数据导入及 nGQL 实践
最近在自己搭的一个 Nebula Graph 单机集群中导入LDBC数据集,并尝试用 nGQL 写了几个 LDBC SNB 几个基础查询(Short Reads)。
“LDBC 是一个致力于发展图数据管理的产业联盟组织,它开发了一系列 Benchmarks,方便企业比较图数据库产品。SNB 是基于社交网络场景和数据开发的一组 Benchmarks,当前由交互场景和 BI 场景组成。”
>>>>数据导入
Nebula bench(链接:https://github.com/vesoft-inc/nebula-bench/)这个 repo 有用 Python 包装好的生成和导入 LDBC 到 Nebula 的过程,基本上照着它文档中的步骤做就行。
遇见的几个小坑:
- 运行 python3 run.py importer 后默认生成的 yaml 中默认设置了 space 的 replica 为 3,在我的单机集群下不能用。要么自己改 py,要么就只是 draft run 后,自己运行 nebula importer 来导数据,我机智的选择了后者;
- 导入的数据中发现一些完全不同类型的点的 vid 是一样的,如 person 和 organization,这个在后面跑 nGQL 的时候会觉得有点怪。Nebula bench 的文档也有提到,因为不影响压测,没做处理,好吧。导入成功后,SHOW STATS 欣赏一下:
>>>>nGQL 查询
下面尝试解决LDBC SNB Interactive workload 中相对基础的几个查询场景,Short Reads,场景的需求可以具体看 spec。
Short Reads #1 - Profile of a person
Short Reads #2 - Recent messages of a person
这里从 comment 找 post 需要支持不限跳数,目前 Nebula 尚不支持,只能指定一个足够大的上限,我随便设了 5。
Short Reads #3 - Friends of a person
Short Reads #4 - Content of a message
终于可以不用 MATCH 了,这个简单的查询直接用 FETCH 搞定。
Short Reads #5 - Creator of a message
同样不需要用 MATCH , GO !
Short Reads #6 - Forum of a message
继续 GO 。这里也涉及到无限跳数的问题, GO 同样不支持,我设了最大跳数 5。
Short Reads #7 - Replies of a message
这个场景看下来需要 Open Cypher 的 OPTIONAL MATCH来实现,Nebula 暂时还不支持,期待后续版本能加上。
