网站首页 > 技术文章 正文
Schema高级特性
静态节点(Static Vertex)
静态顶点标签是控制数据生命周期的一种方法,在将数据加载到图中时很有用,而这些数据在创建后不应修改。
gremlin> mgmt = graph.openManagement()
gremlin> angle = mgmt.makeVertexLabel('angle').setStatic().make()
gremlin> mgmt.commit()
TTL
ttl (time to live) 生存时间
边缘和顶点标签可以配置生存时间。当配置的TTL在初始创建后通过时,带有此类标签的边和顶点将自动从图中删除。当将大量数据加载到仅临时使用的图中时,TTL配置非常有用。定义TTL消除了手动清理的需要,并且可以非常有效地处理删除。例如,当TTL edges(如用户页面访问事件)在一段时间后被归档,或者根本不需要用于分析或操作查询处理时,这些边的存储将失去意义。该特性依赖于底层的后端存储是否支持TTL,存储后端支持边缘和顶点TTL:
- 与CQL兼容的存储后端
- HBase
- BerkeleyDB-仅支持小时离散TTL,因此最小TTL为一小时。
Edge TTL
边TTL是在每个边的基础上定义的,这意味着该edge label的所有边都有相同的生存时间。
gremlin> mgmt = graph.openManagement()
gremlin> love = mgmt.makeEdgeLabel('love').make()
gremlin> mgmt.setTTL(love, Duration.ofDays(7))
gremlin> mgmt.commit()
请注意,修改边缘会重置该边缘的TTL。还要注意,edge label的TTL可以修改,但这种更改可能需要一些时间才能传播到所有正在运行的JanusGraph实例,这意味着同一类型的label可以临时使用两个不同的TTL。
Property TTL
与edge TTL类似, 单元级TTL, 依赖后端存储
gremlin> mgmt = graph.openManagement()
gremlin> nickName = mgmt.makePropertyKey('nick_name').cardinality(Cardinality.LIST).dataType(String.class).make()
gremlin>mgmt.setTTL(nickName, Duration.ofDays(21))
gremlin> mgmt.commit()
Vertex TTL
顶点Vertex TTL是在每个Vertex label的基础上定义的,这意味着该标签的所有顶点都有相同的生存时间。配置的TTL应用于顶点、其property和所有关联边edge,以确保从图形中删除整个顶点。因此,顶点TTL仅适用于静态顶点标签。请注意,后端必须支持存储级TTL。目前只有CQL、HBase和BerkeleyDB支持这一点。
gremlin> mgmt = graph.openManagement()
gremlin> player = mgmt.makeVertexLabel('player').setStatic().make()
gremlin> mgmt.setTTL(player, Duration.ofHours(36))
gremlin> mgmt.commit()
请注意,Vertex label的TTL可以修改,但这种更改可能需要一些时间才能传播到所有正在运行的JanusGraph实例,这意味着同一标签可以临时使用两个不同的TTL。
多属性
JanusGraph支持具有SET和LIST基数的属性键。因此,JanusGraph支持在单个顶点上具有相同键的多个Property。此外,JanusGraph对Property的处理类似于edge,因为property上允许使用单值属性。
gremlin> mgmt = graph.openManagement()
gremlin> mgmt.makePropertyKey('haha').dataType(String.class).cardinality(Cardinality.LIST).make()
gremlin> mgmt.commit()
gremlin> v = graph.addVertex()
gremlin> v.property('haha', 'Dan LaRocque')
gremlin> v.property('haha', 'dalaro')
gremlin> graph.tx().commit()
gremlin> v.properties('haha')
gremlin> mgmt = graph.openManagement()
gremlin> mgmt.makePropertyKey('info').dataType(String.class).cardinality(Cardinality.LIST).make()
gremlin> mgmt.commit()
gremlin> v = graph.addVertex()
gremlin> p1 = v.property('info', 'AAAA')
gremlin> p1.property('source', 'web')
gremlin> p2 = v.property('info', 'BBBB')
gremlin> p2.property('source', 'github')
gremlin> graph.tx().commit()
gremlin> v.properties('info')
单向边Unidirected Edges
单向边是指只能在向外的方向上遍历的边。单向边缘具有较低的存储占用空间,但其支持的遍历类型有限。官方给了个比喻:单向边在概念上类似于万维网中的超链接,因为外顶点可以穿过边,但内顶点不知道它的存在。出顶点会存一分边信息,入顶点不会额外存储边信息。
从边切割角度看,节省了边二次存储的问题,这是更为重要的点。
gremlin> mgmt = graph.openManagement()
gremlin> mgmt.makeEdgeLabel('author').unidirected().make()
gremlin> mgmt.commit()
请注意,删除其内顶点时,单向边不会自动删除。用户必须确保不会出现这种不一致,或者在查询时通过显式检查事务中是否存在顶点来解决这些不一致。这一点要格外注意,这种特定其实在目前存储成本降低的情况下大家不会特别关注,但是从传输成本看是有意义在的,具体需根据使用场景来看。
- 上一篇: 浅谈图数据库 图数据库原理
- 下一篇: (十一) JanusGraph配置化及部分运维能力说明
猜你喜欢
- 2024-10-26 读图数据库实战笔记01_初识图 图数据库查询
- 2024-10-26 (一)图数据库概览第一讲 图数据库教程
- 2024-10-26 一、图数据库系统简介 图数据库原理是什么
- 2024-10-26 「图」完全托管的图形数据库服务Amazon Neptune上线
- 2024-10-26 (十四) JanusGraph 索引管理 索引图英文翻译
- 2024-10-26 (十六) JanusGraph部署架构 jgrapht
- 2024-10-26 (十) JanusGraph事务机制 事务型结构数据流图的特点是
- 2024-10-26 (十一) JanusGraph配置化及部分运维能力说明
- 2024-10-26 浅谈图数据库 图数据库原理
- 2024-10-26 高薪程序员必备知识:图数据库 图数据库 入门
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)