很抱歉,如果这是一个抽象的问题,我会尝试提供更多细节。
我运行“实验”(例如各种软件的测试运行),每个实验都有自己的一组元数据(基本上是键/值对,如开始时间,结束时间,名称,资源基数,系统类型等)和与各种性能指标相关的一个或多个时间序列数据(例如,从开始到结束,间隔10秒的CPU和内存使用情况)。 数据量不会很大;每月最多几千兆字节。
我想将这些数据存储在一个系统中(例如,不是MySQL中的元数据和某些专用时间序列数据库中的性能数据)。弹性搜索是否适合这种情况?我如何最好地索引数据?
编辑:更清楚一点,这里有一些关于如何组织数据的想法。对于元数据,请使用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
索引可以增长到包含大量条目(总体上不是很大,但仍然有几十万/百万条目)。以上是否有意义?
答案 0 :(得分:1)
据我所知,
ELasticsearch是为搜索而构建的,尽管许多人都可以通过使用快照和还原功能减轻弹性中的弹性问题,将其用作永久数据存储。这是ElasticSearch resiliency
上的链接此外,如果您的用例类似于以下问题,那么ES就是您的选择。
如果您关心数据弹性,我建议将元数据存储在另一个存储(MySQL)中以及ES之外,或者使用ES的快照或恢复功能来保持弹性。