2015-12-16 2 views
2

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

Я использую neo4j для хранения графических баз данных и проверяю, что они соответствуют некоторым структурным требованиям, например, у меня есть зависимость моделирования db между элементами: узлы - это элементы, а ссылки обозначены как «необходимость» или «несовместимые» «для моделирования зависимости, и я хочу, чтобы neo4j проверял согласованность данных.

Я закодировал контролер в серверном плагине, и он работает очень хорошо. Но теперь я хотел бы разрешить пользователям подключаться к базе данных, изменять данные (не сохраняя пока изменений), проверить, не изменили ли эти изменения согласованность и затем сохранили изменения.

Я нашел конечную точку http, которая может поддерживать транзакцию открытой и полностью соответствует «изменениям db без сохранения», но я не могу найти, как запустить мою проверку на измененных данных: есть ли способ запустить что-то еще, чем запрос Cypher с конечной точкой http, или мне нужно рассмотреть другой способ решить эту проблему?

Теперь я могу запустить свой checker, используя TransactionEventHandler beforeCommit, но это означает, что пользователь не мог знать, могут ли его данные быть в порядке, не запустив фиксацию, и тот факт, что данные разделены между db без модификация и TransactionData, которые сохраняют модификацию, делают проверку правильной.

Итак, если кто-то знает, как я могу это решить, было бы здорово. Спасибо.

ответ

0

Ваши варианты - использовать API неуправляемых расширений и транзакций.

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

Я рекомендую вам использовать GraphAware framework.

Вот большая статья о том, что http://graphaware.com/neo4j/transactions/2014/07/11/neo4j-transaction-event-api.html

+0

Спасибо, что легче манипулировать данными таким образом, но если я это правильно, он все еще может быть сделано только при фиксации (перед) сделки и а не в середине, есть ли способ сделать это, не инициируя совершение транзакции? – DorianWilde

+0

На самом деле, в методе beforeCommit вы находитесь «посередине» tx. GraphAware Framework предоставляет вам возможность «просматривать» две версии графика - до и после. Так что это частично соответствовало бы вашим критериям. Но я не думаю, что в настоящее время есть способ сделать это, не пытаясь зафиксировать tx. –

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