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

Name Description

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()

 

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM