1

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

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

我插入了 lat、lng 范围 (30,60) 到 (35,65) 的数据

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

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

做,让我知道是否有某种设置等会影响这种行为。通过设置 Geomesa,我在多台其他本地机器和云 VMS 上看到了相同的行为。

4

1 回答 1

2

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

我相信 Accumulo 比 HBase 处理这个问题要好一些,因为它有一个接受多个范围的批处理扫描仪的概念,并且它对数据开始/结束有一些了解。对于 HBase,GeoMesa 必须使用线程池运行多次扫描,因此效率不高。

GeoMesa 也有数据统计的概念,但是还没有针对 HBase 实现,目前还没有用于查询规划。

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

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

于 2017-09-01T15:21:00.253 回答