geomesa cassandra 中的大量范围扫描

Huge number of range scans in geomesa cassandra

我正在尝试测试 geomesa cassandra 后端。

我已经从 OSM 获取了约 2M 点,并使用带有 geotools ecql 的 geomesa 向 cassandra 发送 DWITHINBBOX 查询。

然后我做了一些性能测试,结果对我来说不合理。

Cassandra 安装到 linux 具有 16 核 xeon、32GB RAM 和 1 个 SSD 驱动器的机器上。我每秒收到 ~150 个查询。

我开始调查查询的 geomesa 执行计划。

来自 org.locationtech.geomesa.index.utils.Explainer 的跟踪日志非常有用,它们很好地解释了正在发生的事情。

让我感到困惑的是通过 cassandra 的范围扫描次数。

例如,我在日志中看到以下内容: Table: osm_poi_a7_c_osm_5fpoi_5fa7_attr_v2 Ranges (49): SELECT * FROM ..

数字49表示发送到cassandra的实际范围扫描数。 不同的查询会给我不同的结果,它们大约在 ~10 到 ~130 之间变化。

10 对我来说很合理,但 130 看起来很大。

您能否解释一下是什么导致 geomesa 发送如此大量的范围扫描?

有什么方法可以减少范围扫描的次数吗?

也许有一些配置选项?

还有其他选择吗?比如降低 z-index 的精度来改进此类查询?

谢谢!

一般来说,GeoMesa 在其各种后端实现中使用通用的查询规划算法。默认值更倾向于支持具有大量范围的扫描的 HBase 和 Accumulo。但是,您可以使用各种旋钮来修改行为。

您可以通过系统 属性 geomesa.scan.ranges.target 减少在运行时生成的范围数(参见 here)。请注意,这将是一个粗略的上限,因此您通常会获得比指定范围更多的范围。

创建简单要素类型模式时,您还可以禁用分片,默认为 4。生成的范围数将乘以分片数。参见 here and here

如果您要查询多个 'time bins'(默认为周),则范围数将乘以您要查询的时间段数。您可以在创建模式时将其设置为更长的时间间隔;参见 here

谢谢,