你可以试试 Akumuli(警告:我是作者)。Akumuli 可以非常快速地(亚毫秒)执行聚合,因为它是一个面向列的数据库,它会为您预先计算一些聚合。它可以执行您需要的所有查询,例如,如果您的系列看起来像这样:
${measurement_name} city=${city_name} dept=${department_name} state=${state_name}
实际数据看起来像这样(例如,这是一个以瓦特为单位的功耗数据):
W city=Jersey_City state=New-Jersey dept=1
W city=Jersey_City state=New-Jersey dept=2
W city=Paris state=Iowa dept=1
W city=Paris state=Iowa dept=2
W city=Texas state=Texas dept=1
W city=Texas state=Texas dept=3
W city=Paris state=Arkansas dept=1
W city=Paris state=Arkansas dept=2
您可以使用此查询聚合所有带有dept=1
和dept=2
标签的数据:
{
"aggregate": { "W": "sum" },
"range": { "from": "20170501T000000",
"to": "20170502T000000" },
"group-by": [ "dept" ],
"where": { "dept": [1, 2] }
}
您将获得每个部门的总和,但仅包括部门 1 和部门 2。
您可以改为按城市拆分:
{
"aggregate": { "W": "sum" },
"range": { "from": "20170501T000000",
"to": "20170502T000000" },
"group-by": [ "city" ],
}
您将获得每个城市名称的总和(将加入一个城市的所有部门)。当然,您可以使用where
子句按标签过滤。
如果您有多个同名城市(例如爱荷华州和阿肯色州的巴黎),您可以按城市和州对值进行分组:
{
"aggregate": { "W": "sum" },
"range": { "from": "20170501T000000",
"to": "20170502T000000" },
"group-by": [ "city", "state" ],
}
您将获得 Paris Arkansas 的一个值和 Paris Iowa 的另一个值。