Соответствие схеме в neo4j

Я думаю об использовании базы данных графа для хранения данных IFC. В идеале БД должна обеспечивать способ определения всех типов правил, определенных в схеме IFC. Однако я не думаю, что такие базы данных существуют, потому что некоторые типы правил в IFC очень сложны и требуют запросов к БД. Другие простые, такие как уникальность GUID, наличие обязательных атрибутов или проверка данных. Neo4j, похоже, имеет несколько методов обеспечения соблюдения ограничений:

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

Существуют ли другие методы, которые могут обеспечить соответствие введенных данных предопределенной схеме?

Или есть другие графовые БД, более подходящие для этой работы?


person Thoran    schedule 31.12.2016    source источник
comment
Привет, @Thoran, могу я спросить, как тебе удалось преобразовать данные IFC в neo4j? Спасибо!   -  person JAD    schedule 29.03.2018
comment
Я этого не сделал. Но кто-то это сделал. Ищите IFC QA на Github. Если вы не можете найти, вернитесь ко мне, и я постараюсь найти его для вас.   -  person Thoran    schedule 30.03.2018
comment
Спасибо за ответ, к сожалению, он недоступен. Если у вас есть шанс найти это было бы здорово! Благодарю.   -  person JAD    schedule 31.03.2018
comment
Обратите внимание, что я обнаружил, что кто-то сделал это с помощью скрипта Ruby, но я хочу проверить, отличается ли подход, который вы использовали.   -  person JAD    schedule 31.03.2018
comment
Без проблем. Посмотрите, можете ли вы найти помощь на @ github.com/IndustryFoundationClasses/Questions/issues/12   -  person Thoran    schedule 01.04.2018


Ответы (2)


Вы можете достичь почти всего, что хотите, создав обработчики событий транзакций.

http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphdb/event/TransactionEventHandler.html

Вы также можете ознакомиться с GraphAware Framework и всеми ее подмодули для вариантов использования, а также простота создания и развертывания расширений neo4j.

person Christophe Willemsen    schedule 01.01.2017
comment
Ссылка TransactionEventHandler неверна. Вместо этого попробуйте следующее: neo4j.com/docs/java-reference /текущий/управление транзакциями/ - person Clem Wang; 13.05.2021

Зависит от того, нужна ли вам схема, применяемая самой базой данных, или вы согласны с тем, что это делается на уровне приложения.

Я только что довел Restagraph до уровня "рабочего прототипа", и мой следующий трюк — это Dockerizing. Это своего рода структура, которая позволяет вам определять схему, создавая узлы и отношения в Neo4J с определенными метками, и которая динамически создает REST API для ее применения.

Он также написан на Common Lisp, так что я пойму, если вы подождете образ Docker :)

person James Fleming    schedule 02.01.2017
comment
Добро пожаловать в SO Джеймс. Я полностью согласен с идеей вашего проекта. Я хотел бы внести свой вклад в это, но я никогда не писал код на Common Lisp или что-то близкое к нему. - person Thoran; 02.01.2017
comment
Кроме того, мне нравится ваш рабочий процесс на github. Документирование всего через задачи. Потрясающая работа :) - person Thoran; 02.01.2017
comment
Только так я могу все это отслеживать, но спасибо! - person James Fleming; 02.01.2017
comment
Как бы ни приветствовались прямые вклады, я буду гораздо более взволнован, услышав отзывы от людей, которые действительно используют его. Если вы будете следить за этим проектом, вы увидите, когда я докеризировал его, что должно стать моментом, когда он будет полезен для других людей, кроме меня. - person James Fleming; 02.01.2017