修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

申请证书

证书详情

Please complete this required field.

  • Ultipa Graph V4

Standalone

Please complete this required field.

Please complete this required field.

服务器的MAC地址

Please complete this required field.

Please complete this required field.

取消
申请
ID
产品
状态
核数
申请天数
审批时间
过期时间
MAC地址
申请理由
审核信息
关闭
基础信息
  • 用户昵称:
  • 手机号:
  • 公司名称:
  • 公司邮箱:
  • 地区:
  • 语言:
修改密码
申请证书

当前未申请证书.

申请证书
Certificate Issued at Valid until Serial No. File
Serial No. Valid until File

Not having one? Apply now! >>>

ProductName CreateTime ID Price File
ProductName CreateTime ID Price File

No Invoice

v5.0
搜索
    v5.0

      HDC投影

      概述

      HDC投影驻留在HDC(高密度计算)服务器的内存中,其中包含从分片服务器物理存储中加载的图集的全部或部分数据。

      HDC投影支持所有图算法和数据检索图查询。

      管理HDC投影

      显示HDC投影

      获取当前图集的所有HDC投影信息:

      hdc.graph.show()
      

      获取其中一个特定HDC投影信息,如名为hdcGraph_1的投影:

      hdc.graph.show("hdcGraph_1")
      

      语句返回表_projectList,包含以下字段:

      字段
      描述
      project_name 投影名称
      project_type 投影类型;HDC投影的类型为hdc
      graph_name 加载数据的源图集名称
      status 投影的当前状态,包括DONECREATINGFAILEDUNKNOWN
      stats 投影包含的点边统计数据,包括schema、属性和总数
      is_default 说明该投影是否为当前图集的默认HDC投影
      hdc_server_name 托管投影的HDC服务器名称
      hdc_server_status HDC服务器的当前状态,包括ACTIVEDEAD
      config HDC投影的配置

      当使用hdc.graph.show("<projectName>")获取特定投影信息时,会额外返回两个表:

      • _graph_from_<hdcName>:显示<hdcName>上创建的所有HDC投影
      • _algoList_from_<hdcName>:列出安装在<hdcName>上的所有算法

      其中,<hdcName>是投影所在的HDC服务器名称。

      创建HDC投影

      使用语句hdc.graph.create().to()可在HDC服务器上创建一个当前图集的内存投影。创建过程以作业形式执行,稍后可使用语句show().job(<id?>)来验证投影是否创建成功。

      hdc.graph.create("<projectName>", {
        nodes: {
          "<schema1?>": ["<property1?>", "<property2?>", ...],
          "<schema2?>": ["<property1?>", "<property2?>", ...],
          ...
        },
        edges: {
          "<schema1?>": ["<property1?>", "<property2?>", ...],
          "<schema2?>": ["<property1?>", "<property2?>", ...],
          ...
        },
        direction: "<edgeDirection?>",
        load_id: <boolean?>,
        update: "<dataSyncMode>",
        query: "query",
        default: <boolean?>
      }).to("<hdcName>")
      
      方法 参数 描述 可选
      create() <projectName> 投影名称。HDC服务器上的HDC投影名称必须唯一,且不可与同一图集下的分布式投影重名
      配置映射 nodes 根据schema和属性指明待投影的点。默认加载_uuid,可通过load_id配置是否加载_id。设置为"*": ["*"]时加载所有点
      edges 根据schema和属性指明待投影的边。默认加载所有系统属性。设置为"*": ["*"]时加载所有边
      direction 由于每条边在物理空间存储了两次(终点和一条入边以及起点和一条出边),您可选择使用in只投影入边,使用out只投影出边,或使用undirected(默认项)投影入边和出边。注意,使用inout会在计算过程中将图遍历限制为指定的方向
      load_id 设置为false时,投影各点不加载_id值以节约内存空间;默认为true
      update 设置数据同步模式。目前仅支持static模式(默认),在该模式下,物理存储中的任何数据变更均不会同步至投影中
      query 这是一个保留参数,用于设置一个查询语句来指定要投影的数据。目前仅可设置为query
      default 设置为true时,指定本投影为当前图集的默认HDC投影;默认为false
      to() <hdcName> 托管投影的HDC服务器名称

      将当前图集全部投影到hdc-server-1上并命名为hdcGraph

      hdc.graph.create("hdcGraph", {
        nodes: {"*": ["*"]},
        edges: {"*": ["*"]},
        direction: "undirected",
        load_id: true,
        update: "static",
        query: "query",
        default: true
      }).to("hdc-server-1")
      

      将当前图集投影到hdc-server-1上并命名为hdcGraph_1,其中点@account@movie仅投影指定属性,边 @rate仅投影入边,且不加载点的_id值:

      hdc.graph.create("hdcGraph_1", {
        nodes: {
          "account": ["name", "gender"],
          "movie": ["name", "year"]
        },
        edges: {"rate": ["*"]},
        direction: "in",
        load_id: false,
        update: "static",
        query: "query",
        default: false
      }).to("hdc-server-1")
      

      删除HDC投影

      使用语句hdc.graph.drop()可以从HDC服务器上删除当前图集的HDC投影。

      以下示例删除了名为hdcGraph_1的HDC投影:

      hdc.graph.drop("hdcGraph_1")
      

      示例图集和投影

      在一个空图集中,逐行运行以下UQL语句,创建示例图集:

      create().node_schema("entity").edge_schema("link")
      create().edge_property(@link, "weight", float)
      insert().into(@entity).nodes([{_id:"A"},{_id:"B"},{_id:"C"},{_id:"D"}])
      insert().into(@link).edges([{_from:"A", _to:"B", weight:1},{_from:"A", _to:"C", weight:1.5},{_from:"A", _to:"D", weight:0.5},{_from:"B", _to:"C", weight:2},{_from:"C", _to:"D", weight:0.5}])
      

      为全图创建名为hdcGraph的HDC投影:

      hdc.graph.create("hdcGraph", {
        nodes: {"*": ["*"]},
        edges: {"*": ["*"]},
        direction: "undirected",
        load_id: true,
        update: "static",
        query: "query",
        default: false
      }).to("hdc-server-1")
      

      执行查询

      使用语法exec{<query>} on <projectName>在HDC投影上执行UQL查询。注意,仅支持在HDC投影上执行数据检索类查询。

      hdcGraph上执行ab()查询:

      exec{
        ab().src({_id == "A"}).dest({_id == "C"}).depth(2) as p
        return p
      } on hdcGraph
      

      结果:

      p
      A -> B -> C
      A -> D <- C

      hdcGraph上执行khop()查询:

      exec{
        khop().src({_id == "A"}).depth(1).direction(right) as n
        return count(n)
      } on hdcGraph
      

      结果:

      count(n)
      3

      数据写入语句无法在HDC投影上执行。例如以下查询会引发报错,报错信息显示不支持点插入操作。

      exec{
        insert().into(@entity).nodes([{_id: "E"}])
      } on hdcGraph
      

      执行算法

      HDC算法在HDC投影上执行。HDC算法支持以下六种执行模式:文件回写、数据库回写、统计回写、完整返回、流式返回和统计返回。

      回写模式

      使用语法algo().params().write()在HDC投影上以回写模式(文件回写、数据库回写和统计回写)执行算法。params()方法必须包含参数project以指定投影名称。

      文件回写

      在投影hdcGraph上执行度中心性算法,计算所有点的出度并将结果回写到文件degree.txt中:

      algo(degree).params({
        project: "hdcGraph",
        return_id_uuid: "id",
        direction: "out"
      }).write({
        file: {
          filename: "degree.txt"
        }
      })
      

      结果:

      _id,degree_centrality
      D,0
      B,1
      A,3
      C,1
      

      数据库回写

      在投影hdcGraph上执行度中心性算法,计算所有点的度并将结果回写到点属性degree中:

      algo(degree).params({
        project: "hdcGraph"
      }).write({
        db: {
          property: "degree"
        }
      })
      

      统计回写

      在投影hdcGraph上执行三角形计算算法,计算图中三角形的个数并将统计概述写至作业中:

      algo(triangle_counting).params({
        project: "hdcGraph",
        result_type: 1
      }).write({
        stats: {}
      })
      

      结果:

      triangle_count
      2

      返回模式

      使用语法exec{<algo>} on <projectName>在HDC投影上以返回模式(完整返回、流式返回和统计返回)执行算法。

      完整返回

      在投影hdcGraph上执行度中心性算法,计算所有点的出度并返回结果:

      exec{
        algo(degree).params({
          return_id_uuid: "id",
          direction: "out"
        }) as r
        return r
      } on hdcGraph
      

      结果:

      _id degree_centrality
      D 0
      B 1
      A 3
      C 1

      流式返回

      在投影hdcGraph上执行度中心性算法,计算所有点的出度并返回结果:

      exec{
        algo(degree).params({
          return_id_uuid: "id",
          direction: "out"
        }).stream() as r
        return r
      } on hdcGraph
      

      结果:

      _id degree_centrality
      D 0
      B 1
      A 3
      C 1

      统计返回

      在投影hdcGraph上执行三角形计算算法,计算图中三角形的个数并返回统计概述:

      exec{
        algo(triangle_counting).params({
          result_type: 1
        }).stats() as s
        return s
      } on hdcGraph
      

      结果:

      triangle_count
      2

      图遍历方向

      在创建HDC投影时,若direction选项设定为inout,图遍历会被对应限制在入边或出边上。若在查询或算法中遍历缺失的方向,则会引发报错或生成空结果。

      创建HDC投影hdcGraph_in_edges,其中包含所有点和入边:

      hdc.graph.create("hdcGraph_in_edges", {
        nodes: {"*": ["*"]},
        edges: {"*": ["*"]},
        direction: "in",
        load_id: true,
        update: "static",
        query: "query",
        default: false
      }).to("hdc-server-1")
      

      本条khop()查询试图在投影hdcGraph_in_edges上寻找出边(右向边),没有结果返回。

      exec{
        khop().src({_id == "A"}).depth(1).direction(right) as n
        return count(n)
      } on hdcGraph_in_edges
      

      结果:

      count(n)
      0

      本条查询中,度中心性算法计算投影hdcGraph_in_edges上所有点的出度,结果均为0。

      exec{
        algo(degree).params({
          return_id_uuid: "id",
          direction: "out"
        }) as r
        return r
      } on hdcGraph_in_edges
      

      结果:

      _id degree_centrality
      D 0
      B 0
      A 0
      C 0

      投影不包含点ID

      在创建HDC投影时,若load_id选项设定为false,则投影不包含点的_id值。若在查询或算法中引用了_id,则会引发报错或生成空结果。算法回写文件会用_uuid值替代_id值。

      创建HDC投影hdcGraph_no_id,其中不包含点的_id值:

      hdc.graph.create("hdcGraph_no_id", {
        nodes: {"*": ["*"]},
        edges: {"*": ["*"]},
        direction: "undirected",
        load_id: false,
        update: "static",
        query: "query",
        default: false
      }).to("hdc-server-1")
      

      本条ab()查询使用_id过滤投影hdcGraph_no_id上的点,由于投影不包含点的_id,所以引发报错:

      exec{
        ab().src({_id == "A"}).dest({_id == "C"}).depth(2) as p
        return p{*}
      } on hdcGraph_no_id
      

      度中心性算法计算投影hdcGraph_no_id上所有点的度,由于投影不包含点的_id值,结果中对应列的值均为空:

      exec{
        algo(degree).params({
          return_id_uuid: "id"
        }) as r
        return r
      } on hdcGraph_no_id
      

      结果:

      _id degree_centrality
      2
      2
      3
      3

      度中心性算法计算投影hdcGraph_no_id上所有点的度,并将结果回写至文件degree.txt上,其中点的_id被替换成_uuid

      algo(degree).params({
        project: "hdcGraph_no_id",
        return_id_uuid: "id"
      }).write({
        file: {
          filename: "degree.txt"
        }
      })
      

      结果:

      _uuid,degree_centrality
      288232575174967298,2
      3530824306881724417,2
      10016007770295238657,3
      12033620403357220866,3
      

      投影不包含属性

      如果创建HDC投影时未包含某些属性,则在查询或算法引用这些属性时会引发报错或生成空结果。

      创建HDC投影hdcGraph_no_weight,其中包含所有点以及边@link的系统属性:

      hdc.graph.create("hdcGraph_no_weight", {
        nodes: {"*": ["*"]},
        edges: {"link": []},
        direction: "undirected",
        load_id: true,
        update: "static",
        query: "query",
        default: false
      }).to("hdc-server-1")
      

      本条ab()查询在投影hdcGraph_no_weight上查找最短路径,以边属性@link.weight计算权重。由于weight属性缺失,查询会引发报错:

      exec{
        ab().src({_id == "A"}).dest({_id == "C"}).depth(2).shortest(@link.weight) as p
        return p
      } on hdcGraph_no_weight
      

      度中心性算法根据边属性@link.weight加权计算投影hdcGraph_no_weight上所有点的度。由于weight属性缺失,查询会引发报错:

      exec{
        algo(degree).params({
          edge_schema_property: "@link.weight"
        }) as r
        return r
      } on hdcGraph_no_weight
      
      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写