scala - 来自 Java 的 Neo4j 嵌入式在线备份

标签 scala neo4j database-backups graph-databases

我在我的项目中使用 Neo4j(嵌入式)企业版 1.9.4 以及 Scala-Neo4j 包装器。我尝试使用 Java 备份 Neo4j 数据,如下所示

  def backup_data()
  {
        val backupPath: File = new File("D:/neo4j-enterprise-1.9.4/data/backup/")
        val backup = OnlineBackup.from( "127.0.0.1" )
        if(backupPath.list().length > 0)
        {
            backup.incremental( backupPath.getPath() )
        }
        else
        {
        backup.full( backupPath.getPath() );
        }
  }

完整备份工作正常。但是增量备份部分抛出空指针异常。

我哪里错了?

编辑

通过 Scala-Neo4j 包装器构建 GraphDatabase 实例

class MyNeo4jClass extends SomethingClass with Neo4jWrapper with EmbeddedGraphDatabaseServiceProvider {
  def neo4jStoreDir = "/tmp/temp-neo-test"
  . . .
}

堆栈跟踪

Exception in thread "main" java.lang.NullPointerException
    at org.neo4j.consistency.checking.OwnerChain$3.checkReference(OwnerChain.java:111)
    at org.neo4j.consistency.checking.OwnerChain$3.checkReference(OwnerChain.java:106)
    at org.neo4j.consistency.report.ConsistencyReporter$DiffReportHandler.checkReference(ConsistencyReporter.java:330)
    at org.neo4j.consistency.report.ConsistencyReporter.dispatchReference(ConsistencyReporter.java:109)
    at org.neo4j.consistency.report.PendingReferenceCheck.checkReference(PendingReferenceCheck.java:50)
    at org.neo4j.consistency.store.DirectRecordReference.dispatch(DirectRecordReference.java:39)
    at org.neo4j.consistency.report.ConsistencyReporter$ReportInvocationHandler.forReference(ConsistencyReporter.java:236)
    at org.neo4j.consistency.report.ConsistencyReporter$ReportInvocationHandler.dispatchForReference(ConsistencyReporter.java:228)
    at org.neo4j.consistency.report.ConsistencyReporter$ReportInvocationHandler.invoke(ConsistencyReporter.java:192)
    at $Proxy17.forReference(Unknown Source)
    at org.neo4j.consistency.checking.OwnerChain.check(OwnerChain.java:143)
    at org.neo4j.consistency.checking.PropertyRecordCheck.checkChange(PropertyRecordCheck.java:57)
    at org.neo4j.consistency.checking.PropertyRecordCheck.checkChange(PropertyRecordCheck.java:35)
    at org.neo4j.consistency.report.ConsistencyReporter.dispatchChange(ConsistencyReporter.java:101)
    at org.neo4j.consistency.report.ConsistencyReporter.forPropertyChange(ConsistencyReporter.java:382)
    at org.neo4j.consistency.checking.incremental.StoreProcessor.checkProperty(StoreProcessor.java:61)
    at org.neo4j.consistency.checking.AbstractStoreProcessor.processProperty(AbstractStoreProcessor.java:95)
    at org.neo4j.consistency.store.DiffRecordStore$DispatchProcessor.processProperty(DiffRecordStore.java:207)
    at org.neo4j.kernel.impl.nioneo.store.PropertyStore.accept(PropertyStore.java:83)
    at org.neo4j.kernel.impl.nioneo.store.PropertyStore.accept(PropertyStore.java:43)
    at org.neo4j.consistency.store.DiffRecordStore.accept(DiffRecordStore.java:159)
    at org.neo4j.kernel.impl.nioneo.store.RecordStore$Processor.applyById(RecordStore.java:180)
    at org.neo4j.consistency.store.DiffStore.apply(DiffStore.java:73)
    at org.neo4j.kernel.impl.nioneo.store.StoreAccess.applyToAll(StoreAccess.java:174)
    at org.neo4j.consistency.checking.incremental.IncrementalDiffCheck.execute(IncrementalDiffCheck.java:43)
    at org.neo4j.consistency.checking.incremental.DiffCheck.check(DiffCheck.java:39)
    at org.neo4j.consistency.checking.incremental.intercept.CheckingTransactionInterceptor.complete(CheckingTransactionInterceptor.java:160)
    at org.neo4j.kernel.impl.transaction.xaframework.InterceptingXaLogicalLog$1.intercept(InterceptingXaLogicalLog.java:79)
    at org.neo4j.kernel.impl.transaction.xaframework.XaLogicalLog$LogDeserializer.readAndWriteAndApplyEntry(XaLogicalLog.java:1120)
    at org.neo4j.kernel.impl.transaction.xaframework.XaLogicalLog.applyTransaction(XaLogicalLog.java:1292)
    at org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager.applyCommittedTransaction(XaResourceManager.java:766)
    at org.neo4j.kernel.impl.transaction.xaframework.XaDataSource.applyCommittedTransaction(XaDataSource.java:246)
    at org.neo4j.com.ServerUtil.applyReceivedTransactions(ServerUtil.java:423)
    at org.neo4j.backup.BackupService.unpackResponse(BackupService.java:453)
    at org.neo4j.backup.BackupService.incrementalWithContext(BackupService.java:388)
    at org.neo4j.backup.BackupService.doIncrementalBackup(BackupService.java:286)
    at org.neo4j.backup.BackupService.doIncrementalBackup(BackupService.java:273)
    at org.neo4j.backup.OnlineBackup.incremental(OnlineBackup.java:147)
    at Saddahaq.User_node$.backup_data(User_node.scala:1637)
    at Saddahaq.User_node$.main(User_node.scala:2461)
    at Saddahaq.User_node.main(User_node.scala)

最佳答案

备份完成后,会检查备份目标的一致性。一致性检查器的增量版本目前存在导致观察到的 NPE 的错误。

解决方法:始终使用 backup.full 进行完整备份,或者使用

阻止对增量备份进行一致性检查
backup.incremental(backupPath.getPath(), false);

关于scala - 来自 Java 的 Neo4j 嵌入式在线备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20186895/

相关文章:

scala - 我在哪里可以了解如何为 Scala 宏构建 AST?

multithreading - 可以从Scala的子线程中更改局部变量

node.js - 使用 node.js 发布到 Neo4j 服务器

c# - neo4jclient 不支持表达式类型 Add

sql-server - 备份数据库时覆盖文件

scala - 如何编写 Spark UDF,它将 Array[StructType]、StructType 作为输入并返回 Array[StructType]

algorithm - 树中的最大元素

python - 如何用 Python 为 neo4j 定义遍历?

postgresql - pg_restore 重复键和无效命令错误

php - 有什么脚本可以做完整的远程备份吗?