蚂蚁图拓扑解决方案大家族
蚂蚁开源图拓扑数据库tugraph
国内加速访问官方链接
TuGraph 是蚂蚁集团自主研发的大规模图计算系统,提供图数据库引擎和图分析引擎。其主要特点是大数据量存储和计算,高吞吐率,以及灵活的 API,同时支持高效的在线事务处理(OLTP)和在线分析处理(OLAP)。 LightGraph、GeaGraph 是 TuGraph 的曾用名。
图数据库大家第一反应可能是一种kv键值对数据库,但是对于图搜索过程中的深度搜索和广度搜索来说,kv键值对hash结构的搜索速度上限就显得非常的有限了,根据对源码的阅读猜测tugraph采用自动分组,倒排索引等方式来对图拓扑增删改查过程进行了加速,在商业化版本中tugraph实现了高可用的特性。虽然相对百度的nebula图数据库出现的更晚,但是两个数据库在图计算场景中的应用旗鼓相当。tugraph支撑倒排索引架构进行快速节点搜索能力。未来tugraph会支撑向量搜索引擎用以解决图计算场景中
在以往的工作中图采样的工作一半基于networkx展开,networkx中所面临的问题时在构建千万节点及上亿关系场景中内存需求非常的大。在基于ray的分布式betweenness介数中心性计算场景中每个节点需要的内存及硬盘空间超过32GB,这里存在一个ray分布式核心数与内存及硬盘之间的横向扩容问题。如果把同构图及异构图构图特征过程迁移到图数据库,那么相当于每一次构图为一次cypher查询,结合tugraph的高可用性能可以降低图模型在构图特征部分的时间复杂度及空间复杂度问题。
在2023年03月26日的meetup分享会中,tugraph负责人讲到
主要功能特征包括:
- 标签属性图模型
- 支持多图 neo4j社区版本目前仅仅支撑单一图,多图需要开通商业版本才能支撑。
- 完善的 ACID 事务处理 支撑事务后可以在大数据流批一体计算过程中提升数据一致性
- 内置 25+ 图分析算法 未来25种基于cpu并行计算场景图分析算法可以调用数据库之外的资源进行扩容计算
- 基于 web 客户端的图可视化工具
- 支持 RESTful API 和 RPC
- OpenCypher 图查询语言 未来计划构建自然语言与opencypher nosql模型,用以在产品场景高效生成有效查询语句解决放哪
- 基于 C++/Python/Java 的存储过程
- 适用于高效图算法开发的 Traversal API
性能及可扩展性特征包括:
- TB 级大容量 面向民生、医疗、保险等大量客户场景构图提供有效底层支撑
- 千万顶点/秒的高吞吐率
- 高可用性支持(企业版)
- 高性能批量导入
- 在线/离线备份 容灾备份 读写分离 支撑数据库弹性扩容及数据同步
推荐docker安装方案快速在本地部署tugraph数据库
docker run -d -p 7070:7070 -p 9090:9090 --name tugraph_demo tugraph/tugraph-runtime-centos7 lgraph_server
# 7070是默认的http端口,web访问使用。
# 9090是默认的rpc端口,rpc client访问使用。
web 访问
[http://x.x.x.x:7070](https://link.zhihu.com/?target=http%3A//x.x.x.x%3A7070)
默认用户名为
admin,密码为73@TuGraph
2023年3月为止 目前tugraph生态对java的支撑是非常完善的,对python体系的支撑目前在docker镜像内具有相关实现。
目前tugraph社区版本暂无主从部署解决方案,无法进行节点横向扩容。可以采用在线备份及离线备份功能用以实现快速节点扩容能力,提升数据库qps。未来计划增加基于docker composs的分布式节点部署方案。
作为一名算法博主,比较在乎的是tugraph实现了那些图拓扑机器学习cpu计算。内置 25+ 图分析算法分别是基于c++:cpp的BFS、PageRank、SSSP、WCC、LCC、LPA基于python:dgl的deepwalk、gcn、PageRank、scanGraph。
图计算过程中构建图的特征有以下的手段:随机游走、将整张图的采样优化到当前邻居节点的采样、。图数据库可以实现在构建图数据特征上进行多机器并行加速的效果并且减少整张图构建时对机器内存的需要。
图拓扑一体化可视化平台g6vp
在g6vp平台中可以进行
图可视化布局:力导布局、同心圆布局、资金力导布局(有向权重布局方案)
统计分析可视化:桑吉图
基于前端的图计算:社区发现、节点重要性、节点相似性、图聚类。未来前端计算设计基于rest ful接口配置的图计算解决方案+基于后端有限资源调度列队解决方案。在有限资源大数据场景即便后端进行计算也需要大量的计算时间,所以这里加上一个调度队列显得更加的合理。后端对的图计算库也不一定是tugraph,例如节点重要性、节点社区这些计算结果存储在结构化数据库中比较好。