Как мягко удалить функциональность в neo4j?

В реляционных базах данных, таких как mysql, я выполнял обратимое удаление, устанавливая deleted_at. А затем для получения SELECT просто получите строки, WHEREDeleted_at IS NULL.

Я не понимаю, как реализовать мягкое удаление в базе данных neo4j. Я получаю несколько способов, но не уверен, какой метод или комбинация будет иметь больше преимуществ.

Я также прочитал Neo4j: реализация мягкого удаления с необязательными отношениями, но не помогает .

  1. Просто установите свойство узла deleted_at.
  2. Удалите метку узла и измените префикс «_», например, «Студент» станет «_Студент».
  3. Удалите связь и измените префикс «_», например, «TEACHES» станет «_TEACHES».

Какой будет лучший способ, комбинация или другой способ добиться мягкого удаления в neo4j?


person Somnath Muluk    schedule 28.04.2014    source источник
comment
Какой способ будет лучше — похоже, это будет зависеть от приложения. Поскольку прямой поддержки мягкого удаления нет, я думаю, что это действительно вопрос мнения/субъективного типа. Neo4j имеет предложение where, позволяющее вам выполнять тот же тип фильтрации для свойства deleted_at. Также ничто не мешает вам иметь дополнительную метку, представляющую обратимо удаленные узлы, что позволит вам отфильтровать их. Вы, вероятно, захотите протестировать любой метод, который вы выберете (например, для предложенных вами методов, насколько хорошо они работают под нагрузкой?).   -  person David Makogon    schedule 28.04.2014
comment
@DavidMakogon: Да. Я хотел знать, кто-нибудь использует мягкое удаление. Тогда каким образом они делают? Я новичок в neo4j. В моем случае узлы, которые будут удаляться, в основном имеют отношения. Если у кого-то есть тесты, это будет здорово.   -  person Somnath Muluk    schedule 28.04.2014


Ответы (2)


Я думаю, что у узла есть свойство deleted_at. В котором вы можете хранить удаленную метку времени.

И во время получения информации об узлах вы можете проверить deleted_at IS NULL. подобно -

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

Хранение временной метки, которую вы можете получить при удалении узла.

Вы также можете иметь отношения deleted_by между пользователем, который удалил узел. Чтобы вы могли узнать, кто удалил node.

person Satish Shinde    schedule 04.11.2014

Какой путь лучше, будет спорным. Если вам не нужна фактическая дата мягкого удаления, вы можете просто применить/удалить метку по мере необходимости:

Отметить как "мягкое удаление":

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

Снять отметку:

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

Если вам нужно установить свойства обратимого удаления, то имеет смысл смоделировать его как узел (например, «событие обратимого удаления»), а затем связать его с узлом через отношение. Узлы, которые затем удаляются, — это любые узлы определенного типа, которые имеют связь «DELETED», которая переходит к узлу с обратимым удалением. Тогда этот узел обратимого удаления будет иметь свойство delete_at, а также все остальное, связанное с событием удаления, которое вы моделируете.

Я не думаю, что простое свойство deleted_at в узле является хорошим решением, потому что оно путает информацию об узле с информацией о событии удаления. Я бы сказал, что вы пытаетесь смоделировать событие удаления здесь.

person FrobberOfBits    schedule 28.04.2014