JanusGraph采用邻接表(adjacency list)的方式存储图,也即图以顶点(vertex)和其邻接表组成。邻接表中保存某个顶点的所有入射边(incident edges)。
通过将图采用邻接表的形式存储,JanusGraph确保了某个顶点的所有入射边和属性都被紧凑的存储在一起,从而能够加快遍历速度,缺点是数据存储了两次。而且JanusGraph以sort key指定的顺序存储数据。
JanusGraph可以采用任何支持big table数据模型的存储后端存储邻接表。

Bigtable Data Model


在Bigtable data model下,表就是行的集合。每个行都唯一的由一个key标识,每行由大量的cell组成。一个cell是由列和值组成的。一个cell唯一的由指定行的制定列所标识。行在bigtable模型中称为“宽行”,表因此称为“宽表”。cell的数量可以非常大,而且不需要预定义。

JanusGraph对bigtable数据模型有一个特殊的要求:cell必须是根据列来排序的,而且由column制定的cell的子集必须可以高效查询。

而且,如果bigtable实现可以根据行的key排序,JanusGraph则可以利用该特性实现更高的图遍历性能。

JanusGraph Data Layout


JanusGraph将每个邻接表作为以个row保存在存储后端,64位的vertex id是指向邻接表的key。每个边和属性都是作为独立的cell保存的,以实现更高效插入和删除。没行中最大能保存的cell的个数,也就是vertex的edge的数量限制。

Individual Edge Layout


每个edge和property都作为邻接表的一个cell存储,并通过序列化之后,byte order即表示了edge label的sort key。variableid对schema进行编码和压缩来节省空间。上图中深蓝色的色块表示了对schema进行编码压缩后的ID,用以减少存储消耗。红色快代码一个或多个属性值,该值也被压缩并关联到属性key上。灰色块代表未压缩的属性值,如(序列化的OBJECT)。

Edge有edge label唯一ID开始,并附加一个表示方向的数据位;之后有属性key组成的排序键,再之后是邻接表IDD,和边ID。Janus并不保存实际的vertex id,而是相对于邻接表的偏移量,因其比压缩更节省空间。value部分保存了序列化后的值。

对于属性来说就简单一点,column是属性的key id,property id和property key保存在value部分,如果property key被定义为LIST,property id也保存在列中。

总结

对于理解JanusGraph的存储,关键在于理解其bigtable的邻接表存储结构,而在邻接表中保存了边(包括边的属性)及vertex的属性。
由于边是由两个vertex定义的,故肯定存在有edge的重复保存,这增加了存储空间,但通过冗余也提高了查询效率。
最后是每个邻接表:行,的数据结构,对于一般的应用场景,我们没有必要深入到行存储中去,只是了其存储的一般原理即可。

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

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

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

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

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

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

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

  4. ZooKeeper:数据模型

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

  5. 从零自学Hadoop(21):HBase数据模型相关操作下

    阅读目录 序 变量 数据模型操作 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...

  6. ExtJS 数据模型

    自定义数据模型 数据模型类其实就是一个继承自Ext.data.Model 的类. Ext.define('MyApp.User', { extend: 'Ext.data.Model', fields ...

  7. 在powerdesigner中创建物理数据模型

    物理数据模型(PDM)是以常用的DBMS(数据库管理系统)理论为基础,将CDM/LDM中所建立的现实世界模型生成相应的DBMS的SQL语言脚本.PDM叙述数据库的物理实现,是对真实数据库的描述 PDM ...

  8. Visual 2015创建新项,缺少ADO.NET 实体数据模型的解决方法

    现在的某度查资料真的很麻烦,突然我自身的VS2015创建EF的时候找不到 ADO.NET 实体数据模型,但是使用CodeFrist是可以生成数据表的.所有特别郁闷. 打开界面如下 某度半天,都没有查出 ...

  9. ASP.NET MVC 5 - 给数据模型添加校验器

    在本节中将会给Movie模型添加验证逻辑.并且确保这些验证规则在用户创建或编辑电影时被执行. 拒绝重复 DRY ASP.NET MVC 的核心设计信条之一是DRY: "不要重复自己(DRY ...

随机推荐

  1. 集训考试题tents

    题目描述Pb 去郊游啦!他来到一块空地打算在这里搭一个帐篷.但是,帐篷的四个支撑点不能在落在任何位置上,而只能落在一些固定点上.现在,他找到地面上有 N 个点可以支撑帐篷.(四个支撑点必须围成一个矩形 ...

  2. SPOJ GSS2 - Can you answer these queries II(线段树 区间修改+区间查询)(后缀和)

    GSS2 - Can you answer these queries II #tree Being a completist and a simplist, kid Yang Zhe cannot ...

  3. 【原创】项目管理软件之争,禅道和JIRA大对比

    本文摘要: 一. 产品介绍 二. 界面设计 1. 界面颜色设计 2. 布局结构 三. 功能区别 四. 价格对比 五. 后期服务 六. 优缺点 七. 总结 说到项目管理软件,不得不提的是禅道和JIRA. ...

  4. 前端基础-HTML简介及发展史

    一 HTML简介 二 HTML发展史 一. HTML简介 用户使用浏览器打开网页看到结果的过程就是:浏览器将服务端的文本文件(即网页文件)内容下载到本地,然后打开显示的过程. 而文本文件的文档结构只有 ...

  5. [CF865C]Gotta Go Fast

    题目大意: 一个游戏关卡有$n(n\le50)$个任务,若在$m$秒内按顺序完成所有任务则算作通过当前关卡.每个关卡有三个属性$a_i,b_i,p_i(1\le a_i<b_i\le100,80 ...

  6. 8.3(java学习笔记)动态编译(DynamicCompiler)与动态运行(DynamicRun)

    一.动态编译 简单的说就是在运行一个java程序的过程中,可以通过一些API来编译其他的Java文件. 下面主要说动态编译的实现: 1.获取java编译编译器 2.运行编译器(须指定编译文件) 获取编 ...

  7. 打印不同的数 Exercise07_05

    import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:打印不同的数 * */ public class Exercise07_0 ...

  8. vb6转16进制

    Public Function xEncode(ByVal strEncode As String) As String If strEncode <> "" Then ...

  9. 分布式架构高可用架构篇_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试

    原文:http://www.iteye.com/topic/1145651 从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于Z ...

  10. 昨晚京东校招笔试,没考一道.net,全考java了

    我在大四之前我都觉得跟着微软走是正确的,这条大腿很粗!但是现在我也开始不那么认为了,现在每天在网上找招聘信息,稍微大点的公司都是招java的,很少招.net的!别说什么你学的好不怕没人招之类的话,大公 ...