AtteanX-Query-Cache
view release on metacpan or search on metacpan
scripts/prefetcher view on Meta::CPAN
#!/usr/bin/env perl
use strict;
use warnings;
use Redis;
use LWP::UserAgent::CHICaching;
use Attean;
use RDF::Trine;
use CHI;
use AtteanX::Query::Cache::Retriever;
use AtteanX::Store::SPARQL;
use AtteanX::Store::LDF;
use AtteanX::Model::SPARQLCache::LDF;
my $cache = CHI->new( driver => 'Memory', global => 1 );
my $sparqlurl = 'http://dbpedia.org/sparql';
my $ldfurl = 'http://fragments.dbpedia.org/2015/en';
my $redisserver = 'robin.kjernsmo.net:6379';
RDF::Trine::default_useragent(LWP::UserAgent::CHICaching->new(cache => $cache));
my $sparqlstore = Attean->get_store('SPARQL')->new(endpoint_url => $sparqlurl);
my $ldfstore = Attean->get_store('LDF')->new(start_url => $ldfurl);
my $redissub = Redis->new(server => $redisserver, name => 'subscriber');
my $model = AtteanX::Model::SPARQLCache::LDF->new(store => $sparqlstore,
cache => $cache,
ldf_store => $ldfstore);
my $retriever = AtteanX::Query::Cache::Retriever->new(model => $model);
$redissub->subscribe('prefetch.triplepattern',
sub {
my $string = shift;
my $pattern = Attean::TriplePattern->parse($string)->canonicalize;
my $numvars = scalar $pattern->values_consuming_role('Attean::API::Variable');
if ($numvars > 0 && $numvars <= 2) {
$model->cache->set($string, $retriever->fetch($pattern));
}
});
$redissub->wait_for_messages(0) while 1;
( run in 2.356 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )