美文网首页JanusGraph
JanusGraph---Advanced Schema

JanusGraph---Advanced Schema

作者: zlcook | 来源:发表于2017-10-30 00:08 被阅读95次

    Static Vertices

    • 对于加载到图中后不希望被改变的顶点,应该定义为static。
    • 将顶点label定义成static,那么具有该label的所有顶点在定义它的事务完成后,就不可以在改变。
    mgmt = graph.openManagement()
    tweet = mgmt.makeVertexLabel('tweet').setStatic().make()
    mgmt.commit()
    

    Edge and Vertex TTL

    • 顶点和边可以配置time-to-live (TTL).当时间到达后就会从图中移除。
    • 作用案例:对于一些临时数据,可以使用TTL。
    • 支持该特性的数据库,目前其他数据库不支持。因为下面两种支持Cell级的TTL。
      • Cassandra
      • HBase

    Edge TTL

    mgmt = graph.openManagement()
    visits = mgmt.makeEdgeLabel('visits').make()
    mgmt.setTTL(visits, Duration.ofDays(7))
    mgmt.commit()
    
    • 同一个label标识的边具有相同TTL。
    • 对边做修改(只能修改名称)后会重置TTL
    • TTL可以被修改
    • 修改一个边label的TTL会影响集群中所有label,但是需要时间去传递修改,所以在同一时间有可能存在相同label具有不同TTL的情况。
      *需要数据库支持Cell 级TTL

    Property TTL

    mgmt = graph.openManagement()
    sensor = mgmt.makePropertyKey('sensor').cardinality(Cardinality.LIST).dataType(Double.class).make()
    mgmt.setTTL(sensor, Duration.ofDays(21))
    mgmt.commit()
    
    • 和Edge TTL一样:相同key的property具有相同TTL,修改property会重置TTL,TTL修改后要想产生全局影响需要一些时间。
      *需要数据库支持Cell 级TTL

    Vertex TTL

    mgmt = graph.openManagement()
    tweet = mgmt.makeVertexLabel('tweet').setStatic().make()
    mgmt.setTTL(tweet, Duration.ofHours(36))
    mgmt.commit()
    
    • 相同label的顶点具有同样的TTL。且只有static的顶点label才可以设置TTL
    • 顶点的TTL会作用到其Edge和Property,所以顶点被删除时其Edge和Property都会被删除。
    • 需要数据库支持数据库级别的TTL

    Multi-Properties

    • JanusGraph中的属性可以定义List、Set基数,所以一个顶点可以具有多个相同key的属性。
    • JanusGraph可以为属性提供注解属性。
    • 案例:为作者属性添加注解属性以表明作者头衔。
    mgmt = graph.openManagement()
    mgmt.makePropertyKey('name').dataType(String.class).cardinality(Cardinality.LIST).make()
    mgmt.commit()
    v = graph.addVertex()
    p1 = v.property('name', 'Dan LaRocque')
    p1.property('source', 'web')
    p2 = v.property('name', 'dalaro')
    p2.property('source', 'github')
    graph.tx().commit()
    v.properties('name')
    ==> Iterable over all name properties
    

    单向边

    • 占用少的存储空间
    • 只可以从out-going方向遍历单向边,注意不是out-vertex。
    • 使用位置:正常的边都是用在2个顶点上,但是单向边out是被用在边和属性上,in被用在顶点上。
    • 当单向边的in-vertexs被删除时,单向边并不会被删除,
    • Note, that unidirected edges do not get automatically deleted when their in-vertices are deleted. The user must ensure that such inconsistencies do not arise or resolve them at query time by explicitly checking vertex existence in a transaction. See the discussion in Section 29.2.2, “Ghost Vertices” for more information.
    mgmt = graph.openManagement()
    mgmt.makeEdgeLabel('author').unidirected().make()
    mgmt.commit()
    user = graph.addVertex()
    book = graph.addVertex()
    author = graph.addVertex()
    user.addE('knows', book).property('author', author)
    在user到book的knows边上加了一个单向边author指向author节点,从而可以存储user的相关信息。
    

    相关文章

      网友评论

        本文标题:JanusGraph---Advanced Schema

        本文链接:https://www.haomeiwen.com/subject/uqgypxtx.html