Aklakan commented on PR #3184:
URL: https://github.com/apache/jena/pull/3184#issuecomment-3092539788

   The original code integrated exec tracking into the 
Update-/QueryEngineFactory system. However, this was sub-par because execution 
could only be intercepted on the QueryIterator level.
   
   My updated proposal is to introduce a new layer Update-/QueryDispatcher on 
top of the Update-/QueryEngineFactory machinery. Now it is possible to 
intercept any query / update request to a dataset - even without having to 
parse the query.
   
   Old design: QueryExecBuilderDataset -build-> QueryExecDataset -exec-> 
QueryEngineRegistry
   
   New design: QueryExecBuilderDataset -build-> **QueryDispatcherRegistry** 
-customized build-> QueryExec
   
   The returned QueryExec may be of any type, such as a tracking wrapper - it 
is no longer necessarily a QueryExecDataset.
   
   Consequences:
   * Code that relies on QueryExecBuilderDataset to always return a 
QueryExecDataset may break when adding custom interceptors. This should be a 
low price to pay because usually one should rely on the QueryExec interface.
   * Execution Tracking can be added without any change to the existing code.
   
   ## Related Ongoing Work
   
   As a demo for related work based on this infrastructure, we are using it to 
integrate third party triple stores - such as Qlever - into Fuseki. This way we 
can use one server framework to manage several triple stores.
   Technically, we created a DatasetGraph wrapper implementation that is backed 
by a factory of HTTP RDFConnection instances (such as to a remote Qlever 
database). The query dispatcher just forwards query/update requests to an 
RDFConnection obtained from such a DatasetGraph implementation.
   Any opinions on this design?
   
   As a final note, we also already created an assembler that starts qlever 
from a docker image as part of Fuseki (via the Java TestContainer framework), 
so the configuration looks like this:
   
   ```turtle
   <#baseDS> rdf:type qlever:Dataset ;
     qlever:location "/run/databases/qlever/mydb/" ;
     qlever:indexName "myindex" ;
     qlever:accessToken "abcde" ;
     qlever:memoryMaxSize "4G" ;
     qlever:defaultQueryTimeout "600s" ;
   ```
   
   [Example of Qlever in 
Fuseki](https://data.aksw.org/#/dataset/text2sparql-2025-dbpedia-qlever/query?query=SELECT%20%28COUNT%28%2A%29%20AS%20%3Fc%29%20%7B%20%3Fs%20%3Fp%20%3Fo%20%7D)
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: pr-unsubscr...@jena.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscr...@jena.apache.org
For additional commands, e-mail: pr-h...@jena.apache.org

Reply via email to