在Neo4j中,当粒度级别可以无限制时,应该使用什么级别的特异性?

For*_*sed 6 data-modeling neo4j

使用图形数据库时,最难解决的问题是选择粒度级别.让我们说我有一个图表显示在一周中的某些日子发生的事情:垃圾日,周五墨西哥比克,周五BYOB等.

  • 我可以让每一天都成为一个节点(周一,周二,周三,......),这样,查询特定的日子很快.
  • 我可以创建一个名为Day的节点,并使用星期几添加属性名称.这样,显示图表中的所有日子都很容易查询.

对自己思考,使节点非常具体是不好的,因为粒度没有限制.例如,星期六早上,晚上和晚上,或者更糟糕的是,每天每小时一个新节点.我还可以通过将星期六节点通过"晚上"边缘链接到垃圾日节点来使边缘成为粒度的一个组成部分.

我偶尔遇到类似的问题,例如; 我应该根据一个人的全名创建一个新节点,还是一个名为"Person"的节点,其属性为"name".然后我根据便利性制作特定或一般的节点,但我觉得可能有一些最佳实践或更高级别的原则我缺少.我不清楚如何判断哪条路更好.

Bru*_*res 4

数据模型的粒度级别应由查询需求驱动,而不是相反。也就是说:在对数据库进行建模时,您应该问自己:“我将对我的数据执行什么样的查询?”。根据这个问题的答案,您将获得一个良好的起点来创建具有适当粒度级别的良好模型。

在 Rik Van Bruggen 所著的《学习 Neo4j》一书中(您可以在此链接中下载),作者谈到了设计图形数据库以实现查询能力:

与任何数据库管理系统一样,但对于 Neo4j 等图形数据库管理系统来说更是如此,您的查询将驱动您的模型。我们的意思是,就像您过去可能使用过或今天仍在使用的任何类型的数据库一样,您需要根据特定的权衡做出特定的设计决策。因此,在像 Neo4j 这样的图数据库中建模并不存在一种完美的方法。这完全取决于您想对数据提出的问题,这将驱动您的设计和模型。

因此,基于此,您的问题“当粒度级别可以不受限制时应该使用什么级别的特异性?”的答案 是:这取决于您的查询要求。首先考虑您将执行的查询,然后考虑数据模型。

我的建议是:一开始就让模型尽可能简单,并在需要时逐步进行更改。