2014-04-28 2 views
2

mysql과 같은 관계형 데이터베이스에서 나는 deleted_at을 설정하여 소프트 삭제를 수행했습니다. 그리고 나서 검색을 위해 SELECT 그냥 where_deleted_at가 NULL 인 행을 가져옵니다..neo4j의 기능을 소프트 삭제하는 방법은 무엇입니까?

neo4j 데이터베이스에서 소프트 삭제를 구현하는 방법을 혼동합니다. 내가 얻는 방법에는 여러 가지가 있지만 어떤 방법이나 조합에 더 많은 이점이 있는지 확실하지 않습니다.

나는 또한 Neo4j: implementing soft delete with optional relationships을 읽지 만 도움이되지 않습니다.

  1. 노드의 속성을 설정하면 deleted_at입니다.
  2. 제거 노드 레이블과 "학생"와 같은 접두사 "_"로 변경 "_Student"
  3. 제거 관계 접두사에 의해 변화 "_" "가르칩니다"처럼 될 것이다

을 "_TEACHES을"될 것이다 neo4j에서 소프트 삭제를 수행하는 가장 좋은 방법 또는 조합 또는 다른 방법일까요?

+0

* 가장 적합한 방법 *은 앱과 관련있는 것 같습니다. 소프트 삭제에 대한 직접적인 지원이 없기 때문에 이것은 실제로 의견/주관적인 질문 유형이라고 생각합니다. Neo4j는'where' 절을 가지고있어'deleted_at' 속성에서 같은 유형의 필터링을 할 수 있습니다. 또한 소프트 삭제 된 노드를 나타내는 추가 레이블을 갖지 못하게 막을 수 있으므로이를 필터링 할 수 있습니다. 어떤 방법을 선택하든 벤치마킹하는 것이 좋습니다 (예 :당신이 제안한 방법에 대해서, 그들이 부하 하에서 얼마나 잘 작동 하는가?). –

+0

@DavidMakogon : 예. 소프트 삭제를 사용하는 사람을 알고 싶었습니다. 그렇다면 그들은 어떤 방법으로하고 있습니까? 나는 neo4j를 처음 사용합니다. 필자의 경우 삭제 될 노드는 대부분 관계가 있습니다. 누군가 벤치 마크를 가지고 있다면, 그것은 greate가 될 것입니다. –

답변

1

노드에 대해 deleted_at 속성이 있다고 생각합니다. 삭제 된 타임 스탬프를 저장할 수 있습니다.

노드 정보를 가져올 때 deleted_at IS NULL을 확인할 수 있습니다. 같은 - 노드가 삭제 될 때 당신이 얻을 수있는

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

저장 타임 스탬프.

노드를 삭제 한 사용자와의 관계가 deleted_by 일 수도 있습니다. 그래서 누가 삭제 된 노드를 찾을 수 있습니다.

3

가장 좋은 방법은 논쟁의 여지가 있습니다. "소프트 삭제"로

마크 : 삭제 소프트의 실제 날짜를 필요로하지 않는 경우, 당신은/적용 할 수 있습니다 필요한 라벨을 제거

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

해제를 :

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

소프트 삭제에 대한 속성을 지정해야하는 경우 해당 노드를 노드 (예 : "소프트 삭제 이벤트")로 모델링 한 다음 관계를 통해 노드에 연결하는 것이 좋습니다. 그런 다음 삭제 된 노드는 소프트 삭제 노드로 이동하는 "DELETED"관계가있는 특정 유형의 노드입니다. 그런 다음 소프트 삭제 노드에는 모델링중인 삭제 이벤트에 대한 다른 정보와 함께 deleted_at 속성이 있습니다.

노드 정보가 삭제 이벤트에 대한 정보와 혼동되기 때문에 노드의 단순한 deleted_at 속성이 해결책이라고 생각하지 않습니다. 여기서 삭제 이벤트를 모델링하려고한다고 주장 할 것입니다.