Geomesa 查询性能

Geomesa Query Performance

Geomesa 是一个时空数据库,更多详细信息可在此处获得:http://www.geomesa.org/

我正在尝试使用示例教程设置 Hbase 数据库。我是运行 Hbase 快速入门教程http://www.geomesa.org/documentation/tutorials/geomesa-quickstart-hbase.html教程运行良好,以下是我在边界框查询性能中注意到的一些问题。

我插入了经纬度范围为 (30,60) 到 (35,65) 的数据

在此设置中,我在本地计算机上进行查询:
a) 在我的第一个查询中,位置边界框是:(30,60) 到 (30.1,60.1),它平均在不到一秒的时间内运行并且 return 正确结果。
b) 在第二个查询中,我将位置边界框 (10,10) 修改为 (30.1,60.1)。此查询也 return 与查询 (a) 中的结果相同,这是预期的,但平均每个查询需要大约 3-4 秒。

因为两个查询应该给我相同的结果,但一个 运行 比另一个快得多。我注意到时域查询中也有类似的行为,如果时间范围与插入的数据不匹配,性能会更差(慢 10 倍甚至更多)。以下是我的一些问题:
1) 这是预期的行为吗?
2) 我知道解决方案之一是重新格式化查询以映射到插入 Geomesa 的实际数据空间和时间范围,这将需要我维护有关数据的其他元数据。但是,我认为可以在 Geomesa 层设计更好的解决方案?

如果有某种设置等会影响此行为,请告诉我。通过设置 Geomesa,我在多台其他本地计算机和云 VMS 上看到了相同的行为。

一般来说,GeoMesa 仍然需要扫描可能 数据的地方,即使那里实际上没有任何数据。打开扫描,即使 returns 没有数据,也需要一些时间。对于时间查询,范围的数量往往更大,因此性能更慢。

我相信 Accumulo 处理这个问题比 HBase 好一点,因为它有一个接受多个范围的批处理扫描器的概念,并且它对数据有一些了解 start/end。对于 HBase,GeoMesa 必须使用 thread pool 运行 多次扫描,因此效率不高。

GeoMesa也有数据统计的概念,但是还没有在HBase上实现,目前还没有用到查询计划中。

要缓解此问题,您可以尝试增加 "queryThreads" 数据存储参数,以便在查询期间使用更多线程。如果您当前已禁用 "looseBoundingBox",您也可以启用它。对于临时查询,增加 temporal binning period 可能会导致扫描的范围减少。但是,这可能会导致对非常小的时间范围的查询变慢,因此应根据您的用例进行定制。

最后一点,请确保您安装了分布式协处理器并且enabled,尤其是在您没有使用松散边界框的情况下。