- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个问题要问你:
我想在我的 Jena TDB TripleStore 上加载一个文件。我的文件很大,大约80Mb,大约700000个三倍RDF。当我尝试加载它时,执行停止工作或需要很长时间。
我正在使用在 Web 服务上运行的代码:
String file = "C:\\file.nt";
String directory;
directory = "C:\\tdb";
Dataset dataset = TDBFactory.createDataset(directory);
Model model = ModelFactory.createDefaultModel();
TDBLoader.loadModel(model, file );
dataset.addNamedModel("http://nameFile", model);
return model;
有时我会收到 Java 堆空间错误:
Caused by: java.lang.OutOfMemoryError: Java heap space
at org.apache.jena.riot.tokens.TokenizerText.parseToken(TokenizerText.java:170)
at org.apache.jena.riot.tokens.TokenizerText.hasNext(TokenizerText.java:86)
at org.apache.jena.atlas.iterator.PeekIterator.fill(PeekIterator.java:50)
at org.apache.jena.atlas.iterator.PeekIterator.next(PeekIterator.java:92)
at org.apache.jena.riot.lang.LangEngine.nextToken(LangEngine.java:99)
at org.apache.jena.riot.lang.LangNTriples.parseOne(LangNTriples.java:67)
at org.apache.jena.riot.lang.LangNTriples.runParser(LangNTriples.java:54)
at org.apache.jena.riot.lang.LangBase.parse(LangBase.java:42)
at org.apache.jena.riot.RDFParserRegistry$ReaderRIOTFactoryImpl$1.read(RDFParserRegistry.java:142)
at org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:859)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:255)
at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:241)
at org.apache.jena.riot.adapters.RDFReaderRIOT_Web.read(RDFReaderRIOT_Web.java:96)
at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:241)
at com.hp.hpl.jena.tdb.TDBLoader.loadAnything(TDBLoader.java:294)
at com.hp.hpl.jena.tdb.TDBLoader.loadModel(TDBLoader.java:125)
at com.hp.hpl.jena.tdb.TDBLoader.loadModel(TDBLoader.java:119)
如何在 Jena 模型中加载此文件并将其保存在 TDB 中?提前致谢。
最佳答案
您需要allocate more memory for your JVM at statup 。当你的数据太少时,进程将花费太多时间执行垃圾收集,并最终失败。
例如,通过以下方式启动具有 4 GB 内存的 JVM:
java -Xms4G -XmxG
如果您使用的是 Eclipse 等 IDE,则可以 change your run configuration以便应用程序也有额外的内存。
除此之外,我注意到的唯一变化是您在实际加载操作中使用内存中模型,而实际上您可以使用 TDB 支持的模型。这有助于缓解内存问题,因为 TDB 会动态地将其索引移动到磁盘。
更改:
Dataset dataset = TDBFactory.createDataset(directory);
Model model = ModelFactory.createDefaultModel();
TDBLoader.loadModel(model, file );
dataset.addNamedModel("http://nameFile", model);
对此:
Dataset dataset = TDBFactory.createDataset(directory);
Model model = dataset.getNamedModel("http://nameFile");
TDBLoader.loadModel(model, file );
现在,您的系统取决于 TDB 做出正确决策的能力:何时将数据保留在内存中以及何时将其刷新到磁盘。
关于java - 如何在 TDB TripleStore 中加载模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25850288/
目前持久化图形结构的最佳选择是什么?图数据库(例如 Neo4j )或 RDF 三元存储(例如 Virtuoso )? 例如,我们有以下用例: 具有近 10M 个节点的弱连接图(类似于集合中的一篇学术论
使用三元组意味着我们要使用一个包含 3 个列和 7 个索引的表的数据库?我的意思是使用三重存储总是与该关系模型相关? 最佳答案 来自 http://en.wikipedia.org/wiki/Trip
我目前正在计划一个包含大数据的大项目。 我已经使用了搜索,所有结果都告诉我,如果不使用诸如 BaseKB 之类的 3rd 方工具,不可能将 Freebase 导入任何三元组商店。或 Freebase
我正在试验 Sesame 和 Virtuoso Triplestores。目前,我使用 Sesame Java API 将 RDF 数据添加到两个 Triplestore。 我的 RDF 数据代表不同
我有一个问题要问你: 我想在我的 Jena TDB TripleStore 上加载一个文件。我的文件很大,大约80Mb,大约700000个三倍RDF。当我尝试加载它时,执行停止工作或需要很长时间。 我
我需要将 RDF 数据从三元组传输到属性表。下面给出了三重存储和属性表的示例。 三重存储 Subject Property Object Sub1 prop1 hello Sub2 prop1
我正在尝试使用 ajax 从 Sesame Triplestore 检索数据。这可能是 CORS 问题,我正在尝试使用 CORS 过滤器来解决它。我的假设正确还是我需要更改代码中的某些内容? $(do
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我已经使用 Apache Jena 构建了一个 TDB-Store,现在我想使用我的商店中的数据来实现一些不错的可视化效果。所以毕竟有必要使用 JavaScript 访问我的 TDB。 我想,有两种可
我最近使用 Java EE 开发了一个“经典”3 层 Web 应用程序。 我使用 GlassFish 作为应用程序服务器,使用 MS SQL Server 作为 DBMS,并使用带有 primefac
我想使用 tdbloader 将 YAGO 3 rdf 三元组(来自 http://www.mpi-inf.mpg.de/departments/databases-and-information-s
我想在带有 Tomcat 服务器的 Eclipse WTP 项目中使用 openrdf-sesame triplestore。我需要将一些示例日期放入此三重存储中,以便在我的 wtp 项目中使用它。
众所周知,基于 Sparql 的存储或换句话说 TripleStore 的效率低于属性图存储,而且无法在保持属性图性能的同时进行分发。 我知道这里有很多事关紧要,例如推理等等。将分布和推理放在一边,我
我是一名优秀的程序员,十分优秀!