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?


On Wed, Sep 28, 2016 at 2:06 PM Jerven Tjalling Bolleman <jerven.bolleman@sib.swiss> wrote:
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



------------------------------------------------------------------------------
_______________________________________________
Virtuoso-users mailing list
Virtuoso-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/virtuoso-users

Reply via email to