0

我正在使用 ElasticSearch (OpenSearch) 在索引中存储多个对象。每个对象都有一个唯一的 ID、创建日期和一个存储整数值的“金额”字段。这个“数量”值会定期更改,因此我使用 ID 就地更新对象以匹配现有对象。

我想要的是随着时间的推移显示所有对象的总量直方图。问题是我需要以某种方式保留历史数据才能将其显示在图表上。

我有什么选择来实现这个?是否有自动汇总和保存这些总数的方法?或者我应该从我的应用程序中手动执行此操作?例如发送这些总数而不是单个对象?

数据结构:

[
  { id: '{uuidv4}', amount: 100 },
  { id: '{uuidv4}', amount: 25 },
  { id: '{uuidv4}', amount: 150 },
  { id: '{uuidv4}', amount: 0 },
  ...
]
4

2 回答 2

1

(从 Elasticsearch 的角度来看)您通常会将每个更改存储为单独的记录,而不是更新现有的记录。这样你就可以获取历史记录并可以做你的 aggs,并且仍然显示最新的值

只需将其视为任何其他基于时间的数据、日志、点击流、事务。ETC

于 2022-02-11T00:34:46.897 回答
-1

Elasticsearch 不太适合处理历史或时间序列数据。它为记录等情况提供了一些很好的工具,但当用例假设数据具有某些连续性时(如公制仪表或实际价格),它就会失败。从技术上讲,创建一个每分钟检索当前值并将它们存储在某个地方的 cron 作业是可行的,但它效率低且可扩展性差。

相反,使用专门的时间序列数据库是有意义的,比如InfluxDB,它允许像这样的聚合以及放大和缩小时间线的能力。

于 2022-02-10T22:14:31.467 回答