• janusgraph的数据模型


    janusgraph的数据模型---》参考

    gods图

      1.简介

      janusgraph的数据模型,就是一数据结构中得图结构相似。所以janusgraph的数据schema主要定义在三个要素上:顶点,边,属性。上面的god图中,红色的点就是顶点,点与点之间的线就是边,在点和边上的方框中写的就是点和边的属性

      在janusgraph中,对schema进行操作都要打开

      gremlin> mgmt=graph.openManagement()

      ==>org.janusgraph.graphdb.database.management.ManagementSystem@2484dbb7

      2.对点的标签进行操作(Vertex Label)

        2.1 vertice label描述的是vertice的语义,不过vertice label是optional的,用来区分不同类型的vertice,比如 user 和 product。

        2.2 利用 makeVertexLabel(String).make() 来创建vertice label  
        2.3 vertice label必须保持全局唯一性
        查询出所有的vertice label

    mgmt.vertexLabels

        增加一个vertice label 

    mgmt = graph.openManagement()
    person = mgmt.makeVertexLabel('person').make()
    mgmt.commit()
    // Create a labeled vertex
    person = graph.addVertex(label, 'person')
    // Create an unlabeled vertex
    v = graph.addVertex()
    graph.tx().commit()

       3.对Edge label进行操作

        3.1在一个事务中,用makeEdgeLabel(String) 来定义一个edge label。edge label必须是唯一的,这个方法会返回一个 builder,这个 builder 可以用来获取这种edge label的多度关系multiplicity,这个指标限定了每对(pair)之间edge最大的数量。

        3.2 创建edge label 中有一个属性 Multiplicity ,通过设置这个属性值来限定每对(pair)之间edge最大的数量。

          MULTI,SIMPLE,MANY2ONE,ONE2MANY,ONE2ONE

        3.3 如果在创建过程中不进行设置,默认使用MULTI

    mgmt = graph.openManagement()
    follow = mgmt.makeEdgeLabel('follow').multiplicity(MULTI).make()
    mother = mgmt.makeEdgeLabel('mother').multiplicity(MANY2ONE).make()
    mgmt.commit()

       4.Property keys

        属性Property的定义在顶点点和边上,Property是key-value的形式存在

        通过 makePropertyKey(String) 方法来创建Property key,属性名应该尽可能避免使用空格和特殊字符

        Native JanusGraph Data Types

    NameDescription

    String

    Character sequence

    Character

    Individual character

    Boolean

    true or false

    Byte

    byte value

    Short

    short value

    Integer

    integer value

    Long

    long value

    Float

    4 byte floating point number

    Double

    8 byte floating point number

    Date

    Specific instant in time (java.util.Date)

    Geoshape

    Geographic shape like point, circle or box

    UUID

    Universally unique identifier (java.util.UUID)

      在创建Property是需要注意 Property key Data Type 和 Property Key Cardinality

      Property key Data Type

      每个属性的key和value都有自己的数据类型,必须是上述表格的数据类型的一种,通过dataType(Class)来定义数据类型。

      数据类型可以声明为Object.class ,但是如果这样使用的话,会造成空间的浪费,同时在进行数据导入时janusgraph无法帮我我们判断数据类型是否符合要求

      Property Key Cardinality

      使用方法cardinality(Cardinality)方法来定义某个顶点的某个属性的基底

      在janusgraph的图数据库中有三个选择

        SINGLE:每一个元素对于这个key只能有一个value,比如 birthDate 就是一个single基底,因为每个人最多只能有一个生日。

        LIST:每个元素对于这个key可以有任意数量的值,比如我们建模传感器(sensor),其有一个属性是 sensorRecords,那么,对于这个属性,可能有一系列的值。注意,LIST是允许有重复元素的。

        SET: 与LIST相同,不同的是,SET不允许有重复的元素。
      默认的cardinality是single。注意,对于边属性来说,property key的基底始终是single。
      

    mgmt = graph.openManagement()
    birthDate = mgmt.makePropertyKey('birthDate').dataType(Long.class).cardinality(Cardinality.SINGLE).make()
    name = mgmt.makePropertyKey('name').dataType(String.class).cardinality(Cardinality.SET).make()
    sensorReading = mgmt.makePropertyKey('sensorReading').dataType(Double.class).cardinality(Cardinality.LIST).make()
    mgmt.commit()

       5.Relation Type

      Edge labels和property keys共同称为Relation Types。关系类型的名称在图形中必须是唯一的,这意味着property keys和Edge labels不能具有相同的名称。JanusGraph API中有一些方法可以查询是否存在或检索包含property keys和Edge labels的关系类型 

    mgmt = graph.openManagement()
    if (mgmt.containsRelationType('name'))
        name = mgmt.getPropertyKey('name')
    mgmt.getRelationTypes(EdgeLabel.class)
    mgmt.commit()

     

       
  • 相关阅读:
    静态方法中访问类的实例成员
    Java Interger类,两对整数明明完全一样,为何一个输出true,一个输出false
    使用类的静态字段和构造函数,跟踪某个类所创建对象的个数
    Java基础笔记3
    Java 统计单词频数
    重拾javaweb(假期后第一次web测试)
    人月神话读后感(三)
    人月神话读后感(二)
    人月神话读后感(一)
    七天开发安卓软件(七)
  • 原文地址:https://www.cnblogs.com/learndata/p/10559863.html
Copyright © 2020-2023  润新知