在 GKE 上使用 Bigtable 部署 JanusGraph

图表数据库可为数据实体及其之间的关系建模,从而帮助您发掘数据洞见。JanusGraph 是一个图表数据库,支持处理大量数据。本页介绍了一些概念,可帮助您在 Google Cloud 上运行 JanusGraph,并使用 Google Kubernetes Engine 作为编排平台,使用 Bigtable 作为存储后端。

本文档适用于有兴趣使用 Bigtable 作为存储后端在Google Cloud 上运行 JanusGraph 图表数据库的系统架构师、数据库管理员和 DevOps 专业人员。本教程假定您熟悉 Google Kubernetes Engine (GKE)、Kubernetes Pod、BigtableElasticsearch

概览

在图表术语中,实体称为“节点”或“顶点”,它们之间的关系称为“边”。在 JanusGraph 中,顶点和边都可以具有通过属性提供的其他关联数据。

属性图表示例。

上图是属性图表的一个示例。

图表数据库可帮助您为各种网域和活动建模:

  • 社交网络
  • 金融交易(用于欺诈分析)
  • 物理或虚拟系统网络

创建图表数据库时,有时会创建数百万甚至数十亿个顶点和边。当您使用 JanusGraph 并将 Bigtable 作为底层存储层时,您可以执行快速查询(称为“图表遍历”),并根据所需的大小和吞吐量独立扩缩存储层。JanusGraph 还使用可插入的索引后端为顶点和边属性提供全文索引。

您可以在 GKE 上部署可伸缩的 JanusGraph 基础架构,使用 Elasticsearch 作为 StatefulSet 中的 Pod 中运行的索引后端,并使用 Bigtable 作为存储后端。完成后,您可以遍历图表数据中存在的关系。

下图展示了这些元素是如何组合在一起的。

在 GKE 上部署使用 Bigtable 的 JanusGraph

上图显示了使用 Elasticsearch 和 Bigtable 在 GKE 上部署 JanusGraph。

Bigtable 中的 JanusGraph 数据

图表数据由 JanusGraph 存储为相邻列表。每行表示一个顶点、任何相邻的顶点(边)以及有关顶点和边的属性元数据。行键是顶点的唯一标识符。顶点与另一顶点以及任何进一步定义关系的属性之间的关系存储为边或边属性列。根据 Bigtable 最佳做法,列限定符和列值都会存储定义边缘的数据。通过再次使用列限定符和列值来定义每个顶点属性,将这些属性都存储为单独的列。

下图展示了此存储结构。

JanusGraph 相邻列表存储结构。

该图显示了小型图表片段的逻辑存储结构,其中包含两个顶点行的逻辑详细信息。在该图中,两个示例行表示两个顶点。第一个顶点标有单个顶点属性,并按两个单独的边与其他两个顶点相关。第二个顶点包含带有两个属性和一个边的列。

下图显示了顶点边逻辑数据模型,它提供了有关边或边属性列的列限定符和值的一些详细信息。

JanusGraph 边和边属性列。

对于每个相邻顶点,列存储有关该边的元数据。列限定符包含有关边关系以及边方向的元数据,还包含指向相邻顶点的指针。列值包含边标签以及任何其他边属性。由于可按任意方向采用遍历,因此边会存储两次,一次用于边关系的每个端。双向边存储可显著提高遍历性能,但由于存在额外存储空间和非原子边变更的冗余,因此需要权衡取舍。

下图为顶点属性列的逻辑数据模型。

属性列的 JanusGraph 列值。

上图详细介绍了边列的列限定符和值。

每个顶点属性都存储为单独的列。列限定符是属性键的唯一标识符。列值同时包含属性的标识符和属性值。

JanusGraph 还依赖于 Bigtable 的行和列限定符的字典顺序来增强查询性能。

后续步骤