Оптимальное размещение фильтра в запросах SPARQL - PullRequest
0 голосов
/ 16 января 2020

Одна из оптимизаций, выполняемых JenaARQ, заключается в следующем: «Поместите фильтры близко к месту, где определены их переменные зависимости».

Это приводит к тому, что следующий план запроса:

  (filter (exprlist (|| (|| (isIRI ?Y) (isBlank ?Y)) (!= (datatype ?Y) <http://example.com/onto/rdf#structure>)) (|| (|| (isIRI ?Z) (isBlank ?Z)) (!= (datatype ?Z) <http://example.com/onto/rdf#structure>)))
    (bgp
      (triple ?X <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Student>)
      (triple ?Y <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Faculty>)
      (triple ?Z <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Course>)
      (triple ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#advisor> ?Y)
      (triple ?Y <http://swat.cse.lehigh.edu/onto/univ-bench.owl#teacherOf> ?Z)
      (triple ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#takesCourse> ?Z)
    )))

преобразуется в следующее:

  (sequence
    (filter (|| (|| (isIRI ?Z) (isBlank ?Z)) (!= (datatype ?Z) <http://example.com/onto/rdf#structure>))
      (sequence
        (filter (|| (|| (isIRI ?Y) (isBlank ?Y)) (!= (datatype ?Y) <http://example.com/onto/rdf#structure>))
          (bgp
            (triple ?X <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Student>)
            (triple ?Y <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Faculty>)
          ))
        (bgp (triple ?Z <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://swat.cse.lehigh.edu/onto/univ-bench.owl#Course>))))
    (bgp
      (triple ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#advisor> ?Y)
      (triple ?Y <http://swat.cse.lehigh.edu/onto/univ-bench.owl#teacherOf> ?Z)
      (triple ?X <http://swat.cse.lehigh.edu/onto/univ-bench.owl#takesCourse> ?Z)
    )))

Оказывается, что в то время как исходный план запроса выполняется в миллисекундах «Оптимизированный» план запроса занимает около 7 часов.

Рассматривает ли JenaARQ статистику для оптимизации размещения фильтра в плане запроса?

Я использую Jena 3.12.0.

...