GeoMesa(3)

一、查询计划

查询计划是将GeoTools的查询(Query )转换为底层数据扫描和筛选的过程。几个步骤:
1、CQL过滤器(如果有的话)被重写并优化,以实现快速评估
2、CQL过滤器根据可用的索引进行拆分
3、选择一个可用索引来执行查询
4、逻辑查询计划由核心的GeoMesa索引代码创建
5、为特定的后端数据库创建物理查询计划

在GeoMesa中,逻辑查询计划通常由一个“主”CQL过滤器(用于确定扫描范围)和一个“辅助”CQL过滤器(用于匹配行)组成。

在查询计划的第二步中,对整个过滤器进行分解并检查可用的索引。对于每个索引,将确定主过滤器和辅助过滤器(如果有的话)。

例如对于过滤器:BBOX(geom,0,0,10,10) AND dtg DURING 2017-01-01T00:00:00.000Z/2017-01-02T00:00:00.000Z AND name = ‘alice’.

对Z2索引来说,主过滤器为BBOX
对于Z3索引来说,主过滤器为BBOX和DURING
对于属性索引来说,主过滤器为name = ‘alice’

二、索引选择

由于跳过行要比读取和过滤它们快得多,所以最好的查询计划通常是扫描最少行。换句话说,最好的方案是具有最优主过滤器的方案。GeoMesa有两种方法来确定最佳索引—基于成本的,或基于启发式的。

三、基于成本的策略

GeoMesa将在摄入期间收集统计信息,并将其存储起来,以便在查询规划中使用。所收集的统计数字如下:

1、总数
2、最小/最大的默认几何,默认日期和任何属性索引
3、用于默认几何图形、默认日期和任何索引属性的直方图
4、任何索引属性的频率,按周划分
5、任何属性索引的Top-k
6、基于默认几何形状和默认日期的Z3直方图(如果同时存在)

扫描二维码关注公众号,回复: 6580322 查看本文章

这些统计数据用于估计匹配给定主过滤器的feature的数量(选择匹配最少特性的主过滤器)。

三、启发式策略

对于查询计划,启发式策略可以仅基于查询过滤器。

四、自定义策略

通过geomesa.strategy.decider来指定,自己指定的类需要实现org.locationtech.geomesa.index.planning.StrategyDecider

五、基数提示

对于有许多不同值(即高基数)的属性可以通过索引过滤掉许多数据,因此对属性索引的查询将涉及相对较少的记录。而布尔属性只有两个不同的值,可能需要扫描整个数据集的一半。如果属性被标记为具有高基数,则属性索引优先级较高。相反,如果属性的基数较低,则属性索引将优先级较低。

六、解释查询计

GeoMesa将在查询执行期间自动记录解释计划。(在调试查询问题时很有用)

为了显示解释日志,可以将org.locationtech.geomesa.index.utils.Explainer 设置为 trace
例如,在log4j中:log4j.category.org.locationtech.geomesa.index.utils.Explainer=TRACE

也可以在不执行查询时生成解释日志:

import org.locationtech.geomesa.index.utils.ExplainString

dataStore.getQueryPlan(query, explainer = new ExplainPrintln)

其中:ExplainPrintln—写入System.out
ExplainLogging—重定向到其他地方

猜你喜欢

转载自blog.csdn.net/qq_21705851/article/details/92655831