gpt4 book ai didi

elasticsearch - ElasticSearch:查询最新快照设计

转载 作者:行者123 更新时间:2023-12-03 02:35:42 25 4
gpt4 key购买 nike

我正在尝试确定如何在ElasticSearch中构造数据。

我有一个每天都会生成指标的系统。我想将这些指标放入ES,以便可以在查询/排序方面取得一些进步。我也只关心其中的最新数据。产生数据的系统也可能会晚。

目前,我可以想到两种选择:

  • 我可以有一个带有日期列的索引,该列包含创建度量标准的日期。但是,我不确定如何编写查询,以便如果索引中包含多天的数据,我会将其过滤为最新的数据集。
  • 我还可以尝试将数据拆分为不同的索引(最近的索引和过去的索引),并进行某种处理,将数据从最近的索引迁移到过去的索引。我认为面临的挑战是在停机期间将数据移动和/或添加到最近的数据中。

  • 有什么想法吗?

    最佳答案

    解决 Elasticsearch 问题的一种常见方法是以允许历史查询的形式存储数据,然后再次以允许查询最新数据的第二种形式存储数据。例如,如果您的指标更新如下:

    {
    "type":"OperationsPerSecond",
    "name":"Questions",
    "value":10
    }

    然后可以使用从文档构造的复合键将其索引到我们的当前值索引中(显然,要实现此目的,您将需要能够从文档构造复合键!)。例如,您在此文档中的身份可能是串联的类型和名称。然后,您可以利用 upsert API来将更新写入同一文档:
    POST current_metrics/_update/OperationsPerSecond-Questions
    {
    "type":"OperationsPerSecond",
    "name":"Questions",
    "value":10
    }

    每次使用相同的组合键调用此API时,它将更新现有文档,而不是创建新文档。这将为您提供一个索引,该索引仅包含您正在监视的每个指标的一条记录,并且您可以查询该索引以获取最新值。

    要存储历史数据,您可以更改主键策略,使用 index API并使其具有 flex 为您生成主键可能是最简单的。
    POST all_metrics/_doc/
    {
    "type":"OperationsPerSecond",
    "name":"Questions",
    "value":10
    }

    该API将针对每个请求创建一个新文档。因此,只要您的数据中有可用于 flex range query的内容,例如 createdDate之类的值看起来像日期时间的字段,那么您就应该能够查询历史数据。

    最主要的是,不必担心出于不同目的而复制数据,elastic可以很好地压缩磁盘和内存中的数据。多次存储数据称为 denormalization,是数据仓库和大数据中非常普遍的技术。

    关于elasticsearch - ElasticSearch:查询最新快照设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58922510/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com