Neo4J をデータベースとして使用して Wiki アプリケーションを開発しています。ユーザーによるトピックへの編集を追跡して、モッズが必要に応じてそれらを元に戻すことができるようにするための正しい手順とは何かについて疑問に思っていました。
すべての変更の前にすべての変更されたノードを保存し、古いバージョンを数週間程度保持することを考えていましたが、それは非常に高速で効率的な手順のようには思えません.
効率の良い方法とは思えませんが、これが唯一の方法です。少し改善できますが、古いデータをどこかに保存する必要があります。私がすることは、トランザクション ハンドラーをデータベースにアタッチすることです。次に、トランザクションがコミットされるたびに、変更/削除されたプロパティを収集し、どこかに保存します。変更されたプロパティのみを保存することで、スペースを少し節約できます。おそらく別のDBに保存しますが、それは完全にあなた次第です。
増分バックアップ機能を使用することもできますが、Neo4j の Enterprise Edition が必要です。(可能であれば、これがおそらくより良いオプションです。)
編集: トランザクション ハンドラはここにあります。そのインターフェイスを実装し、GraphDatabaseServiceのregisterTransactionEventHandlerメソッドを使用してデータベースに登録します。コードは、トランザクションがコミットされるたびに呼び出されます (Neo4j ではすべての変更をトランザクションに含める必要があるため、変更が行われるたびに呼び出されます)。
TransactionEventHandler インターフェースを扱うのは少し難しいです。彼らがあなたに渡すデータはあなたが必要とするすべてのものですが、それは非常に奇妙な形式です. それについてサポートが必要な場合は、SO でお気軽にお問い合わせください。それを手伝ってくれる人は(私も含めて)たくさんいます。
残念ながら、これは Java (または任意の JVM 言語、私は Scala を使用) で行う必要があると思います。ただし、Neo4j はすでに JVM を実行しているため、これを行うために別の JVM を開始する必要はありません。また、TransactionEventHandler から Node.js にデータを取得する方法を探している場合は、まさにその目的のためにApache Thriftを使用します。
お役に立てれば。