您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
使用图形数据库模型数据
 
作者:wangrui927
  2376  次浏览      18
2019-10-14
 
编辑推荐:
文章主要介绍了图数据库的用途及应用场景。
本文来自于简书,由火龙果软件刘琛编辑、推荐。

在很多文章中,都提到图数据库的一项用途:处理社会关系。比如

上图应该算是图库最基础的应用,因为现实生活中的社会关系并不是对称的,而如果要用关系数据库或者常见的kv cloumn nosql来实现,则一个朋友关系就需要至少2个字段,friend of与 friend by。如果要查询“朋友的朋友”,或“朋友的朋友的朋友”,那么数据库的算法复杂度则会直线上升,直到任务由于查询时间过长而无法完成。

并且,假设一对或单向的朋友关系(意识到自己把别人当朋友,别人却把自己不当回事)结束,那么使用传统的存储方式,你还需要删除上文中类似friend by字段中的内容。

现在再上面应用的基础上,增加一点难度,或者说让例子能更贴近广大程序员的业务场景。

在这张图中,包含了3张表的内容(用户、订单与货物) 同时也表现出一种“大同”的景象,在图库中,数据就是一个一个node,彼此都是完全平等的。所以我们需要用一个字段来表示某个node的角色,比如在neo4j中系统指定了label这个属性,而dgraph并没有指定,需要我们自行设置,这里需要注意。

另外需要指出这个most_recent关系,它和其他关系相比是不固定的,如果有了新订单,可以马上将这个most recent关系指向新的node。

而且订单可能失效,可能被删除。当这个node被删除后,相关的关系都会自动被清除。这也是图数据库的一大灵活性,如果你是一个经验不足的程序员,在设计业务关系时是很容易遗漏这些应该被清除的数据,而图数据库则能自动帮你清理不要的“垃圾”

图书在这里顺便提到,现在的图库大多对数据节点node的字段有做一些类型处理,比如存储地理信息,而不是说一个node就是简单的kv键值对集合。在dgraph中,你还可以对node的某key执行不同的索引策略。比如某key的类型是string,你可以对其应用hash索引,也可以进行全量索引。

但抛开这些细枝末节的内容,我们需要把握一点,关系是图库中的一等公民,而且你应更抽象地理解这个“关系”,这里的关系不仅仅是node与node之间,node本身的各个自定义的kv也可以认为是“关系”。

Chapter 3 Data Modeling with Graphs

1,相比传统数据库,图库的modeling更“白板友好”

2,一个node可以有多个label

3,注意设置node与node之间的关系方向,没有变幻方向的关系,而应明确的指出是从node A 指向node B

4,不光node可以具有属性(properties,可以理解为就是node存储的kv set),关系也是可以有属性的,这样就给实际应用提供更多meta 数据

接下来图书介绍的是如何利用上面这些简单的原则来创建图库model,需要使用sql语言,图书中介绍的是cypher,而dgraph使用的是GraphQL

先放一些书中介绍cypher时的图片

cross-domain models

这张图片是关于莎士比亚文学相关的内容,通过 图中关系线的类型,可以看到这跨越了3个 domain。

所以这也是关系为什么重要的原因,关系可以帮助我们建立一个domian,也可以帮助我们将不同的domain之间的数据进行关联。

职业生涯

演员的表演记录

发送邮件并抄送

可以注意到,图中的关系,既可是一种动作,也可以是一个属性 而数据节点node,既可以是动作的主体,也可以是动作的客体

影评家写的影评

某电视节目的timeline tree(记录一系列事件)

剧集之间的关系

再次强调关系需要方向

不同的关系应对不同的需求

这个人通过ADDRESS关系拥有2个地址,这两个地址分别应用于两种不同的场景

 
   
2376 次浏览       18
相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训