Database 具有多列聚合的Timeseries数据库
我正试图设计一个具有时间序列数据的系统。以下是系统的要求:Database 具有多列聚合的Timeseries数据库,database,time-series,amazon-rds,druid,riak-ts,Database,Time Series,Amazon Rds,Druid,Riak Ts,我正试图设计一个具有时间序列数据的系统。以下是系统的要求: 数据随时从多个城市和部门进入系统 这些个人记录应终身可用。(可选) 大多数查询都是聚合。但是,它们发生在多个列上。示例查询: 特定城市特定日期的所有测量值之和 一个部门(上一个)月内所有测量值的总和 某个城市某个部门上周所有测量值的总和 某一州某一天所有测量值的总和(该州也将成为记录的一部分) 所有查询的计算应具有非常低的延迟(=前一周和datetime
- 数据随时从多个城市和部门进入系统
- 这些个人记录应终身可用。(可选)
- 大多数查询都是聚合。但是,它们发生在多个列上。示例查询:
- 特定城市特定日期的所有测量值之和
- 一个部门(上一个)月内所有测量值的总和
- 某个城市某个部门上周所有测量值的总和
- 某一州某一天所有测量值的总和(该州也将成为记录的一部分)
- 所有查询的计算应具有非常低的延迟(<300-500毫秒)
- 我浏览了多个时间序列数据库。据我所知,它们都需要昂贵的硬件。我想知道是否有一种方法可以在商品硬件上运行它
- 我不确定一开始会有多少数据可用。理想情况下,峰值(每天)约为100 MB。所以,我不愿意一开始就花几百美元
- 我一直在考虑的另一个想法是拥有一个AmazonRDS实例,在不同的列上有多个索引,并根据需要聚合它们。但我不确定这是否是个好主意
${measurement_name} city=${city_name} dept=${department_name} state=${state_name}
实际数据如下所示(例如,这是以瓦特为单位测量的功耗数据):
您可以使用此查询聚合带有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" ],
}
您将为巴黎-阿肯色州获得一个值,为巴黎-爱荷华州获得另一个值。您概述的聚合相当标准。很难找到一个不支持它们的数据库 你可以试试。它可以在用户定义的时区内高效地计算具有多个维度的日历聚合(例如每日合计)。如果您收集的指标是由最终用户活动驱动的,这将非常有用:
SELECT date_format(time, "yyyy-MMM-dd", "US/Eastern"),
entity AS 'city', SUM(value)
FROM "email.active_sessions"
WHERE datetime >= current_year
AND entity.tags.state = 'PA'
GROUP BY entity, PERIOD(1 DAY, "US/Eastern")
可以使用扩展的关键字/函数方便地指定间隔。以下是“上周”的情况:
WHERE datetime >= previous_week AND datetime < current_week
其中datetime>=前一周和datetime<当前周
有关其他示例,请参阅
ATSD在大多数Linux发行版上运行,可以在独立模式和分布式模式下执行
披露:我为Axibase工作
WHERE datetime >= previous_week AND datetime < current_week