2013-07-17 4 views
0

Я разрабатываю приложение Wiki, используя базу данных Neo4J. Мне было интересно, что является/является правильной процедурой (-ами), чтобы отслеживать изменения пользователей по темам, чтобы моды могли их отменить, когда это необходимо.Изменение базы данных в Neo4J

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

ответ

2

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

Вы также можете использовать функцию инкрементной резервной копии, но для этого требуется корпоративная версия Neo4j. (Вероятно, это лучший вариант, если это возможно.)

EDIT: Обработчик транзакций можно найти here. Внедрите этот интерфейс, затем зарегистрируйте его в базе данных с помощью метода registerTransactionEventHandler в GraphDatabaseService. Ваш код будет вызываться каждый раз, когда транзакция будет совершена (и поскольку Neo4j требует, чтобы все изменения были в транзакциях, он будет вызываться в любое время, когда будет произведено изменение).

Интерфейс TransactionEventHandler с трудом работает. Данные, которые они передают вам, - это все, что вам нужно, но это очень странный формат. Если вам нужна помощь в этом, не стесняйтесь спрашивать здесь. Есть много людей (включая меня), которые могли бы помочь вам в этом.

К сожалению, я думаю, что это должно быть сделано на Java (или на любом языке JVM, я использую Scala). Но так как Neo4j уже запускает JVM, вам не нужно начинать с этого другого. Кроме того, если вы ищете способ получить данные из TransactionEventHandler в Node.js, я использую Apache Thrift для этой конкретной цели.

Надеюсь, это поможет.

+0

Спасибо за ответ! Просто вопрос: что вы подразумеваете под «прикреплением обработчика транзакций к вашей базе данных»? Это делается через [cypher] (http://api.neo4j.org/1.2/org/neo4j/graphdb/event/TransactionEventHandler.html) или в серверном коде (я использую node.js)? Кроме того, имеет ли эта процедура имя (для дальнейших исследований по этому вопросу)? Спасибо – Sovos

+0

Я пошел вперед и обновил свой пост с дополнительной информацией. – GJK

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