/*
* Copyright (c) 2010 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.rdfbean.sesame.load;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import com.mysema.rdfbean.domains.LoadDomain;
import com.mysema.rdfbean.model.MiniRepository;
import com.mysema.rdfbean.model.Repository;
import com.mysema.rdfbean.object.Configuration;
import com.mysema.rdfbean.object.DefaultConfiguration;
import com.mysema.rdfbean.object.FlushMode;
import com.mysema.rdfbean.object.Session;
import com.mysema.rdfbean.object.SessionFactoryImpl;
import com.mysema.rdfbean.sesame.MemoryRepository;
import com.mysema.rdfbean.sesame.NativeRepository;
import com.mysema.rdfbean.sesame.SessionTestBase;
import com.mysema.util.FileUtils;
public class LoadTest extends SessionTestBase implements LoadDomain {
private StringWriter writer = new StringWriter();
private Configuration configuration;
@Before
public void setUp() {
configuration = new DefaultConfiguration(Revision.class, Entity.class, Document.class);
}
@After
public void tearDown() throws IOException {
FileUtils.delete(new File("target/native"));
}
@Test
@Ignore
public void test() throws IOException {
loadTest("MiniRepository", new MiniRepository());
// Sesame repositories
loadTest("MemoryStore, local inference", new MemoryRepository(null, false));
loadTest("MemoryStore, local inference, synced", new MemoryRepository(new File("target/mem"), 10, false));
loadTest("NativeStore, local inference", new NativeRepository(new File("target/native"), false));
// loadTest("MemoryStore, sesame inference", new MemoryRepository(null,
// true));
// loadTest("MemoryStore, sesame inferencem, synced", new
// MemoryRepository(new File("target/mem"), 10, true));
// loadTest("NativeStore, sesame inference", new NativeRepository(new
// File("target/native"), true));
System.out.println(writer);
}
private void loadTest(String label, Repository repository) throws IOException {
writer.write("testing " + label + "\n");
// if (repository instanceof SesameRepository){
// ((SesameRepository)repository).setOntology(ontology);
// }
for (int size : Arrays.asList(10, 50, 100, 500, 1000, 5000, 10000, 50000)) {
SessionFactoryImpl sessionFactory = new SessionFactoryImpl(Locale.ENGLISH);
sessionFactory.setConfiguration(configuration);
sessionFactory.setRepository(repository);
sessionFactory.initialize();
Session localSession = sessionFactory.openSession();
try {
loadTest(localSession, size);
} finally {
localSession.close();
sessionFactory.close();
FileUtils.delete(new File("target/mem"));
FileUtils.delete(new File("target/native"));
}
}
writer.write("\n");
}
private void loadTest(Session session, int size) {
session.setFlushMode(FlushMode.MANUAL);
List<Object> objects = new ArrayList<Object>();
for (int i = 0; i < size; i++) {
Document document = new Document();
document.text = UUID.randomUUID().toString();
objects.add(document);
Entity entity = new Entity();
entity.document = document;
entity.text = UUID.randomUUID().toString();
objects.add(entity);
for (int created : Arrays.asList(1, 2, 3, 4, 5, 6)) {
Revision rev = new Revision();
rev.svnRevision = 1;
rev.revisionOf = entity;
rev.created = created;
objects.add(rev);
}
}
long t1 = System.currentTimeMillis();
for (Object o : objects) {
session.save(o);
}
long t2 = System.currentTimeMillis();
session.flush();
long t3 = System.currentTimeMillis();
session.clear();
session.findInstances(Document.class);
session.findInstances(Entity.class);
session.findInstances(Revision.class);
long t4 = System.currentTimeMillis();
// size, save time, flush time, load time
writer.write(";" + objects.size() + ";" + (t2 - t1) + ";" + (t3 - t2) + ";" + (t4 - t3) + "\n");
}
}