修改密码

请输入密码
请输入密码 请输入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

      分布式投影

      概述

      分布式投影驻留在相应分片服务器的内存中,数据持久存储在这些服务器上。分布式投影可包含图集的全部或部分数据,支持图算法的执行,但不支持执行图数据查询。

      管理分布式投影

      显示分布式投影

      获取当前图集的所有分布式投影信息:

      show().project()
      

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

      字段
      描述
      project_name 投影名称
      project_type 投影类型;分布式投影的类型为pregel
      graph_name 加载数据的源图集名称
      status 投影的当前状态,包括DONECREATINGFAILEDUNKNOWN
      stats 每个分片的点边统计数据,包括当前图集的主副本addressedge_in_countedge_out_countnode_count
      config 分布式投影的配置

      创建分布式投影

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

      create().project(
        "<projectName>",
        {
          nodes: {
            "<schema1?>": ["<property1?>", "<property2?>", ...],
            "<schema2?>": ["<property1?>", "<property2?>", ...],
            ...
          },
          edges: {
            "<schema1?>": ["<property1?>", "<property2?>", ...],
            "<schema2?>": ["<property1?>", "<property2?>", ...],
            ...
          },
          direction: "<edgeDirection?>",
          load_id: <boolean?>
        }
      )
      
      方法 参数 Description 可选
      project() <projectName> 投影名称。同一数据库下,分布式投影名称必须唯一,且不可与同一图集下的HDC投影重名
      配置映射 nodes 根据schema和属性指定待投影的点。默认加载_uuid,可通过配置load_id选择是否加载_id。使用"*": ["*"]加载所有点
      edges 根据schema和属性指定待投影的边。默认加载所有系统属性。使用"*": ["*"]加载所有边
      direction 由于每条边在物理空间存储了两次(终点和一条入边以及起点和一条出边),您可选择使用in只投影入边,使用out只投影出边,或使用undirected(默认设置)投影入边和出边。请注意,使用inout会在计算过程中限制图遍历为指定方向
      load_id 设置为false时,投影各点不加载_id值以节约内存空间;默认为true

      将当前图集全部投影到分片服务器上并命名为distGraph

      create().project("distGraph", {
        nodes: {"*": ["*"]}, 
        edges: {"*": ["*"]},
        direction: "undirected",
        load_id: true
      })
      

      将当前图集投影到分片服务器上并命名为distGraph_1,其中点@account@movie仅投影指定属性,边@rate仅投影入边,且不加载点的_id值:

      create().project("distGraph_1", {
        nodes: {
          "account": ["name", "gender"],
          "movie": ["name", "year"]
        },
        edges: {"rate": ["*"]},
        direction: "in",
        load_id: false
      })
      

      删除分布式投影

      使用语句drop().project()可以从分片服务器上删除当前图集的分布式投影。

      以下示例删除了名为distGraph_1的分布式投影:

      drop().project("distGraph_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}])
      

      为全图创建名为distGraph的分布式投影:

      create().project("distGraph", {
        nodes: {"*": ["*"]}, 
        edges: {"*": ["*"]},
        direction: "undirected",
        load_id: true
      })
      

      执行算法

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

      文件回写

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

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

      结果:

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

      数据库回写

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

      algo(degree).params({
        project: "distGraph",
        return_id_uuid: "id",
        direction: "out"
      }).write({
        db: {
          property: "degree"
        }
      })
      

      图遍历方向

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

      创建分布式投影distGraph_in_edges,其中包含所有点和入边:

      create().project("distGraph_in_edges", {
        nodes: {"*": ["*"]}, 
        edges: {"*": ["*"]},
        direction: "in",
        load_id: true
      })
      

      度中心性算法计算投影distGraph_in_edges上所有点的出度,结果均为0:

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

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

      投影不包含点ID

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

      创建分布式投影distGraph_no_id,其中不包含点的_id值:

      create().project("distGraph_no_id", {
        nodes: {"*": ["*"]}, 
        edges: {"*": ["*"]},
        direction: "undirected",
        load_id: false
      })
      

      度中心性算法计算投影distGraph_no_id上所有点的度,并将结果回写到文件degree.txt中,由点的_uuid值替代点的_id值:

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

      _uuid,degree_centrality
      12033620403357220866,1
      10016007770295238657,3
      288232575174967298,0
      3530824306881724417,1
      

      投影不包含属性

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

      创建分布式投影distGraph_no_weight,其中包含所有点以及边的系统属性:

      create().project("distGraph_no_weight", {
        nodes: {"*": ["*"]}, 
        edges: {"link": []},
        direction: "undirected",
        load_id: true
      })
      

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

      algo(degree).params({
        project: "distGraph_no_weight",
        edge_property: "@link.weight"
      }).write({
        file: {
          filename: "degree.txt"
        }
      })
      
      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写