【问题标题】:How to soft delete functionality in neo4j?如何在 neo4j 中软删除功能?
【发布时间】:2014-04-28 07:35:07
【问题描述】:

在 mysql 等关系数据库中,我习惯于通过设置 deleted_at 来进行软删除。然后检索 SELECT 只需获取行 WHERE deleted_at IS NULL

我很困惑如何在 neo4j 数据库中实现软删除。我有多种方法,但不确定哪种方法或组合会更有优势。

我也阅读了Neo4j: implementing soft delete with optional relationships,但没有帮助。

  1. 只需设置节点deleted_at的属性。
  2. 删除节点标签并更改前缀“_”,如“Student”将变为“_Student”
  3. 删除关系并更改前缀“_”,如“TEACHES”将变为“_TEACHES”

在neo4j中实现软删除的最佳方式或组合或其他方式是什么?

【问题讨论】:

  • 最好的方法 - 听起来像是特定于应用程序的。由于没有直接支持软删除,我认为这确实是一个意见/主观类型的问题。 Neo4j 有一个where 子句,允许您对deleted_at 属性进行相同类型的过滤。也没有什么可以阻止您拥有一个表示软删除节点的额外标签,允许您将它们过滤掉。您可能想对您选择的任何方法进行基准测试(例如,对于您建议的方法,它们在负载下的性能如何?)。
  • @DavidMakogon:是的。我想知道任何使用软删除的人。那么他们在做什么呢?我是neo4j的新手。就我而言,将被删除的节点主要具有关系。如果有人有基准,那就太好了。

标签: neo4j soft-delete neo4jphp neo4j-node


【解决方案1】:

哪种方式是最好的方式值得商榷。如果您不需要软删除的实际日期,则可以根据需要应用/删除标签:

标记为“软删除”:

match (a {name: "foo"}) set a:deleted return a;

取消标记:

match (a {name: "foo"}) remove a:deleted return a;

如果您需要断言有关软删除的属性,那么将其建模为节点(例如“软删除事件”)然后通过关系将其链接到节点是有意义的。然后被删除的节点是具有“DELETED”关系的特定类型的任何节点,该关系转到软删除节点。然后,该软删除节点将具有 deleted_at 属性,以及您正在建模的删除事件的任何其他内容。

我不认为节点中的简单deleted_at 属性是一个很好的解决方案,因为它会将节点信息与有关删除事件的信息混淆。我认为您正在尝试在这里建模删除事件。

【讨论】:

    【解决方案2】:

    我认为节点有一个deleted_at 属性。您可以在其中存储已删除的时间戳。

    在获取节点信息时,您可以查看deleted_at IS NULL。 喜欢-

      MATCH (n:node)
      WHERE n.deleted_at IS NULL
      RETURN n;
    

    存储删除节点时可以获得的时间戳。

    您还可以在删除节点的用户之间建立关系deleted_by。这样你就可以找出谁删除了节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2023-02-13
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2021-04-12
      相关资源
      最近更新 更多