sparql - Sparql、距离和非常长的响应时间
问题描述
我在 Spring Boot 项目中使用 sparql。
我创建了一个查询,它将计算距离,然后在距离小于 x 时进行过滤。
但是,我的处理时间很长(大约 2 秒,有时是 +)。在我的计算机上,我有 32GB 的内存,在我的生产服务器上要少得多(1GB 内存),但时间总是一样的。
query1
PREFIX (...)
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
prefix sf: <http://www.opengis.net/ont/sf>
PREFIX uom: <http://www.opengis.net/def/uom/OGC/1.0/>
SELECT
?url ?contactUri ?email ?id ?descri_courte ?geo ?lon ?lat ?x ?geom ?lattype ?wkt ?xr ?longitude
WHERE {
?url :isLocatedAt ?place.
?place schema:geo ?geo.## ?place a pour coordonnées géographiques ?geo
?geo schema:longitude ?longitude; ## ?geo a pour longitude ?longitude
schema:latitude ?latitude.
BIND (STRDT(CONCAT("POINT(",str(?longitude), " ", str(?latitude), ")"),geo:wktLiteral) as ?wkt)
BIND (STRDT(CONCAT("POINT(",str(10.9999), " ", str(52.9999), ")"),geo:wktLiteral) as ?wp2)
BIND (geof:distance(?wkt, ?wp2,uom:metre) as ?xr)
FILTER(?xr < 2000)
?url <https://www.datatourisme.gouv.fr/ontology/core#hasContact> ?contactUri.
?contactUri a <https://www.datatourisme.gouv.fr/ontology/core#Agent>.
optional {
?contactUri schema:email ?email.
}
?url dc:identifier ?id.
Optional { ?url rdfs:label ?descri_courte }
Optional { ?place schema:geo ?geo }
Optional { ?geo schema:longitude ?lon; schema:latitude ?lat. }
Optional {?geo rdf:type ?lattype}
Optional {?geo <https://www.datatourisme.gouv.fr/ontology/core#latlon> ?x. }
}
另一方面,要进行计数,处理时间显然更快
query2:
PREFIX (...)
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
prefix sf: <http://www.opengis.net/ont/sf>
PREFIX uom: <http://www.opengis.net/def/uom/OGC/1.0/>
SELECT
(count(*) as ?resultat)
WHERE {
?url :isLocatedAt ?place.
?place schema:geo ?geo.## ?place a pour coordonnées géographiques ?geo
?geo schema:longitude ?longitude; ## ?geo a pour longitude ?longitude
schema:latitude ?latitude.
BIND (STRDT(CONCAT("POINT(",str(?longitude), " ", str(?latitude), ")"),geo:wktLiteral) as ?wkt)
BIND (STRDT(CONCAT("POINT(",str(10.9999), " ", str(52.9999), ")"),geo:wktLiteral) as ?wp2)
BIND (geof:distance(?wkt, ?wp2,uom:metre) as ?xr)
FILTER(?xr < 2000)
}
我用耶拿。我已经尝试过缩短查询 1,但我觉得处理时间没有改变……你能帮我提高查询 1 的性能吗?
感谢您
解决方案
推荐阅读
- c# - C#计算器用户输入问题
- android - 颤动的应用程序,从firestore检索的列表复制它自己
- php - 用 PhpWord 中的格式替换文本中的 html 标签
- r - .subset2(x, i, exact = exact) 中的 For 循环错误后:下标越界
- spring - 带有 spring-content 和 spring-boot 的流式视频中的 ClientAbortException
- android-studio - android studio中setFocusable(true)的目的是什么?
- algorithm - 每 N 分钟生成一个唯一标识符,例如哈希。但是它们必须在 N 分钟的时间范围内相同而不存储数据
- vue.js - 对 Vue 变量的字符串操作
- c++ - 如何将字符串从 cpp 发送到 winform 标头中定义的文本框
- angular - Angular2:获取从数组`|`中选择单个对象的管道