JanusGraph 数据模型

JanusGraph以邻接列表格式存储图形,这意味着图形存储为顶点及其邻接列表的集合。顶点的邻接列表包含顶点的所有关联边(和属性)。

通过以邻接列表格式存储图形,JanusGraph确保将顶点的所有关联边和属性紧凑地存储在存储后端,从而加快遍历。缺点是每个边必须存储两次—一次用于边的每个端点。

此外,JanusGraph按排序键定义的顺序和边标签的排序顺序维护每个顶点的邻接列表。排序顺序可以使用以顶点为中心的索引高效地检索相邻列表的子集。

JanusGraph在支持Bigtable数据模型的任何存储后端中存储图形的邻接列表表示。

Bigtable Data Model

在Bigtable数据模型下,每个表都是行的集合。每一行都由一个键唯一地标识。每一行由任意(大,但有限)个单元格组成。单元格由列和值组成。单元格由给定行中的列唯一标识。Bigtable模型中的行称为“宽行”,因为它们支持大量的单元格,而这些单元格的列不必像关系数据库中所要求的那样预先定义。

JanusGraph对Bigtable数据模型有一个额外的要求:单元格必须按其列排序,列范围指定的单元格子集必须可以有效地检索(例如,通过使用索引结构、跳过列表或二进制搜索)。

另外,一个特定的Bigtable实现可以保持行按其键的顺序排序。JanusGraph可以利用这样的密钥顺序来有效地划分图,从而为非常大的图提供更好的加载和遍历性能。然而,这不是一个要求。

JanusGraph Data Layout

JanusGraph在底层存储后端将每个相邻列表存储为一行。(64位)顶点id(JanusGraph唯一分配给每个顶点)是指向包含顶点邻接列表的行的键。每个边和属性都存储为行中的单个单元格,这样可以进行有效的插入和删除。因此,特定存储后端中每行允许的最大单元格数也是JanusGraph对此后端可以支持的最大顶点度。

如果存储后端支持键顺序,则相邻列表将按顶点id排序,JanusGraph可以分配顶点id,从而有效地对图进行分区。ID的分配使得经常同时访问的顶点具有绝对差异很小的ID。

Individual Edge Layout

每个边和属性作为一个单元存储在其相邻顶点的行中。它们被序列化,以便列的字节顺序与边缘标签的排序键一致。可变id编码方案和压缩对象序列化用于保持每个边缘/单元的存储空间尽可能小。

考虑在上面图形的顶部行中可视化的单个边缘的存储布局。深蓝色框表示用可变长度编码方案编码的数字,以减少它们所消耗的字节数。红色框表示一个或多个属性值(即对象),这些值是用关联属性键中引用的压缩元数据序列化的。灰色框表示未压缩的属性值(即序列化对象)。

边的序列化表示从边标签的唯一id(由JanusGraph指定)开始。这通常是一个很小的数字,并通过变量id编码进行了很好的压缩。此id的最后一位是偏移量,用于存储这是传入边还是传出边。接下来,存储包含排序键的属性值。排序键是用边标签定义的,因此排序键对象元数据可以引用到边标签。然后,存储相邻顶点的id。JanusGraph不存储实际的顶点id,而是存储与拥有此邻接列表的顶点id的差异。很可能差异比绝对id小,因此压缩效果更好。顶点id后跟此边的id。每个边由JanusGraph分配一个唯一的id。这将结束边单元格的列值。边缘单元格的值包含边缘的签名属性(由标签的签名密钥定义)的压缩序列化以及以未压缩序列化方式添加到边缘的任何其他属性。

属性的序列化表示更简单,只在列中包含属性的键id。属性id和属性值存储在值中。但是,如果属性键定义为list(),则属性id也存储在列中。

