图架构最佳实践

本文档提供了有关如何定义图架构以提高图查询性能的最佳实践。

确定媒体资源定义的范围

属性是键值对,用于提供附加到节点或边的其他信息。我们建议您仅在节点或边中包含必要的属性,并避免使用 PROPERTIES ALL COLUMNS 语法或将节点或边表中的所有列附加到属性列表的默认语法。节点或边中包含过多的属性可能会导致图查询中出现不必要的列扫描,从而降低性能。

如需限制在节点或边定义中包含的属性,请在 CREATE PROPERTY GRAPH 语句中定义元素属性时使用 PROPERTIES 关键字。

以下节点表定义将 Person 节点表的属性限制为 idname

NODE TABLES (
  graph_db.Person PROPERTIES (id, name)
)

在图节点和边缘上定义主键和外键限制条件

BigQuery 可以使用节点表和边表上的主键和外键约束来优化图查询,从而减少不必要的表扫描。不过,BigQuery 不会对表强制执行主键或外键限制条件。如果您的应用无法保证引用完整性或主键的唯一性,那么使用主键或外键进行查询优化可能会导致查询结果不正确。

以下示例在节点表 PersonAccount 以及边表 PersonOwnAccount 上定义了主键和外键约束:

CREATE OR REPLACE TABLE graph_db.Person (
  id               INT64,
  name             STRING,
  birthday         TIMESTAMP,
  country          STRING,
  city             STRING,
  PRIMARY KEY (id) NOT ENFORCED
);

CREATE OR REPLACE TABLE graph_db.Account (
  id               INT64,
  create_time      TIMESTAMP,
  is_blocked       BOOL,
  nick_name        STRING,
  PRIMARY KEY (id) NOT ENFORCED
);

CREATE OR REPLACE TABLE graph_db.PersonOwnAccount (
  id               INT64 NOT NULL,
  account_id       INT64 NOT NULL,
  create_time      TIMESTAMP,
  PRIMARY KEY (id, account_id) NOT ENFORCED,
  FOREIGN KEY (id) references graph_db.Person(id) NOT ENFORCED,
  FOREIGN KEY (account_id) references graph_db.Account(id) NOT ENFORCED
);

后续步骤