Apache AGE中的图

07-09 1609阅读

图由一组点和边组成,其中每个节点和边都具有属性映射。点是图的基本对象,可以独立于图中的其他任何对象存在。边创建了两个点之间的有向连接。

创建图

要创建图,可以使用 ag_catalog 命名空间中的 create_graph 函数。

create_graph()

语法:create_graph(graph_name);

返回:

void

参数:

NameDescription
graph_name要创建的图的名称

考虑事项:

  • 此函数不会返回任何结果。如果没有错误消息,则图已创建。
  • 图所需的表会自动创建。

    示例:

    SELECT * FROM ag_catalog.create_graph('graph_name');

    删除图

    要删除图,可以使用位于 ag_catalog 命名空间中的 drop_graph 函数。

    drop_graph()

    语法:drop_graph(graph_name, cascade);

    返回:

    void

    参数:

    NameDescription
    graph_name要删除的图的名称
    cascade一个布尔值,如果为真,则删除依赖于该图的标签和数据。

    考虑事项

    • 此函数不会返回任何结果。如果没有错误消息,则图已被删除。
    • 建议将 cascade 选项设置为 true,否则必须使用 SQL DDL 命令手动删除图中的所有内容。

      示例:

      SELECT * FROM ag_catalog.drop_graph('graph_name', true);

      图在 Postgres 中的存储方式

      使用 AGE 创建图时,将为每个独立图生成一个 Postgres 命名空间。可以在 ag_catalog 命名空间中的 ag_graph 表中看到创建的图的名称和命名空间:

      SELECT create_graph('new_graph');
      NOTICE:  graph "new_graph" has been created
       create_graph 
      --------------
      (1 row)
      SELECT * FROM ag_catalog.ag_graph;
         name    | namespace 
      -----------+-----------
       new_graph | new_graph
      (1 row)
      

      创建图后,会在图的命名空间下创建两个表来存储顶点和边:_ag_label_vertex 和 _ag_label_edge。这些表将是任何新顶点或边标签的父表。下面的查询显示了如何检索数据库中所有图的边和顶点标签。

      -- 在创建新顶点标签之前。
      SELECT * FROM ag_catalog.ag_label;
             name       | graph | id | kind |          relation          |        seq_name         
      ------------------+-------+----+------+----------------------------+-------------------------
       _ag_label_vertex | 68484 |  1 | v    | new_graph._ag_label_vertex | _ag_label_vertex_id_seq
       _ag_label_edge   | 68484 |  2 | e    | new_graph._ag_label_edge   | _ag_label_edge_id_seq
      (2 rows)
      -- 创建新的顶点标签。
      SELECT create_vlabel('new_graph', 'Person');
      NOTICE:  VLabel "Person" has been created
       create_vlabel 
      ---------------
       
      (1 row)
      -- 创建新顶点标签后。
      SELECT * FROM ag_catalog.ag_label;
             name       | graph | id | kind |          relation          |        seq_name         
      ------------------+-------+----+------+----------------------------+-------------------------
       _ag_label_vertex | 68484 |  1 | v    | new_graph._ag_label_vertex | _ag_label_vertex_id_seq
       _ag_label_edge   | 68484 |  2 | e    | new_graph._ag_label_edge   | _ag_label_edge_id_seq
       Person           | 68484 |  3 | v    | new_graph."Person"         | Person_id_seq
      (3 rows)
      

      每当使用 create_vlabel() 函数创建顶点标签时,都会在 new_graph 的命名空间中生成一个新表:new_graph.""。对于 create_elabel() 函数创建边标签也是同样的情况。使用 Cypher 创建顶点和边会自动创建这些表。

      -- 创建两个顶点和一个边。
      SELECT * FROM cypher('new_graph', $$
      CREATE (:Person {name: 'Daedalus'})-[:FATHER_OF]->(:Person {name: 'Icarus'})
      $$) AS (a agtype);
       a 
      ---
      (0 rows)
      -- 显示新创建的表。
      SELECT * FROM ag_catalog.ag_label;
             name       | graph | id | kind |          relation          |        seq_name         
      ------------------+-------+----+------+----------------------------+-------------------------
       _ag_label_vertex | 68484 |  1 | v    | new_graph._ag_label_vertex | _ag_label_vertex_id_seq
       _ag_label_edge   | 68484 |  2 | e    | new_graph._ag_label_edge   | _ag_label_edge_id_seq
       Person           | 68484 |  3 | v    | new_graph."Person"         | Person_id_seq
       FATHER_OF        | 68484 |  4 | e    | new_graph."FATHER_OF"      | FATHER_OF_id_seq
      (4 rows)
      

      注意:建议不要在保留图的命名空间中执行 DML 或 DDL 命令。

       使用公有云服务

      一些公有云的提供了免安装的数据库服务,无需自己部署。以MemFireCloud为例

      直接连接

      每个MemFire Cloud应用内置一个完整的Postgres数据库,你可以使用任何支持Postgres的工具来连接到数据库。你可以在控制台内的数据库设置中获取连接信息:

      1. 来到左侧菜单栏的 设置部分
      2. 点击数据库
      3. 启用数据库直连
      4. 找到应用的连接信息

      Apache AGE中的图

      开启直连

      白名单

      MemFire Cloud内置白名单功能,开启白名单后,只允许白名单内的IP地址段访问你的数据库。关闭白名单后,访问你数据库的IP地址不受限制,即任何IP地址只要有连接信息都可以与你的数据库进行直连。 在进行白名单配置时,要遵循CIDR规则。MemFire Cloud中白名单功能 默认是关闭的,需用户手动开启。

      Apache AGE中的图

      配置白名单

      通过数据库客户端连接数据库,可以执行图操作

      CREATE EXTENSION age;
      LOAD 'age';
      SET search_path = ag_catalog, "$user", public;
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]