有没有比RDFDataMgr.parse(..)或RDFParser更快的方式(或更高效)流三元组/四元组?

时间:2018-02-13 16:08:53

标签: java jena

我希望找到更有效的方法来从大型数据集中传输RDF四元组/三元组。我一直在使用RDFDataMgr.parse(rdfStream, datasetLocation);RDFParser.source(datasetLocation).parse(rdfStream);,但是当数据集增长时,这两种解决方案都会受到影响。我做了一个实验,看看RDFDataMgr花了多长时间来解析不同大小的数据集。我考虑过:300000,500000,1000000,5000000,7500000,10000000作为基础,然后是182011590(真实数据集)。处理是线性的,但确实需要花费很多时间。每个数据集大小的平均时间如下:

300000 - 4421.1ms
500000 - 7184.6ms
1000000 - 14431.6ms
5000000 - 71926.3ms
7500000 - 116375.7ms
10000000 - 148588.8ms

平均而言,解析器每秒解析68265.38333三倍。此数字基于所有测试数据集的基准测试平均值。考虑到300k三元组需要解析~4s,这实际上非常耗时。

PipedRDFIterator和PipedRDFStream初始化如下:

int buffer = (int) (size * 0.10);
PipedRDFIterator iterator =  new PipedRDFIterator(buffer, true, 50 , 10000);
PipedRDFStream rdfStream = new PipedTriplesStream((PipedRDFIterator) iterator);
ExecutorService executor = Executors.newSingleThreadExecutor();

正如预期的那样,较大的数据集(182011590三倍)需要更多时间,1450001毫秒(约24分钟)。有趣的是,解析器平均每秒解析125525三倍。

我理解那里解析不只是从文件中读取并转储它,但它包括语法检查等...但是,有没有任何方法或任何Jena解析器可以加快解析时间?

我希望这对你有用。

谢谢!

编辑:我使用以下VM参数运行这些基准测试:3.1 GHz Intel Core i5上的-Xmx10g -Xms8g,2133 MHz RAM,2133 MHz和SSD驱动器

0 个答案:

没有答案