我正在尝试分析我使用eclipse / jena创建的语义Web项目的大型数据库。 我正在使用tdb数据库,它适用于2GB,但我遇到超过6GB的文件的内存问题。 我的目标是从数据源中提取所有谓词对象和主题(并将它们写入json文件)。有没有办法可以直接查询tdb数据而无需将所有内容加载到模型中? 另外:以下代码中的model.read是否也将整个数据存储在内存中?
HttpSession session = request.getSession();
session.setAttribute("dataSource", data);
ServletContext servletContext = request.getServletContext();
String tdbPath = servletContext.getRealPath("/tdb");
File dir = new File(contextPath);
Dataset dataset = TDBFactory.createDataset(tdbPath);
Model model = dataset.getDefaultModel();
InputStream str = FileManager.get().open(data);
model.read(str,null);
答案 0 :(得分:1)
model.read不会将所有内容读入内存,因为它由TDB支持。
在servlet中加载大型文件并不是一个非常好的用户体验。 您可以使用批量加载程序提前加载文件吗?
您需要确保TDB为其缓存提供1G(64位)或2G(32位java)堆。 TDB使用64位上的内存映射文件以及堆。
您可以使用RDFDataMgr.parse`以流方式处理RDF。