在CrateDB中存储性能数据的最佳实践是什么?

时间:2017-01-20 15:24:15

标签: sql crate cratedb

我的应用程序将性能时间序列数据存储在CrateDB中,为了使设置正确,我有几个问题,因为它每天将有大约72M的记录并且它应该正确扩展:)。我的目标是使用Grafana可视化生成的数据,目前我有以下结构:

CREATE TABLE metrics (
  ts TIMESTAMP,
  hostname STRING,
  servicename STRING, 
  perfdata OBJECT(DYNAMIC)
)

// for example
{
    "hostname": "localhost",
    "servicename": "ping",
    "timestamp": 1483699527,
    "perfdata": {
        "rta": {
            "current": 0.5,
            "unit": "ms",
            "warn": 100,
            "critical": 200
        },
        "pl": {
            "current": 0,
            "unit": "%",
            "warn": 10,
            "crit": 20
        }
    }
}

重要的位是host- / servicename,度量标准的名称和值以及时间戳。这也是替代架构:

 CREATE TABLE metrics (
   ts TIMESTAMP,
   hostname STRING,
   servicename STRING, 
   metric OBJECT(DYNAMIC) AS (
      unit STRING,
      name STRING,
      value DOUBLE,
   )       
 )

那么哪一个是存储数据的首选方式?我还需要分区吗?我的汇总通常显示最后24小时,很少是上个月......

谢谢!

2 个答案:

答案 0 :(得分:0)

一般情况下,我建议使用第二个表架构,因为它更简单,它可以捕获原始数据(而不是预先组装的东西),并为实际的内容进行聚合需要。

然而,这个问题非常棘手,因为它很大程度上取决于实际需求。因此,组合架构基本上会使更新变得棘手(对象只能被替换而不是更新),因此需要将数据一起发送(并且可能以相同的速度收集?)。

最重要的是,设置partitioning可能很有用。 这可以加快查询速度并允许change the number of shards for future partitions(并允许您更好地扩展)。 通常的做法是按月或按周划分,在某些情况下也按天划分。 但必须注意防止碎片爆炸的数量 分片也需要系统资源。

由于datasource plugin:)

,CrateDB与Grafana的合作非常好

答案 1 :(得分:0)

现在刚看到这个,我一直在玩perdata(nagios)和cratedb。 我们测试的(基于mongodb时间序列演示)是每小时存储并让perfdata [ts] = {perf object} (我们确实测试了perfdata ['minute'] ['second'] = {})

24小时架构将是perfdata ['hour'] ['minute']

因此,通过在主机/服务/上定义主键,您可以 '重复密钥更新..'

所以按主机/服务/小时查询只是一个查询: - )