Hi Pantelis:
Do you really need to use the REGEX ignore case feature?
If not, you can substitute some of your FILTER expressions by BGPs.
For example, replacing:
GRAPH <GraphCURI>{
?variableI <http://www.w3.org/2004/02/skos/core#notation>
?variableJ .
?variableI
<http://www.w3.org/2004/02/skos/core#prefLabel> ?variableK .
FILTER (isLiteral(?variableK) && REGEX(?variableK,
"literalA", "i"))
by
GRAPH <GraphCURI>{
?variableI <http://www.w3.org/2004/02/skos/core#notation>
?variableJ .
?variableI
<http://www.w3.org/2004/02/skos/core#prefLabel> "literalA" .
}
best
Lorena
On 28/09/16 10:13, Peter Lawrence
wrote:
Another observation I note is that there is a
common factor within each UNION:
GRAPH
<GraphABaseURI>{
?variableA a
graphA:ClassA .
?variableA
graphA:propertyA ?variableB .
?variableB
dcterms:title ?variableC .
?variableA
graphA:propertyB ?variableD .}
Could this be factored out to drive the overall query, and then
UNION the sub-selects on the other conditions?
Hi
Pantelis,
One thing that struck me as an other virtuoso user is
the joins in the filters.
e.g.
FILTER (?variableE = ?variableH)
I think if you remove all instances of ?variableH with
?variableE
you should get better results.
Hope that helps.
Regards,
Jerven
On 28/09/16 14:44, Pantelis Natsiavas wrote:
> Hi everybody.
>
> I have a rather complex SPARQL query, which is
executed thousands of
> times in parallel threads (400 threads). The query is
here somewhat
> simplified (namespaces, properties and variables have
been reduced) for
> readability, but the complexity is left untouched
(unions, number of
> graphs etc.). The query is run against 4 graphs, the
biggest of which
> contains 5561181 triples.
>
> PREFIX graphA: <GraphABaseURI:>
>
> ASK
> FROM NAMED <GraphBURI>
> FROM NAMED <GraphCURI>
> FROM NAMED <GraphABaseURI>
> FROM NAMED <GraphDBaseURI>
> WHERE{
> {
> GRAPH <GraphABaseURI>{
> ?variableA a graphA:ClassA .
> ?variableA graphA:propertyA ?variableB .
> ?variableB dcterms:title ?variableC .
> ?variableA graphA:propertyB ?variableD .
> ?variableL<GraphABaseURI:propertyB>
?variableD .
> ?variableD <propertyBURI> ?variableE
> }
> .
> GRAPH <GraphBURI>{
> ?variableF
<propertyCURI>/<propertyDURI> ?variableG .
> ?variableF <propertyEURI> ?variableH
> }
> .
> GRAPH <GraphCURI>{
> ?variableI <http://www.w3.org/2004/02/skos/core#notation>
> ?variableJ .
> ?variableI <http://www.w3.org/2004/02/skos/core#prefLabel>
> ?variableK .
> FILTER (isLiteral(?variableK) &&
REGEX(?variableK, "literalA", "i"))
> }
> .
> FILTER (isLiteral(?variableJ) &&
?variableG = ?variableJ) .
> FILTER (?variableE = ?variableH)
> }
> UNION
> {
> GRAPH <GraphABaseURI>{
> ?variableA a graphA:ClassA .
> ?variableA graphA:propertyA ?variableB .
> ?variableB dcterms:title ?variableC .
> ?variableA graphA:propertyB ?variableD .
> ?variableL<propertyBURI> ?variableE .
> ?variableL <propertyFURI> ?variableD
.
> }
> .
> GRAPH <GraphDBaseURI>{
> ?variableM <propertyGURI> ?variableN
.
> ?variableM <propertyHURI> ?variableO
.
> FILTER (isLiteral(?variableO) &&
REGEX(?variableO, "literalA",
> "i"))
> }
> .
> FILTER (?variableE = ?variableN) .
>
> }
> UNION
> {
> GRAPH <GraphABaseURI>{
> ?variableA a graphA:ClassA .
> ?variableA graphA:propertyA ?variableB .
> ?variableB dcterms:title ?variableC .
> ?variableA graphA:propertyB ?variableD .
> ?variableL<propertyBURI> ?variableE .
> ?variableL <propertyIURI> ?variableD
.
> }
> .
> GRAPH <GraphDBaseURI>{
> ?variableM <propertyGURI> ?variableN
.
> ?variableM <propertyHURI> ?variableO
.
> FILTER (isLiteral(?variableO) &&
REGEX(?variableO, "literalA",
> "i"))
> }
> .
> FILTER (?variableE = ?variableN) .
> }
> . FILTER (isLiteral(?variableC) &&
REGEX(?variableC, "literalB",
> "i")) .
> }
>
>
> I would not expect someone to transform the above
query (of course...).
> I am only posting the query to demonstrate the
complexity and all the
> SPARQL structures used.
>
> My questions:
>
> 1. Would I gain regarding performance if I had all my
triples in one
> graph? This way I would avoid unions and simplify my
query, however,
> would this also benefit in terms of performance?
> 2. Are there any kind of indexes that I could built
and they could be of
> any help with the above query? I am not really
confident on data
> indexing, however reading in
> http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VirtRDFPerformanceTuning#RDF
> Index Scheme I wonder if the virtuoso 7's default
indexing scheme is
> suitable for queries like the above. While the
predicates are defined in
> the above query's SPARQL triple patterns, there are
many triple patterns
> that have not defined subject or predicate. Could
this be a major
> problem regarding performance?
> 3. Perhaps there is a SPARQL syntax structure that I
am not aware of and
> could be of great help in the above query. Could you
suggest something?
> For example, I have already improved performance by
removing STR() casts
> and using the isLiteral() function. Could you suggest
anything else?
> 4. Perhaps you could suggest overusing a complex
SPARQL syntax structure?
>
> Please note that I use Virtuoso Open source edition,
built on Ubuntu,
> Version: 07.20.3214, Build: Oct 14 2015.
>
> Regards,
> Pantelis Natsiavas
>
>
>
>
------------------------------------------------------------------------------
>
>
>
> _______________________________________________
> Virtuoso-users mailing list
> Virtuoso-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/virtuoso-users
>
--
-------------------------------------------------------------------
Jerven Bolleman
Jerven.Bolleman@sib.swiss
SIB Swiss Institute of Bioinformatics Tel: +41 (0)22 379
58 85
CMU, rue Michel Servet 1 Fax: +41 (0)22 379
58 58
1211 Geneve 4,
Switzerland www.sib.swiss - www.uniprot.org
Follow us at https://twitter.com/#!/uniprot
-------------------------------------------------------------------
------------------------------------------------------------------------------
_______________________________________________
Virtuoso-users mailing list
Virtuoso-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/virtuoso-users
--
Peter
J. Lawrence
inova8
Providing answers for users'
information questions
Mobile: +1 330 631 3772 | Phone: +1 330 342 0582 |Skype: PeterJLawrence
------------------------------------------------------------------------------
_______________________________________________
Virtuoso-users mailing list
Virtuoso-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/virtuoso-users
|