【问题标题】:Neo4J DB modeling - relations and parent nodesNeo4J DB 建模 - 关系和父节点
【发布时间】:2014-12-01 07:04:50
【问题描述】:

早上好,

我开始从关系型数据库转移到 Neo,从而将我的“表格思维”转移到图形世界中。考虑一个模型来表示我的任务模块,我需要将以下实体关联起来:

  • 客户
  • 任务
  • 用户

所以我想出了这个主意:

(CUSTOMER)-[:GENERATES]->(TASK) 
(USER)-[:IS_ASSIGNED_TO]->(TASK)

我正在思考当我要查询这个时,我会用标签 TASK 标记每个任务节点,并将状态作为属性,例如关闭,打开等。

现在查找所有打开的任务都可以解决

MATCH (t:TASK {status:"open"}) -[:IS_ASSIGNED_TO]-> (u:USER) 
MATCH (c:Customer) -[:GENERATES]-> (t:TASK)
RETURN t.number as task_number, c.name as customer_name, u.name as user_name

在创建节点和关系时,我想知道我是否只是为任务创建一个节点,一个为用户创建一个节点,一个为客户创建一个节点,并像上面的模型一样连接它们,或者我是否需要像“父节点”这样的东西每个节点类型,例如一个 GENERAL_USER、一个 GENERAL_TASK 和一个 GENERAL_CUSTOMER 并且已经将每个单个节点连接到该父节点以及覆盖当前状态的关系。背后的想法是,当我想要打开任务时,我可能更容易从 GENERAL_TASK 节点开始并查找与状态为 OPEN 的任务的所有关系,而不是寻找可能在数据库中某处的每个节点。这是否比要求数据库返回所有具有内容为 OPEN 的属性状态的 TASK 节点更快(即使已编入索引)?

很高兴有一些意见来更好地了解如何对数据库和关系进行建模。感谢您的宝贵时间。

【问题讨论】:

    标签: model neo4j


    【解决方案1】:

    所以我认为你在这里的想法是正确的。在选择如何最好地对数据进行建模时,查询模式非常重要。

    一般来说,neo4j 的设置是为了降低遍历关系的成本。因此,作为一般经验法则,浏览关系会比扫描所有节点以查找具有特定属性值的节点更便宜。

    如果某个状态的任务分组将成为您经常查询的内容,那么将任务链接到模型中的该“类”任务可能是有意义的。只要确保您正确维护这些链接。缺点之一是节点可能会链接到两个不同的状态(这在您的模型下可能没有意义),而如果节点具有状态“属性”,那么它只能有一个值时间。随着您的任务得到处理,它们的状态将发生变化,您的代码将需要确保所有任务都链接到一个且只有一个状态。

    假设您有一个离散变量(即,一个只能采用一组固定值中的一个的变量,例如状态代码或“状态”标志)。什么时候应该把它作为一个单独的节点,什么时候应该把它作为一个节点属性?没有硬性和快速的答案,但这里有一些指导方针:

    暗示它应该是一个节点的事情

    1. 经常需要按此特定值过滤大型结果集
    2. 它与不止一种节点类型相关(即任务有状态,但用户也可能链接到某些状态)

    表明它应该是一个属性的事情

    1. 仅与一种节点类型相关
    2. 值的数量非常少(即
    3. 基于该属性的不频繁查询

    【讨论】:

    • 感谢 FrobberOfBits,这有助于我思考并检查我的模块中您提到的要点。在第一次接触时感觉将状态作为属性,因为它仅与该类型的节点相关。因此,这意味着应该跳过将状态作为关系的一部分,以支持在节点上拥有状态(无论是特殊节点还是数据节点)——并且不需要主节点来连接它们,但只有单个节点只连接到客户 - 因此查询节点上的状态(索引) - 我做对了吗?
    • 在过去的 neo4j 版本中,人们有一个“主节点”,他们将其用作各种索引。我认为现在没有必要这样做,因为有标签和索引。执行 `MATCH (p:Person {id: "5"}) 并没有那么慢,因为您为 neo4j 提供了两种快速查找的方法:按标签和按属性(索引)。
    • 太好了,所以我的担心已经过时了 - 谢谢你让我平静下来:)
    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    相关资源
    最近更新 更多