在之前的文章中,我们介绍了标准化图存储文件格式 GraphAr 的设计思路、项目概况和应用场景。在本文中,我们将结合具体的例子,介绍如何使用其提供的 C++ SDK 快速上手 GraphAr。目前,GraphAr 已在 Github 开源,欢迎大家关注、贡献代码和加星星✨~开源地址:https://github.com/alibaba/GraphAr
什么是 GraphAr?
GraphAr(Graph Archive,简称 GAR)为图数据定义了一套标准化的、独立于计算/存储系统的文件格式,并提供了一系列接口用来生成、访问和转换这些格式化的文件。GraphAr 可以帮助各类图计算应用或现有系统方便快捷地构建和访问图数据,它既可以作为图计算应用的直接数据源,也可以服务于图数据的导入/导出和持久化存储,减少各类图系统之间协同工作的开销。下图展示了将 GraphAr 作为图数据归档格式应用在典型业务的场景:借助 GraphAr,用户可以选择需要的点和边数据快速组建一张图,用于后续处理如 GraphScope 图分析任务。
安装 GraphAr 的 C++ SDK 需要以下依赖:
- 支持 C++17 标准的编译器 (g++ >= 7.1 或 clang++ >= 5)
- CMake (>=3.5)
- make build utilities
- curl-devel (Linux) 或 curl (macOS)
在本地搭建环境,从 GraphAr 源码编译安装 C++ SDK 可参考如下步骤:
# 下载最新版本代码
$ git clone https://github.com/alibaba/GraphAr.git
# 更新 submodule
$ git submodule update --init
# 编译
$ cd GraphAr/cpp
$ mkdir build-release
$ cd build-release
$ cmake ..
$ make -j$(nproc)
# Install GraphAr C++ SDK
$ sudo make install
更详细的编译安装步骤请查阅 GraphAr 官方文档。
定义 GraphAr 元信息文件
GraphAr 将图的元信息和数据分别存储在不同的文件中。其中,元信息用一组 yaml 文件来描述:每个图实例对应一个图信息文件,图中每种类型的点/边对应一个点/边信息文件。这些 yaml 文件中定义了有关图数据存储在 GraphAr 中所需的全部必要信息。
以一个简单的名为 “ldbc_sample” 的图为例,由于它包含一种类型的点(person)和一种类型的边(person knows person),因此我们可以通过定义如下三个 yaml 文件来描述这张图的元信息。
ldbc_sample.graph.yml
name: ldbc_sample
vertices:
- person.vertex.yml
edges:
- person_knows_person.edge.yml
version: gar/v1
person.vertex.yml
label: person
chunk_size: 100
prefix: vertex/person/
property_groups:
- properties:
- name: id
data_type: int64
is_primary: true
file_type: parquet
- properties:
- name: firstName
data_type: string
is_primary: false
- name: lastName
data_type: string
is_primary: false
- name: gender
data_type: string
is_primary: false
file_type: parquet
version: gar/v1
person_knows_person.edge.yml
src_label: person
edge_label: knows
dst_label: person
chunk_size: 1024
src_chunk_size: