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

最佳答案

您的示例中的model.read不会将所有内容读取到内存中,因为它由TDB支持。

在servlet中加载大型文件并不是很好的用户体验。
您可以使用批量加载器提前加载文件吗?

您需要确保TDB的缓存具有1G(64位)或2G(32位Java)的堆。 TDB使用64位以及堆上的内存映射文件。

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

10-06 14:07