/*
* Copyright 2012 Research Studios Austria Forschungsges.m.b.H.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package won.protocol.model.util;
import org.apache.jena.query.Dataset;
import org.apache.jena.query.DatasetFactory;
import org.apache.commons.lang3.time.StopWatch;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFDataMgr;
import org.junit.Ignore;
import org.junit.Test;
import won.protocol.util.RdfUtils;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Vector;
public class RdfIoSpeedTest
{
@Test
@Ignore
public void compareTrigRdfthriftNquads() throws IOException {
Dataset dataset = DatasetFactory.createGeneral();
Path infile = Paths.get("won-core/src/test/resources/speedtest/dataset.trig");
byte[] dataTrig = Files.readAllBytes(infile);
infile = Paths.get("won-core/src/test/resources/speedtest/dataset.rdft");
byte[] dataRdft = Files.readAllBytes(infile);
infile = Paths.get("won-core/src/test/resources/speedtest/dataset.nq");
byte[] dataRdfq = Files.readAllBytes(infile);
StopWatch watch = new StopWatch();
watch.start();
for (int i = 0; i < 10000; i++){
RDFDataMgr.read(dataset, new ByteArrayInputStream(dataTrig), Lang.TRIG);
}
watch.stop();
System.out.println("trig reading took: " + watch.getTime());
watch = new StopWatch();
watch.start();
for (int i = 0; i < 10000; i++){
RDFDataMgr.write(new ByteArrayOutputStream(), dataset, Lang.TRIG);
}
watch.stop();
System.out.println("trig writing took: " + watch.getTime());
watch = new StopWatch();
watch.start();
for (int i = 0; i < 10000; i++){
RDFDataMgr.read(dataset, new ByteArrayInputStream(dataRdfq), Lang.NQUADS);
}
watch.stop();
System.out.println("nquads reading took: " + watch.getTime());
watch = new StopWatch();
watch.start();
for (int i = 0; i < 10000; i++){
RDFDataMgr.write(new ByteArrayOutputStream(), dataset, Lang.NQUADS);
}
watch.stop();
System.out.println("nquads writing took: " + watch.getTime());
watch = new StopWatch();
watch.start();
for (int i = 0; i < 10000; i++){
RDFDataMgr.read(dataset, new ByteArrayInputStream(dataRdft), Lang.RDFTHRIFT);
}
watch.stop();
System.out.println("rdf-thrift reading took: " + watch.getTime());
watch = new StopWatch();
watch.start();
for (int i = 0; i < 10000; i++){
RDFDataMgr.write(new ByteArrayOutputStream(), dataset, Lang.RDFTHRIFT);
}
watch.stop();
System.out.println("rdf-thrift writing took: " + watch.getTime());
}
@Test
@Ignore
public void compareCollectBytesVsCollectDatasets() throws IOException {
Dataset dataset = DatasetFactory.createGeneral();
Path infile = Paths.get("won-core/src/test/resources/speedtest/dataset.trig");
byte[] dataTrig = Files.readAllBytes(infile);
infile = Paths.get("won-core/src/test/resources/speedtest/dataset.rdft");
byte[] dataRdft = Files.readAllBytes(infile);
infile = Paths.get("won-core/src/test/resources/speedtest/dataset.nq");
byte[] dataRdfq = Files.readAllBytes(infile);
StopWatch watch = new StopWatch();
watch.start();
for (int i = 0; i < 10000; i++){
Dataset additionalDataset = DatasetFactory.createGeneral();
RDFDataMgr.read(additionalDataset, new ByteArrayInputStream(dataRdfq), Lang.NQUADS);
RdfUtils.addDatasetToDataset(dataset, additionalDataset);
}
watch.stop();
System.out.println("collecting in dataset took: " + watch.getTime());
watch = new StopWatch();
watch.start();
ByteArrayOutputStream out = new ByteArrayOutputStream();
for (int i = 0; i < 10000; i++){
out.write(dataRdfq);
}
Dataset additionalDataset = DatasetFactory.createGeneral();
RDFDataMgr.read(additionalDataset, new ByteArrayInputStream(out.toByteArray()), Lang.NQUADS);
watch.stop();
System.out.println("collecting in byteArrays took: " + watch.getTime());
watch = new StopWatch();
watch.start();
Vector<InputStream> streams = new Vector<>(10000);
for (int i = 0; i < 10000; i++){
streams.add(new ByteArrayInputStream(dataRdfq));
}
additionalDataset = DatasetFactory.createGeneral();
RDFDataMgr.read(additionalDataset, new SequenceInputStream(streams.elements()), Lang.NQUADS);
watch.stop();
System.out.println("collecting in vector -> sequenceInputStream took: " + watch.getTime());
watch = new StopWatch();
watch.start();
ArrayList<InputStream> streamsList = new ArrayList<>(10000);
for (int i = 0; i < 10000; i++){
streamsList.add(new ByteArrayInputStream(dataRdfq));
}
additionalDataset = DatasetFactory.createGeneral();
RDFDataMgr.read(additionalDataset, new SequenceInputStream(Collections.enumeration(streamsList)), Lang.NQUADS);
watch.stop();
System.out.println("collecting in arrayList -> sequenceInputStream took: " + watch.getTime());
watch = new StopWatch();
watch.start();
InputStream[] streamsArr = new InputStream[10000];
for (int i = 0; i < 10000; i++){
streamsArr[i] = new ByteArrayInputStream(dataRdfq);
}
additionalDataset = DatasetFactory.createGeneral();
RDFDataMgr.read(additionalDataset, new SequenceInputStream(new Enumeration(){
int index = 0;
@Override
public boolean hasMoreElements() {
return index < streamsArr.length;
}
@Override
public Object nextElement() {
return streamsArr[index++];
}
}), Lang.NQUADS);
watch.stop();
System.out.println("collecting in array -> sequenceInputStream took: " + watch.getTime());
}
}