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`.