Titan BatchLoading berkeleydb 不持久
Posted
技术标签:
【中文标题】Titan BatchLoading berkeleydb 不持久【英文标题】:Titan BatchLoading berkeleydb not persistent 【发布时间】:2015-03-07 05:41:46 【问题描述】:我真的不知道我的问题出在哪里。 我使用的是 Titan 0.5.0(新的 Titan 版本也存在同样的问题......)
我想将具有 100k 个条目(每行至少有 3 个节点和一些边)的 csv 文件中的一组顶点和边加载到我的图中。 最终完成导入大约需要 5 分钟。
所以我尝试了相同的配置storage.batch-loading = true.
只需 2 分钟即可完成导入,速度明显更快。
但问题是,如果我打开storage.batch-loading = true
选项,节点和边不会持久保存到数据库中。所以如果我关闭 Gremlin 并重新打开我的图表,它是空的。
storage.batch-loading
设置为 false,它就像一个魅力。这需要更长的时间,但条目会永久保存。
是的,我在导入后提交 Batchgraph 以及图形本身。 我错过了什么吗?
在此示例中,我只想导入大约 30k 节点进行测试,但它们也不会持久保存。 配置:
storage.backend=berkeleyje
storage.directory=graph
storage.batch-loading = true
query.fast-property = true
Gremlin 脚本:
g = TitanFactory.open("../graphs/batchImportTest2/batchImportTest2.properties")
//1 Prepare Graph for import
m = g.getManagementSystem();
username = m.makePropertyKey('username').dataType(String.class).make()
m.buildIndex('byUsername',Vertex.class).addKey(username).unique().buildCompositeIndex()
email = m.makePropertyKey('email').dataType(String.class).make()
m.buildIndex('byEmail',Vertex.class).addKey(email).unique().buildCompositeIndex()
m.commit()
g.commit()
//2 Import Nodes and Edges
bg = new BatchGraph(g, VertexIDType.STRING, 50000)
new File("userInfo_js.txt").eachLine( final String line ->def (username,email) = line.split('\t')*.trim();def userVertex = bg.getVertex(username) ?: bg.addVertex(username); userVertex.setProperty("username", username);userVertex.setProperty("email", email))
bg.commit()
g.commit()
【问题讨论】:
【参考方案1】:我试图重现它,但一切都按预期工作。有关我的 shell 会话的完整记录,请参阅我的 Gist,也许您会发现其中的不同:
https://gist.github.com/dkuppitz/5319a2fa7f9a8069fa15
【讨论】:
你好丹尼尔,感谢你的时间和回答。好吧,如果我像你一样做同样的事情(user.txt 有 11 个用户......),它对我也很有效。我能发现的唯一两个区别是你使用的是 linux 而我使用的是 windows。最后你有一个“g.shutdown()”。但。只有电子邮件和用户名的小用户文件仅用于测试批量导入。我确实有一个包含 100k 条目的大文件,以及在批量导入时创建的更多节点、属性和边。而且它仍然不起作用,最后也没有“g.shutdown()”。 ... ...但我可以发现,最后使用小用户文件和“g.shutdown()”,图表以“exit”关闭。如果我对我的大文件尝试相同的过程,则图形不会以“退出”关闭。它保持在您无法输入任何内容的状态,gremlin 行一开始就消失了,但它没有关闭窗口。这应该是这样的吗?或者这与我的问题有关?非常感谢您的帮助!g.shutdown()
在旧版本中自动完成,然后被删除,我猜它又回到了新版本(0.9+)中。所以,是的,你所看到的有点意料之中,因为 shell 正在等待一些后台线程,这些线程在没有明确的g.shutdown()
的情况下永远不会终止,当你使用 CTRL+C 强制关闭 shell 时,这反过来会导致一些奇怪的效果.
啊好吧。但是,即使我将 g.shutdown 添加到我的代码中,它也不会通过我的大导入保存数据持久性:/ 正如我所说,它现在可以与小用户导入一起使用。但是使用相同的设置和命令它不会与大文件一起使用......
可能是内存问题,可能是解析器错误?我的下一步是截断大文件并重试。喜欢head -n10000 hugefile.txt > truncated.txt
。以上是关于Titan BatchLoading berkeleydb 不持久的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Cassandra 存储后端删除 Titan 中的图形?
如何在 .net mvc 中使用 c# 创建和删除边缘属性(Titan 1.0)?