我使用BatchInserters.batchDatabase创建一个嵌入Neo4j的2.1.5数据的基础上。当我只把一个的小数量的数据放进去,一切正常罚款。BatchInserters.batchDatabase失败 - 有时 - 默默地坚持节点属性
但如果我增加投入数据的大小,的Neo4j未能坚持最新性能组具有的setProperty。在我调用shutdown之前,我可以用getProperty读回这些属性。当我用新的GraphDatabaseFactory()再次加载数据库时,newEmbeddedDatabase会丢失那些合适的。
奇怪的是,Neo4j不报告任何错误或抛出异常。所以我不知道什么地方出了问题或在哪里。 Java的应该有足够的内存来处理这两个小的数据库(数据库2.66 MIB,3000个节点,3000个关系)和大的(数据库26.32 MIB,197267个节点,390659个关系)
这对我来说很难提取一个正在运行的示例来向您显示问题,但如果这有帮助,我可以做。这里主要步骤我这样做,但:
def createDataBase(rules: AllRules) {
// empty the data base folder
deleteFileOrDirectory(new File(mainProjectPathNeo4j))
// Create an index on some properties
db = new GraphDatabaseFactory().newEmbeddedDatabase(mainProjectPathNeo4j)
engine = new ExecutionEngine(db)
createIndex()
db.shutdown()
// Fill the data base
db = BatchInserters.batchDatabase(mainProjectPathNeo4j)
//createBatchIndex
try {
// Every function loads some data
loadAllModulesBatch(rules)
loadAllLinkModulesBatch(rules)
loadFormalModulesBatch(rules)
loadInLinksBatch()
loadHILBatch()
createStandardLinkModules(rules)
createStandardLinkSets(rules)
// validateModel shows the problem
validateModel(rules)
} catch {
// I want to see if my environment (BIRT) is catching any exceptions
case _ => val a = 7
} finally {
db.shutdown()
}
}
validateModel是更新某些特性已经创建的节点的
def validateModule(srcM: GenericModule) {
srcM.node.setProperty("isValidated", true)
assert(srcM.node == Neo4jScalaDataSource.testNode)
assert(srcM.node eq Neo4jScalaDataSource.testNode)
assert(srcM.node.getProperty("isValidated").asInstanceOf[Boolean])
当我终于用Cypher支架得到一些数据传回 属性由validateModel设置缺失
class Neo4jScalaDataSet extends ScriptedDataSetEventAdapter {
override def beforeOpen(...) {
result = Neo4jScalaDataSource.engine.profile(
"""
MATCH (fm:FormalModule {isValidated: true}) RETURN fm.fullName as fullName, fm.uid as uid
""");
iter = result.iterator()
}
override def fetch(...) = {
if (iter.hasNext()) {
for (e <- iter.next().entrySet()) {
row.setColumnValue(e.getKey(), e.getValue())
}
count += 1;
row.setColumnValue("count", count)
return true
} else {
logger.log(Level.INFO, result.executionPlanDescription().toString())
return super.fetch(dataSet, row)
}
}
如果2.1.3或2.1.4也出现这种情况,您可以快速尝试吗?有多少最新物业遗失? – 2014-10-02 10:18:24
噢,请不要使用batchDatabase?请使用'BatchInserters.inserter'批处理数据库是本应该从未写过的泄漏抽象:) – 2014-10-02 10:45:16
由于我遇到了2.1.4版本的问题,我刚刚从2.1.4切换到2.1.5。但两者都表现出相同的效果。 – Rosswart 2014-10-02 11:46:38