jena model.read время и проблема с памятью

Я пытаюсь проанализировать большие наборы данных для моего семантического веб-проекта, который я создал с помощью eclipse / jena. Я использую базу данных tdb, которая прекрасно работает для 2 ГБ, но у меня возникают проблемы с памятью файлов более 6 ГБ. Моя цель - извлечь все предикаты и объекты из источника данных (и записать их в файлы json). Есть ли способ, которым я могу напрямую запрашивать данные tdb, не загружая все в модель? Кроме того: модель.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 ответ

model.read в вашем примере не читает все в память, потому что она поддерживается TDB.

Загрузка файлов большого размера в сервлете не очень хороший пользовательский опыт. Можете ли вы загрузить файл заранее, используя загрузчик?

Вам нужно убедиться, что TDB имеет 1G (64-битную) или 2G (32-битную Java) кучу для его кешей. TDB использует отображенные в памяти файлы на 64-битной, а также кучи.

Вы можете обрабатывать RDF в потоковом режиме с помощью RDFDataMgr.parse`.

Другие вопросы по тегам