janusgraph的数据模型

摘要:
janusgraph的数据模型---》参考1.简介janusgraph的数据模型,就是一数据结构中得图结构相似。所以janusgraph的数据schema主要定义在三个要素上:顶点,边,属性。edgelabel必须是唯一的,这个方法会返回一个builder,这个builder可以用来获取这种edgelabel的多度关系multiplicity,这个指标限定了每对之间edge最大的数量。关系类型的名称在图形中必须是唯一的,这意味着propertykeys和Edgelabels不能具有相同的名称。

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

gods图

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的,用来区分不同类型的vertice,比如 user 和 product。

2.2利用 makeVertexLabel(String).make() 来创建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 创建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()

 

免责声明:文章转载自《janusgraph的数据模型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇有赞 Flink 实时任务资源优化探索与实践【Oracle】利用level/Connect by 制作连续序列,并借此实现对缺失id的查找下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python 下五子棋

import math import tkinter from tkinter import * root = Tk() root.title('helloWorld') # 窗口尺寸 # root.geometry('500x500') # 固定尺寸 root.resizable(0, 0) # 棋盘中一格边长 boxSize = 60 # 横向格...

pyqt 窗口的调用

关于Pyqt窗口调用的格式 正常设计两个ui文件 正常Pyuic转成.py 在唯一的 run.py 函数里这样写即可实现窗口调用 import ... from Timer2 import Ui_Form # Timer2为主ui对于py文件的名字 from TimerSetup import Ui_Form as UISetup # Timer...

Jxl操作Excel设置背景、字体颜色、对齐方式、列的宽度(转)

原文出处:http://zhouhaitao.iteye.com/blog/1842769 最近项目中需要用到导出Excel文件,以下是我写了一个通过jxl操作Excel的例子,熟悉Jxl的使用。 有一个比较难以处理的问题就是自动适应文本宽度的问题。 以下我也在网上找了一下 :有如下的方式处理: CellView cellView = new CellVi...

vue+element-ui el-table表格(含表头)内容溢出省略,鼠标悬浮提示

第一种:参考:https://my.oschina.net/u/3455362/blog/4674804 <template> <div class="test"> <el-table :data="gridData" border stripe style=" 100%"> &...

【转】C# WinForm中的Label如何换行

        第一种是把Label的AutoSize属性设为False,手动修改Label的大小.这样的好处是会因内容的长度而自动换行,但是当内容的长度超过所设定的大小时,多出的内容就会无法显示.因此,这种方法适合于基本确定内容长度的时候使用.         第二种是把Label的Dock设为FILL,同时将AutoSize属性设为False,这种方法...

el-select+el-tree仿TreeSelect组件

<!--el-select+el-tree --> <template>   <el-select     ref="select"     popper-class="TREE_SELECT_POPPER"     :value="showLabel"     :size="size"     :placeholder="p...