0

抱歉,如果这是一个抽象的问题,我会尽力提供更多细节。

我运行“实验”(例如各种软件的测试运行),每个实验都有自己的一组元数据(基本上是键/值对,如开始时间、结束时间、名称、资源基数、系统类型等)和一个或多个与各种性能指标相关的时间序列数据(例如,每隔 10 秒从开始到结束的 CPU 和内存使用情况)。数据量不会很大;每月最多几个千兆字节。

我想将这些数据存储在单个系统中(例如,不是 MySQL 中的元数据和一些专门的时间序列数据库中的性能数据)。elasticsearch 会适合这个吗?我将如何最好地索引数据?

编辑:为了更清楚,这里有一些关于如何组织数据的想法。对于元数据,使用metadata索引,例如实验 aa_12:

{
  "_id": "aa_12",
  "_source": {
    "name": "aa_12",
    "start": 1420070400001,
    "end": 1420097400001,
    "system": "cluster-1",
    "nodes": 6,
    ...
  }
}

将实验名称作为 _id 会使偶尔的更新更容易(我想)。

然后对于与该实验相关的时间序列,使用perfdata如下索引:

{
  "_source": {
    "host": "cluster-1-1",
    "experiment": "aa_12",
    "cpu1": 44,
    "cpu5": 40,
    "cpu15": 41,
    "memtot": 16384,
    "memused": 5025,
    ... rest of metrics
    "time": 1420070410001
  }
}

所以我可以查询,例如,“在实验 Z 期间给我主机 Y 的指标 X”并使用 kibana/timelion 获取指标图。我现在担心的是perfdata索引可能会增长到包含大量条目(总体上不是很大,但仍然有几十万/百万个条目)。上面说的有道理吗?

4

1 回答 1

1

据我所知,

  • InfluxDB、Cassandra 是时间序列数据的不错选择
  • Elasticsearch 是元数据的不错选择

ELlasticsearch 是为搜索而构建的,尽管许多人可以通过使用快照和还原功能缓解 Elastic 中的弹性问题,将其用作永久数据存储。这是ElasticSearch 弹性的链接

此外,如果您的用例类似于下面的问题,那么 ES 就是要走的路。

  • 您打算使用 ES 进行搜索吗?是的
  • 聚合,全文搜索?是的
  • 您关心数据弹性吗?不

如果您确实关心数据弹性,我建议您将元数据存储在另一个存储(MySQL)中,以及 ES 之外,或者使用 ES 的快照或恢复功能来保持弹性。

于 2017-08-08T16:27:30.457 回答