JanusGraph 数据模型相关推荐

  1. java对象底层原存储结构图解_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构...

    大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 转载文章请保留以下声明: 一:存储模式 留言或私信我,邀请你加入"图数据库交流"微信群! 1. ...

  2. janusgraph整合mysql_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构

    527-7.jpg 大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 版本:JanusGraph-0.5.2 转载文章请保留以下声明: 一:存储模式 留言或私信我, ...

  3. 1. JanusGraph的优势

    JanusGraph 旨在提供不止一台机器的图数据的存储和计算能力.实时的图数据遍历和分析查询是JaunsGraph的基本特性.本节将讲解JanusGraph的特性和所支持的底层持久性解决方案. Ja ...

  4. 图解图库JanusGraph系列-一文知晓“图数据“底层存储结构(JanusGraph data model)

    图解图库JanusGraph系列-一文知晓"图数据"底层存储结构(JanusGraph data model) 大家好,我是洋仔,JanusGraph图解系列文章,实时更新 图数据 ...

  5. JanusGraph环境搭建实战

    JanusGraph环境搭建实战 最近工作一直在做关于图数据的开发工作,正在开发图计算相关的功能,图数据库的内核还是基于TinkerPop3的,TinkerPop3提供了一套完整的图数据模型建模,标准 ...

  6. 图解图库Janusgraph系列-一文知晓图数据底层存储结构

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨匠心Java 来源丨匠心Java(code-t ...

  7. 「JanusGraph」图形数据库 - 技术选型调研

    JanusGraph各组件版本兼容性匹配表 JanusGraph JanusGraph提供多种后端存储和后端索引,使其能够更灵活的部署.本章介绍了几种可能的部署场景,以帮助解决这种灵活性带来的复杂性. ...

  8. 知识图谱 数据模型和查询语言

    文章目录 1. RDF图数据模型 1.1 资源描述框架RDF 1.2 RDF图数据模型 1.3 RDF Schema(简称RDFS) 2.SPARQL查询语言 2.1 SPARQL 语法 2.2 SP ...

  9. janusgraph整合mysql_JanusGraph的schema及数据建模

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

  10. 图解图库JanusGraph系列-解惑图数据库,你知道什么是图数据库吗?

    解惑图数据库!你知道什么是图数据库吗? 大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 整理所有图相关文章,请移步(超链):图数据库系列-文章总目录 地址:htt ...

最新文章

  1. CreateRemoteThread
  2. Extjs4 tab添加右键刷新功能
  3. Spring – ${} is not working in @Value--转载
  4. 4、线程范围内的数据共享之ThreadLocal
  5. 【NOI2016】优秀的拆分【后缀数组】【ST表】【关键点】【调和级数复杂度】【差分】
  6. 前端学习(810):webapi和js的关联性
  7. 【Fiddler篇】Stave插件之环境映射
  8. 计算机科学与技术在广西录取分数线,中国计量大学2016年在广西录取分数线(分专业)...
  9. windows关闭被占用的端口
  10. 苹果电脑在哪里改计算机id,苹果电脑改密码怎么改(教你两分钟快速解决)
  11. 电子计算机断层扫描简称,计算机断层扫描技术(简称PET)
  12. efi shell的英文介绍_EFI和EFI Shell命令简介
  13. 正则表达式(菜鸟教程)
  14. yarn安装插件报错: An unexpected error occurred: “https://registry.npmjs.org/vue-router: connect ETIMEDOUT
  15. SQL Server数据库的管理及维护
  16. Bootstrap整体架构
  17. Android图片添加水印图片并把图片保存到文件存储
  18. 第一次阅读与准备作业
  19. Java毕业设计论文写作建议
  20. C++ 如何加载lib

热门文章

  1. Echart 四象限图
  2. 百度富文本ueditor实现导入word并将内容显示到编辑器中
  3. 彻底了解HTTP模块
  4. hprose-php教程,hprose php用户手册
  5. c语言判断一个数是否为素数思路,C语言判断一个数是否为素数方法解析
  6. 今年秋季 MacBook Pro 将迎来六大变化
  7. python | 中国地形图背景画站点数量空间分布图(更新)
  8. python+django+mysql校园失物招领系统毕业设计毕设开题报告
  9. 【资源分享】ppt的模版获取-可用于转正答辩、毕业答辩、课程答辩等等
  10. liteIDE搭建Go Golang 开发环境图文详解