【问题标题】:Fast removing features from Geomesa从 Geomesa 快速移除特征
【发布时间】:2017-11-04 13:18:08
【问题描述】:

我必须尽快从 Geomesa 数据存储中删除大量特征(大约 1 亿条记录)。 我尝试使用:

String cql = DATE_TIME_FIELD + " BEFORE " + strCurrentDateTime + ") AND " + "(" + TIMING_FIELD + " > 0)"; Filter filter = CQL.toFilter(cql); featureStore.removeFeatures(filter)

但是它运行得太慢了。 DATE_TIME_FIELD 和 TIMING_FIELD 都有索引。还有其他方法吗?

谢谢!

【问题讨论】:

  • 这是一次性操作,还是您工作流程中正常/频繁的部分?
  • 每天都有

标签: accumulo geomesa


【解决方案1】:

通常,GeoMesa 利用的分布式数据库针对插入进行了优化。删除大量记录将导致大量次要和主要压缩。

使问题更加复杂的是,每个索引都会为每条记录写入额外的条目,这会增加要删除的内容的数量。

如果想删除整个表/特征类型,通常可以。

如果频繁删除数百万条记录,则可以为底层数据存储编写批量删除帮助程序。 (例如,使用具有某些配置的 GeoMesa 文件系统,这种删除可能是微不足道的。)

【讨论】:

    【解决方案2】:

    我建议并行化删除,就像并行化摄取代码一样。对于删除,您需要将 CQL 过滤器分解为离散部分,例如(伪代码)dtg between now/1 hour agodtg between 1 hour ago/2 hours ago

    删除比插入慢,原因如下:

    1. 他们需要额外的查询来查找要删除的数据
    2. 它们通常不可并行化,因此 GeoMesa 不提供开箱即用的并行删除操作
    3. 它们通常会触发基础数据库中的一些维护(例如 Accumulo 压缩)

    并行删除将有助于前两项,但不利于数据库维护。因此,您的数据库可能最终仍会在负载下挣扎。

    您还应该确保在DATE_TIME_FIELDTIMING_FIELD 之间使用更具区分性的索引。您可以通过设置基数提示来做到这一点,如下所述:

    http://www.geomesa.org/documentation/user/datastores/index_basics.html#cardinality-hints

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 2015-06-28
      • 1970-01-01
      • 2014-10-30
      相关资源
      最近更新 更多