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

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

person emrahozkan    schedule 24.04.2015    source источник


Ответы (1)


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

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

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

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

person AndyS    schedule 25.04.2015