Fork me on GitHub

图数据库建模基础

图数据库建模

1、建模原因

​ 如果使用 Neo4j 图来支持部分或全部应用程序,则必须与您的相关者协作设计一个图,该图将:

  • 回答应用程序的关键用例。
  • 为关键用例提供最佳的 Cypher 语句性能。

Neo4j 图的组件

用于定义图形数据模型的 Neo4j 组件包括:

  • 节点
  • 标签
  • 关系
  • 性能

数据建模过程

  • 了解图数据的实用需求

  • 节点、关系设计

  • 建立初始测试数据模型

  • 使用 cypher 创建作为实例模型的图形

  • 测试图用例,包括性能等多个指标

  • 根据关键用例的变化或性能原因,重构或改进图数据库模型

  • 在图上进行重构,并通过 cypher 重新测试

图数据库建模是一个迭代的过程,初始图模型是一个起点,但随着了解有关用例的更多信息,或者用例发生变化,初始化图形就会需要更改,此外,在图扩展或是缩减时,可能需要重构用例已到达最佳性能。

在建立模型之前,需要做到以下事情:

  • 确定应用程序相关的业务人员和开发人员
  • 沟通业务人员和开发人员:
    • 详细描述应用程序
    • 标识应用程序的用户(人员、系统)
    • 对应用程序的用例达成一致
    • 对用例程序的重要性进行排名

应用程序的大多数用例都可以通过问题来枚举,用例有助于定义应用程序在运行时的行为方式。

下面是一些例子:

  1. 电影里演了什么?
  2. 哪个人导演了电影?
  3. 一个人演过什么电影?
  4. 有多少用户评价了一部电影?
  5. 谁是出演电影的最年轻的人?
  6. 一个人在电影中扮演什么角色?
  7. 根据 imDB 的数据,特定年份评分最高的电影是什么?
  8. 演员演过哪些剧情电影?
  9. 哪些用户给电影打了 5 分?

在上述的域中,我们希望区分出演或执导电影的用户与为电影评分的用户或评论者。例如他们的出生日期,他们的tmdbId等。 对电影进行评级的用户只会被命名或识别。

模型的目的

为应用程序执行图数据库建模过程时,至少需要两种类型的模型:

  • 数据模型
  • 实例模型

数据模型

数据模型描述图形的标签、关系和属性。它并非图数据库中创建的特定数据

下面是一个数据模型的示例:

数据模型

没有任何东西能够唯一标识具有给定标签的节点,但是,图形数据模型很重要,因为它定义了应用程序创建和使用图形时需要使用的标签、关系类型和属性名称

建模样式指南

在开始图形数据库建模过程时,就标签、关系类型和属性键值的命名方式达成一致非常重要。标签、关系类型和属性键区分大小写,这与不区分大小写的 cypher 语句不同。

Neo4j 最佳实践是在命名图形元素时使用以下方法,但我们可以根据自己的应用程序进行调整。

  • 标签是以大写字母开头的单个标识符,推荐大驼峰命名法。
    • eg:Person ,GitHubRepo
  • 关系类型是带有下划线字符的全大学字母的单个标识符。
    • eg: MARRIED_TO
  • 节点关系和属性键值对是以小写字母开头的单个标识符,同样推荐使用小驼峰命名法。
    • eg: edptId,name

PS: 属性键名称不必是唯一的,例如“ Person” 节点和 “Movies” 节点都可以设定 tmddbId 的属性键

实例模型

图形数据建模过程的一个重要部分是针对用例测试模型。为此,我们需要有一组示例素具,可用于查看是否可以用模型回答用例。

如下图是一个实例模型的示例:

实例模型

在该实例模型中,我们创建了人物和电影节点和一些实例,以及他们之间的关系。拥有这些实例模型将有助于测试我们的使用案例。

posted @ 2023-02-14 14:22  Noir-  阅读(182)  评论(0)    收藏  举报