jena model.read时间和内存问题

时间:2015-04-24 16:04:45

标签: java rdf jena tdb

我正在尝试分析我使用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);   

1 个答案:

答案 0 :(得分:1)

在您的示例中,

model.read不会将所有内容读入内存,因为它由TDB支持。

在servlet中加载大型文件并不是一个非常好的用户体验。 您可以使用批量加载程序提前加载文件吗?

您需要确保TDB为其缓存提供1G(64位)或2G(32位java)堆。 TDB使用64位上的内存映射文件以及堆。

您可以使用RDFDataMgr.parse`以流方式处理RDF。