Graph Thinking
When to start use graph?
当我们需要使用图数据库时, 需要考虑三个问题:
- 图数据库是否比关系型数据库更优?
- 如何把我的数据看做图?
- 如何给图的原型结构建模?
关系vs图形
从存储和数据检索的角度看, 关系型数据库将数据以三范式的形式存储, 将真实世界的实体与表映射; 而图数据库关注存储和检索的关系, 这些关系代表了真实世界实体的连接, 比如: 一个人认识另一个人, 人住在什么地方, 人拥有东西等等. 其实两个系统都可以表示实体和关系, 但是关注点和优化点不同. 他们底层的数学算法也不同, 一个是关系型代数, 一个是图论.
图论的思想?
图是由节点(Vertex)和边(Edge)组成的,Vertex代表数据实体,Edge代表实体之间的关系, edge是有方向的(单项与双向)。如果把节点当作名词,边当作动词,那么它们分别都有形容词和副词来修饰它们,即属性。
- Adjacency: 如果两个节点通过边相连,那么它们是临近的。
- Neighborhood: 对于节点v, 所有与之相连的节点形成节点v的邻居, 称N(v).
- Distance: 从一个节点走到另一个节点所需的边数称为距离。
- Degree: 程度描述了一个节点链接的边数。图论中,只有程度为1的节点成为叶。如果有很高的程度(>100000edges)称为超级节点。
- Multiplicity: 描述节点间有不同属性的edges.
为什么不直接用关系型数据库?
直接回答:当需要突出数据的关系时使用图数据库, 尤其数据的结构复杂时。
图数据建模和关系型数据建模很相似,主要的区别在于考虑实体之间的关系。图技术突出了关系优先的数据结构。在物理存储方面,图数据库直接存储概念数据模型(Conceptual data model), 不像关系型数据库做三范式处理。具体处理上,图数据库把节点的边直接组成数据结构存储在一起,这样可以方便地寻址某个节点的关系。
当新增一个需求时, 关系型数据库往往需要改变数据结构, 增加表, 新增sql语句. 而图数据库只需要增大原型(schema)和插入数据.
- Post title:Graph Thinking
- Post author:Kopei
- Create time:2021-03-08 00:00:00
- Post link:https://kopei.github.io/2021/03/07/database-neo4j-2021-03-08-graph-thinking/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments