0

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

1 回答 1

1

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

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

您需要确保 TDB 有 1G(64 位)或 2G(32 位 java)的堆用于它的缓存。TDB 使用 64 位和堆上的内存映射文件。

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

于 2015-04-25T09:33:01.287 回答