Hello,
I have a problem with repository (OWLIM SE 5.1.5208) with property
enablePredicateList set to true. Documentation says that such
configuration should speed up queries that use wildcard predicate
patterns but our tests show the opposite. Please, see the attached test
class - it creates a repository with little data and executes very
simple query:
PREFIX foaf:<http://xmlns.com/foaf/0.1/>
select * WHERE {
<resource:1> foaf:knows ?person2 .
?person2 ?pred ?obj
}
Here are the results (with predicate list enabled and disabled):
Execute queries with predicate list enabled
Executing query q1
Result count: 2 in 2,555 s.
Execute queries with predicate list disabled
Executing query q1
Result count: 2 in 0,000 s.
--
Best regards,
Krzysztof Sielski
Poznan Supercomputing and Networking Center
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.openrdf.model.Graph;
import org.openrdf.model.Resource;
import org.openrdf.model.URI;
import org.openrdf.model.impl.GraphImpl;
import org.openrdf.model.impl.LiteralImpl;
import org.openrdf.model.impl.StatementImpl;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.model.impl.ValueFactoryImpl;
import org.openrdf.model.vocabulary.RDF;
import org.openrdf.model.vocabulary.RDFS;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.config.RepositoryConfig;
import org.openrdf.repository.config.RepositoryConfigException;
import org.openrdf.repository.config.RepositoryConfigSchema;
import org.openrdf.repository.manager.LocalRepositoryManager;
import org.openrdf.repository.manager.RepositoryManager;
import org.openrdf.repository.sail.config.SailRepositorySchema;
import org.openrdf.sail.config.SailConfigSchema;
/**
*
* @author Krzysztof Sielski
*/
public class OwlimTestCaseWildcardPredicate {
private static final String REPO_ID = "repo";
private static URI foaf_knows = new
URIImpl("http://xmlns.com/foaf/0.1/knows");
private static URI foaf_name = new
URIImpl("http://xmlns.com/foaf/0.1/name");
private static final String q1 = ""
+ "PREFIX foaf:<http://xmlns.com/foaf/0.1/>"
+ "select * WHERE {"
+ " <resource:1> foaf:knows ?person2 ."
+ " ?person2 ?pred ?obj"
+ "} ";
public static void main(String[] args)
throws Exception {
RepositoryManager manager = new LocalRepositoryManager(new
File("."));
manager.initialize();
try {
initRepository(manager, true);
insertInitialData(manager);
System.out.println("Execute queries with predicate list
enabled");
executeQueries(manager);
initRepository(manager, false);
System.out.println("Execute queries with predicate list
disabled");
executeQueries(manager);
} finally {
manager.shutDown();
}
}
private static void executeQueries(RepositoryManager manager)
throws Exception {
Repository repo = manager.getRepository(REPO_ID);
repo.initialize();
RepositoryConnection con = repo.getConnection();
con.setAutoCommit(false);
System.out.println("Executing query q1");
executeQuery(q1, con);
con.close();
repo.shutDown();
}
private static void executeQuery(String query, RepositoryConnection
con) {
try {
TupleQueryResult result =
con.prepareTupleQuery(QueryLanguage.SPARQL, query).evaluate();
int resultCount = 0;
long time = System.currentTimeMillis();
while (result.hasNext()) {
result.next();
resultCount++;
}
time = System.currentTimeMillis() - time;
System.out.printf("Result count: %d in %.3f s.\n",
resultCount, time / 1000.0);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void insertInitialData(RepositoryManager manager)
throws Exception {
Repository repo = manager.getRepository(REPO_ID);
RepositoryConnection con = repo.getConnection();
con.setAutoCommit(false);
// add objects
final int peopleCount = 500000;
for (int i = 0; i < peopleCount; i++) {
URI person = new URIImpl("resource:" + i);
con.add(person, foaf_knows, new URIImpl("resource:" +
(i + 1)));
con.add(person, foaf_name, new LiteralImpl("name_" +
i));
if (i % 1000 == 0) {
con.commit();
}
}
con.commit();
con.close();
}
private static void initRepository(RepositoryManager manager, boolean
enablePredicateList)
throws Exception {
// create repository
HashMap<URI, String> properties = new HashMap<URI, String>();
properties.put(new
URIImpl("http://www.ontotext.com/trree/owlim#ruleset"), "empty");
properties.put(new
URIImpl("http://www.ontotext.com/trree/owlim#transaction-mode"), "fast");
properties.put(new
URIImpl("http://www.ontotext.com/trree/owlim#transaction-isolation"), "false");
properties.put(new
URIImpl("http://www.ontotext.com/trree/owlim#enable-literal-index"), "false");
properties.put(new
URIImpl("http://www.ontotext.com/trree/owlim#enablePredicateList"),
Boolean.toString(enablePredicateList));
RepositoryConfig conf = createRepositoryConfig(REPO_ID,
"descr", properties);
manager.addRepositoryConfig(conf);
}
private static RepositoryConfig createRepositoryConfig(String id,
String description, Map<URI, String> properties)
throws RepositoryConfigException {
Graph configGraph = new GraphImpl();
Resource repositoryNode =
ValueFactoryImpl.getInstance().createBNode();
Resource repositoryImplNode =
ValueFactoryImpl.getInstance().createBNode();
Resource sailImplNode =
ValueFactoryImpl.getInstance().createBNode();
configGraph.add(new StatementImpl(repositoryNode, RDF.TYPE,
RepositoryConfigSchema.REPOSITORY));
configGraph.add(new StatementImpl(repositoryNode,
RepositoryConfigSchema.REPOSITORYID, new LiteralImpl(id)));
configGraph.add(new StatementImpl(repositoryNode, RDFS.LABEL,
new LiteralImpl(description)));
configGraph.add(new StatementImpl(repositoryNode,
RepositoryConfigSchema.REPOSITORYIMPL, repositoryImplNode));
configGraph.add(new StatementImpl(repositoryImplNode,
RepositoryConfigSchema.REPOSITORYTYPE,
new LiteralImpl("openrdf:SailRepository")));
configGraph.add(new StatementImpl(repositoryImplNode,
SailRepositorySchema.SAILIMPL, sailImplNode));
configGraph.add(new StatementImpl(sailImplNode,
SailConfigSchema.SAILTYPE, new LiteralImpl("owlim:Sail")));
for (Map.Entry<URI, String> configEntry :
properties.entrySet()) {
configGraph.add(new StatementImpl(sailImplNode,
configEntry.getKey(), new LiteralImpl(configEntry.getValue())));
}
RepositoryConfig config = RepositoryConfig.create(configGraph,
repositoryNode);
return config;
}
}
_______________________________________________
Owlim-discussion mailing list
[email protected]
http://ontomail.semdata.org/cgi-bin/mailman/listinfo/owlim-discussion