janusgraph的数据模型
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 ( |
Geoshape |
Geographic shape like point, circle or box |
UUID |
Universally unique identifier ( |
在创建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的数据模型的更多相关文章
- JanusGraph入门,schema及数据模型
5.Schema和数据建模 每个JanusGraph都有一个schema,该schema由edge labels,property keys,和vertex组成.JanusGraph schema可以 ...
- 主流图库对比以及JanusGraph入门
1.Overall Comparison Name Neo4j JanusGraph Giraph Jena 1.Compute Framework Yes Yes Yes 2.External Co ...
- JanusGraph : 图和图数据库的简介
JanusGraph:图数据库系统简介 图(graph)是<数据结构>课中第一次接触到的一个概念,它是一种用来描述现实世界中个体和个体之间网络关系的数据结构. 为了在计算机中存储图,< ...
- JaunsGraph数据模型
JanusGraph采用邻接表(adjacency list)的方式存储图,也即图以顶点(vertex)和其邻接表组成.邻接表中保存某个顶点的所有入射边(incident edges). 通过将图采用 ...
- JanusGraph的schema及数据建模
每个JanusGraph都有一个schema,该schema由edge labels, property keys和vertex labels组成.JanusGraph的schema可以显式或隐式创建 ...
- MongoDB学习笔记~数据模型属性为集合时应该为它初始化
回到目录 今天要说一下技术点,我们在设计mongodb的数据模型时,如果属性是数组或者集合类型,我们在模型初始化时,需要为它们初始化一下,否则在数据库里将会被存储为NULL,当被存储为NULL时,我们 ...
- 从零自学Hadoop(20):HBase数据模型相关操作上
阅读目录 序 介绍 命名空间 表 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...
- Entity Framework 教程——创建实体数据模型
创建实体数据模型: 本文将带你创建实体数据模型(EDM)SchoolDB数据库和理解基础建设模块. 实体数据模型(EDM)是用于描述实体之间关系的一种模型,以下将使用Visual Studio 201 ...
- ZooKeeper:数据模型
ZooKeeper数据模型 ZNode ZNode 分类 Stat Watcher Watcher工作原理 Watcher事件说明 Watcher注册 事件发布 示例 ZooKeeper 数据模型 整 ...
随机推荐
- GreenPlum 大数据平台--segment 失效问题排查
01,segment 检查一: 在master节点上检查失效的segment 正常情况下: :::: gpstate:greenplum01:gpadmin-[INFO]:-Starting gpst ...
- C# HTTP系列10 form表单的enctype属性
系列目录 [已更新最新开发文章,点击查看详细] 在ASP.NET编程中经常遇到下面的代码片段,将人员信息以表单方式提交到后台程序并保存到服务器与数据库中. <form action=&q ...
- Java程序进行调优及监控
Java 应用性能的瓶颈点非常多,比如磁盘.内存.网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等.笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层.数据库层 ...
- ASP.NET Core2使用Autofac实现IOC依赖注入竟然能如此的优雅简便(转载)
原文地址:https://www.cnblogs.com/Andre/p/9604759.html 初识ASP.NET Core的小伙伴一定会发现,其几乎所有的项目依赖都是通过依赖注入方式进行链式串通 ...
- HTML连载26-谷歌开发者工具其它作用&CSS继承性
一.谷歌开发者工具其他特性(谷歌浏览器快捷键F12) (1)元素选择, 在里面我们可以看到某些行的具体代码 (2)查看源代码 (3)该元素的样式显示,我们可以看到我们选中的元素的具体样式属性,可以在里 ...
- JavaScript 正则表达式匹配成功后的返回结果
原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79005604 使用正则表达式EDIT 正则表达式可以被用于RegExp的exec ...
- 目标检测算法之Fast R-CNN和Faster R-CNN原理
一.Fast R-CNN原理 在SPPNet中,实际上特征提取和区域分类两个步骤还是分离的.只是使用ROI池化层提取了每个区域的特征,在对这些区域分类时,还是使用传统的SVM作为分类器.Fast R- ...
- python学习--大数据与科学计算第三方库简介
大数据与科学计算 库名称 简介 pycuda/opencl GPU高性能并发计算 Pandas python实现的类似R语言的数据统计.分析平台.基于NumPy和Matplotlib开发的,主要用于 ...
- vue基础之data
使用 调用data onLoad(option) { _self = this; _self.$data.xxxx = "te"; } 绑定节点 元素~~~~ <input ...
- Dos.ORM修改数据遇到的问题
2019年11月6日,今天使用Dos.ORM进行数据的批量修改,出现修改一条数据造成所有数据相应状态改变的情况,代码如下: 按照一步步调试的方式,排查出原因:生成的orm实体类缺少 主键 的标识,该原 ...