点击蓝字,关注我们
🍀GeaFlow 图存储扩展支持 paimon 数据湖(实验性功能) 🍀图数仓能力扩展:支持对图中的实体进行关系型访问 🍀统一的内存管理器支持 🍀RBO 规则扩展:新增 MatchEdgeLabelFilterRemoveRule 和 MatchIdFilterSimplifyRule 🍀支持增量匹配算子
支持对象存储/HDFS 分布式存储,天然适配云原生环境。因此可实现存储与计算分离,降低硬件依赖,支持弹性扩展。 支持主键表 LSM 合并、增量更新,满足实时数据更新需求。 列式存储+统计索引(Z-Order、Min-Max 等),支持高效数据裁剪与 OLAP 查询加速。
支持在 GeaFlow 中将用户图数据存储到 paimon 数据湖。 当前为实验性功能,仅支持使用本地文件系统作为 paimon 的存储后端,且暂不支持 recover 能力,暂不支持动态图数据存储。 通过配置`geaflow.store.paimon.options.warehouse`参数来指定存储路径,默认路径为"file:///tmp/paimon/"。

支持图中的点/边作为 SQL 查询的来源表,进行查询。
我们通过 TableScanToGraphRule 规则,让生成和优化 RelNode 时识别 SQL 语句中来源于图中的点/边实体,这使得用户可以像 SQL 中扫表操作一样读取图中的点边 示例: student 是图 g_student 中的点实体
USE GRAPH g_student;INSERT INTO table_scan_001_resultselect avg(age) as avg_age from student;
支持图中的点与边关联作为 SQL 查询的等值条件 Join,进行查询。
我们通过 TableJoinTableToGraphRule 规则,让生成和优化 RelNode 时识别 SQL 语句中的 Join 算子,这使得用户可以像 SQL 中连接表操作一样在图中进行查询 示例: student 是图 g_student 中的点实体,selectCource 是关联在student点上的出边
USE GRAPH g_student;INSERT INTO vertex_join_edge_001_resultSELECT s.id, sc.targetId, sc.tsFROM student s JOIN selectCourse sc on s.id = sc.srcIdWHERE s.id < 1004ORDER BY s.id, targetId;
🍀内存管理器支持
当前 GeaFlow 没有内存管理,除了外部依赖 rocksdb 会用堆外内存,其他的全都是堆内内存。当内存使用多时,GC 压力明显,另外 shuffle 阶段网络发送也存在多次数据拷贝,导致效率不高。
内存管理负责各模块(shuffle、state、framework)的内存管控,包括申请、释放、监控。 内存管理有两部分:堆内和堆外。不同模块使用可能不同的内存区域,合理使用这些资源可以更高效跑完作业。内存管理器主要有以下核心能力:
支持堆内和堆外内存统一管理:通过统一抽象 MemoryView,提供读写接口,屏蔽用户对堆外和堆外的感知。当前 Memoryview 堆外内存是采用预分配模式,初始大小是通过 off.heap.memory.chunkSize.MB 参数来控制,如果不设置,默认是 -Xmx 参数的30%作为初始值。运行过程中也支持动态扩所容。 支持计算和存储统一内存管理
为了避免堆外内存浪费或者过度使用,GeaFlow 对各模块的堆外内存使用统一管理。内存主要分3个部分:shuffle、state和default。 Default 是预留空间,可动态被 shuffle 或者 state 模块占用。 如下图所示:

state 和 shuffle 默认独占10%的堆外内存, default 则占用80%。
🍀RBO 规则扩展:新增 EdgeLabel 和 IdFilter 优化规则
Edge Label 简化:针对 Match 匹配语句后接 Where 子句对边进行过滤的查询进行执行计划简化。 ID Filter简化:针对Match匹配语句中对点的id进行过滤的查询进行执行计划简化。 规则在默认情况下生效,使用示例如下:
// GQL示例1(MatchIdFilterSimplifyRule优化)MATCH (a:user where id = 1)-[e:knows]-(b:user)RETURN a.id as a_id, e.weight as weight, b.id as b_id// 原执行计划LogicalProject(a_id=[$0.id], weight=[$1.weight], b_id=[$2.id])LogicalGraphMatch(path=[(a:user) where =(a.id, 1) -[e:knows]-(b:user)])LogicalGraphScan(table=[default.g0])// MatchIdFilterSimplifyRule优化后执行计划,vertex id转移到MatchVertex中进行过滤LogicalProject(a_id=[$0.id], weight=[$1.weight], b_id=[$2.id])LogicalGraphMatch(path=[(a:user)-[e:knows]-(b:user)])LogicalGraphScan(table=[default.g0])// GQL示例2(MatchEdgeLabelFilterRemoveRule优化)MATCH (a:user where id = 1)-[e:knows]-(b:user) WHERE e.~label = 'knows'or e.~label = 'created'RETURN a.id as a_id, e.weight as weight, b.id as b_id// 原执行计划LogicalProject(a_id=[$0.id], weight=[$1.weight], b_id=[$2.id])LogicalGraphMatch(path=[(a:user) where =(a.id, 1) -[e:knows]-(b:user) where OR(=($1.~label, _UTF-16LE'knows'), =($1.~label, _UTF-16LE'created')) ])LogicalGraphScan(table=[default.g0])// MatchEdgeLabelFilterRemoveRule优化后执行计划,针对edge label的过滤转移到MatchEdge中进行LogicalProject(a_id=[$0.id], weight=[$1.weight], b_id=[$2.id])LogicalGraphMatch(path=[(a:user) where =(a.id, 1) -[e:knows]-(b:user)])LogicalGraphScan(table=[default.g0])
支持增量匹配逻辑,通过反向传播来扩展每次 window 新增数据的触发起点。

通过在 dsl 或高阶代码中设置`geaflow.dsl.graph.enable.incr.traversal`参数为 true 开启增量计算逻辑。
开启示例如下:
QueryTester.build().withConfig(FrameworkConfigKeys.BATCH_NUMBER_PER_CHECKPOINT.getKey(), "1").withQueryPath(queryPath).withConfig(DSLConfigKeys.ENABLE_INCR_TRAVERSAL.getKey(), "true").withConfig(DSLConfigKeys.TABLE_SINK_SPLIT_LINE.getKey(), lineSplit).execute();
✨实现了 OSS/DFS/S3 标准化接口,接入主流云存储:支持开源OSS/DFS/S3等 remote 分布式存储,同时标准化了接口,便于按需快速扩展其它外部分布式存储系统。 ✨支持标准 Match 算子:支持标准 ISO-GQL Match 语法及算子。 ✨Aliyun ODPS 表的读写能力:支持 Aliyun ODPS 插件,提供 ODPS 表的读写能力。 ✨兼容开源 Ray 生态:引擎支持开源 Ray 版本,同时 console 平台支持将任务提交到 Ray 集群。 ✨DSL 支持时序能力:DSL 侧支持时间感知的数据处理、提供动态图与时序结合的能力。 ✨Shuffle 支持反压优化:通过滑动窗口的方式进行数据传输和实现反压能力。 ✨GeaFlow 流图性能测试:新增了 GeaFlow Vs Spark/Flink 的 demo 和性能测试报告。
✨致谢
感谢所有贡献者使这次发布成为可能!


·END·

欢迎关注TuGraph代码仓库✨
https://github.com/tugraph-family/tugraph-db
https://github.com/tugraph-family/tugraph-analytics
最后修改时间:2025-04-03 11:01:30
文章转载自TuGraph,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




