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

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

 

   

janusgraph的数据模型的更多相关文章

  1. JanusGraph入门,schema及数据模型

    5.Schema和数据建模 每个JanusGraph都有一个schema,该schema由edge labels,property keys,和vertex组成.JanusGraph schema可以 ...

  2. 主流图库对比以及JanusGraph入门

    1.Overall Comparison Name Neo4j JanusGraph Giraph Jena 1.Compute Framework Yes Yes Yes 2.External Co ...

  3. JanusGraph : 图和图数据库的简介

    JanusGraph:图数据库系统简介 图(graph)是<数据结构>课中第一次接触到的一个概念,它是一种用来描述现实世界中个体和个体之间网络关系的数据结构. 为了在计算机中存储图,< ...

  4. JaunsGraph数据模型

    JanusGraph采用邻接表(adjacency list)的方式存储图,也即图以顶点(vertex)和其邻接表组成.邻接表中保存某个顶点的所有入射边(incident edges). 通过将图采用 ...

  5. JanusGraph的schema及数据建模

    每个JanusGraph都有一个schema,该schema由edge labels, property keys和vertex labels组成.JanusGraph的schema可以显式或隐式创建 ...

  6. MongoDB学习笔记~数据模型属性为集合时应该为它初始化

    回到目录 今天要说一下技术点,我们在设计mongodb的数据模型时,如果属性是数组或者集合类型,我们在模型初始化时,需要为它们初始化一下,否则在数据库里将会被存储为NULL,当被存储为NULL时,我们 ...

  7. 从零自学Hadoop(20):HBase数据模型相关操作上

    阅读目录 序 介绍 命名空间 表 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...

  8. Entity Framework 教程——创建实体数据模型

    创建实体数据模型: 本文将带你创建实体数据模型(EDM)SchoolDB数据库和理解基础建设模块. 实体数据模型(EDM)是用于描述实体之间关系的一种模型,以下将使用Visual Studio 201 ...

  9. ZooKeeper:数据模型

    ZooKeeper数据模型 ZNode ZNode 分类 Stat Watcher Watcher工作原理 Watcher事件说明 Watcher注册 事件发布 示例 ZooKeeper 数据模型 整 ...

随机推荐

  1. GreenPlum 大数据平台--segment 失效问题排查

    01,segment 检查一: 在master节点上检查失效的segment 正常情况下: :::: gpstate:greenplum01:gpadmin-[INFO]:-Starting gpst ...

  2. C# HTTP系列10 form表单的enctype属性

    系列目录     [已更新最新开发文章,点击查看详细] 在ASP.NET编程中经常遇到下面的代码片段,将人员信息以表单方式提交到后台程序并保存到服务器与数据库中. <form action=&q ...

  3. Java程序进行调优及监控

    Java 应用性能的瓶颈点非常多,比如磁盘.内存.网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等.笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层.数据库层 ...

  4. ASP.NET Core2使用Autofac实现IOC依赖注入竟然能如此的优雅简便(转载)

    原文地址:https://www.cnblogs.com/Andre/p/9604759.html 初识ASP.NET Core的小伙伴一定会发现,其几乎所有的项目依赖都是通过依赖注入方式进行链式串通 ...

  5. HTML连载26-谷歌开发者工具其它作用&CSS继承性

    一.谷歌开发者工具其他特性(谷歌浏览器快捷键F12) (1)元素选择, 在里面我们可以看到某些行的具体代码 (2)查看源代码 (3)该元素的样式显示,我们可以看到我们选中的元素的具体样式属性,可以在里 ...

  6. JavaScript 正则表达式匹配成功后的返回结果

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79005604 使用正则表达式EDIT 正则表达式可以被用于RegExp的exec ...

  7. 目标检测算法之Fast R-CNN和Faster R-CNN原理

    一.Fast R-CNN原理 在SPPNet中,实际上特征提取和区域分类两个步骤还是分离的.只是使用ROI池化层提取了每个区域的特征,在对这些区域分类时,还是使用传统的SVM作为分类器.Fast R- ...

  8. python学习--大数据与科学计算第三方库简介

    大数据与科学计算  库名称 简介 pycuda/opencl GPU高性能并发计算 Pandas python实现的类似R语言的数据统计.分析平台.基于NumPy和Matplotlib开发的,主要用于 ...

  9. vue基础之data

    使用 调用data onLoad(option) { _self = this; _self.$data.xxxx = "te"; } 绑定节点 元素~~~~ <input ...

  10. Dos.ORM修改数据遇到的问题

    2019年11月6日,今天使用Dos.ORM进行数据的批量修改,出现修改一条数据造成所有数据相应状态改变的情况,代码如下: 按照一步步调试的方式,排查出原因:生成的orm实体类缺少 主键 的标识,该原 ...