2013-11-30 2 views
-1

Я счастливый пользователь Neo4j, но всегда нужно быть осторожным, чтобы циклы никогда не создавались. Структура данных - это дерево, которое вы видите. Это дерево важно для спецификации программыЕсть ли какой-нибудь способ для вашей СУБД Графа отклонить DML, который создает циклы?

С одним программистом это легко. Но как насчет того, как программа растет, и на ней работают десятки людей. Поскольку не все разработчики были с вами с первого дня и у меня нет спецификации, которую я написал для программы, они могут использовать ярлыки для достижения явных целей проекта, потому что я не указал их, но оставьте мою базу данных в состоянии, которое делает некоторые формы анализа слишком сложными.

Есть ли что-то похожее на триггер базы данных или ссылочную целостность внешнего ключа, что мешает вам делать что-то непослушное, либо в Neo4j, либо в любой гипотетической базе данных графа?

ответ

1

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

  • Построить некоторые классы для взаимодействия с графиком, который абстрагирует от интерфейса графа и передает всю связь с графиком из вашего приложения. Записывайте единичные тесты вокруг этих тестов, чтобы обеспечить «только создание дерева». Таким образом, вашим другим разработчикам не нужно будет напрямую взаимодействовать с графиком и может только «создавать деревья» с вашими классами.
  • Если вы использовали Blueprints вокруг Neo4j, вы могли бы реализовать Graph Wrapper (обертки украсить экземпляры Graph с дополнительными функциями), которые могли бы попытаться определить циклы, когда добавлены ребра. Я полагаю, хотя такие проверки могут быть очень дорогими. Я полагаю, что вероятность того, что что-то подобное будет работать, будет зависеть от вашей схемы, размера графа, приложения и т. Д.
  • Вы спросили о триггерах, поэтому я бы просто добавил, что Blueprints предоставляет «триггерные» функции через оболочку, называемую EventGraph, который будет генерировать уведомления при изменении мута. Вы можете подписаться на эти уведомления для выполнения проверок, если циклы создаются (опять же, с теми же предостережениями, о которых говорилось выше).

Все мои предложения в основном являются скорее конвенцией, чем конфигурацией. В конце концов, разработчик может обойти любой из вышеперечисленных вариантов и просто начать писать материал на график. Я полагаю, что это не сильно отличается от любого другого разработчика-изгоев, игнорирующего схему RDBMs, и просто создавая новые таблицы/столбцы, когда им это нравится, поэтому эти подходы не заменяют проверку кода, документацию и т. Д.

+0

Спасибо Стивен. Это полный список и дает представление о том, как люди справляются с этой проблемой на практике. –

 Смежные вопросы

  • Нет связанных вопросов^_^