日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

janusgraph的数据模型

發(fā)布時間:2023/12/15 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 janusgraph的数据模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

janusgraph的數據模型---》參考

  1.簡介

  janusgraph的數據模型,就是一數據結構中得圖結構相似。所以janusgraph的數據schema主要定義在三個要素上:頂點,邊,屬性。上面的god圖中,紅色的點就是頂點,點與點之間的線就是邊,在點和邊上的方框中寫的就是點和邊的屬性

  在janusgraph中,對schema進行操作都要打開

  gremlin> mgmt=graph.openManagement()

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

  2.對點的標簽進行操作(Vertex Label)

    2.1vertice label描述的是vertice的語義,不過vertice label是optional的,用來區(qū)分不同類型的vertice,比如 user 和 product。

    2.2利用 makeVertexLabel(String).make() 來創(chuàng)建vertice label  
    2.3vertice 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 創(chuàng)建edge label 中有一個屬性 Multiplicity ,通過設置這個屬性值來限定每對(pair)之間edge最大的數量。

      MULTI,SIMPLE,MANY2ONE,ONE2MANY,ONE2ONE

    3.3 如果在創(chuàng)建過程中不進行設置,默認使用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)方法來創(chuàng)建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)

  在創(chuàng)建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()

   

總結

以上是生活随笔為你收集整理的janusgraph的数据模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。