从Geomesa快速删除功能



我必须尽快从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都有索引。还有别的办法吗?

谢谢!

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

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

在想要删除整个表/功能类型的情况下,这通常是可以的

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

我建议并行化删除,就像并行化摄取代码一样。对于删除,您需要将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-提示

相关内容

  • 没有找到相关文章

最新更新