时序数据库(TSDB)存入的数据都是按时间进行排列的,那么如果数据是计数类型的,也就是随着时间的增长,这个数字会一直增加,那么就可以按时间对这个数据进行统计。

工厂生产产品的数量就是计数类型,下边以此为例,介绍一下这类数据的统计问题。那么计数类型数据统计有两种基本的方式:第一,按截止时间统计,也就是截止时间之前那个时间点的数据,这个数据是从开始生产到截止时间的总产量,是每天产量的累加值;第二,按一定时间区间统计,比如按天统计,就是每天生产的数量。

一、按截止时间统计

按截止时间统计,相对容易实现,那就从截止时间开始往前搜索,搜到的以一个数据就是这个截止时间的统计数据。

二、按时间区间统计

按时间区间统计,情况相对复杂。下面以按日统计为例,进行介绍。

1、时间区间不跨0点

如果这个工厂不上夜班,工作时间是8:00-20:00,不跨每天的0点,那么统计如表1,每天上班时的数据和前一天下班时的数据时相等的。这个情况也相对容易统计,那么先以当天的24点为起点,往前搜索数据库,搜到时间范围为过去24小时,搜到的第一条数据就是当天最后一条数据value_last。再以当天的0点为起点,往后搜索数据库,搜到时间范围为未来24小时的第一条数据value_first。验证一下统计的结果,看看从9月14日到9月18日这段时间的总产量是否等于每天产量之和:9月18日下班时的总量为1634,9月14上班时的总量为114,所以总产量=1634-114=1520,而每天常量之和=76+146+540+328+430=1520,两个数字相等,说明统计是没有问题的。

表1
时间点 数量 数据性质 数量 当天统计量
9月14日 08:00:00 114 value_first 114 76
9月14日 20:00:00 190 value_last 190
9月15日 08:00:00 190 value_first 190 146
9月15日 20:00:00 336 value_last 336
9月16日 08:00:00 336 value_first 336 540
9月16日 20:00:00 876 value_last 876
9月17日 08:00:00 876 value_first 876 328
9月17日 20:00:00 1204 value_last 1204
9月18日 08:00:00 1204 value_first 1204 430
9月18日 20:00:00 1634 value_last 1634

2、时间区间跨0点

那么假如这个工厂的工作时间是24小时,存在当天第一条数据和前一天最后一条数据不相等的情况,也就是跨过0点时候,数量有所增加,如果还按照上述方法进行统计,那结果如表2所示。

验证以下统计结果:这段时间的总产量还是1520,而每天数量的累加值=76+144+540+327+429=1516,比实际总产量少了4,也就是少统计了每天跨0点时产量的增加量。

表2
时间点 数量 数据性质 数量 当天统计量
9月14日 00:02:00 114 value_first 114 76
9月14日 23:59:00 190 value_last 190
9月15日 00:02:00 192 value_first 192 144
9月15日 23:58:00 336 value_last 336
9月16日 00:02:00 336 value_first 336 540
9月16日 23:59:00 876 value_last 876
9月17日 00:02:00 877 value_first 877 327
9月17日 23:59:00 1204 value_last 1204
9月18日 00:02:00 1205 value_first 1205 429
9月18日 17:05:00 1634 value_last 1634

(1)没考虑某天没有生产的情况

那么调整算法如下:当天的统计量应该等于当天最后一条数据-前一天最后一条数据,用这条方法来统计一下9月15日-9月18日的数据表格如表3:

表3
时间点 数量 数据性质 数量 当天统计量
9月14日 00:02:00 114 value_first 114
9月14日 23:59:00 190 value_last 190
9月15日 00:02:00 192 value_first 192 146
9月15日 23:58:00 336 value_last 336
9月16日 00:02:00 336 value_first 336 540
9月16日 23:59:00 876 value_last 876
9月17日 00:02:00 877 value_first 877 328
9月17日 23:59:00 1204 value_last 1204
9月18日 00:02:00 1205 value_first 1205 430
9月18日 17:05:00 1634 value_last 1634

那么来验证一下统计结果:

总产量=1634-190=1444,按天累计的数量=146+540+328+430=1444,两个数据相等,说明方法没问题。但是大家也发现了,按这种方法,是没法统计数据库里最早一天的数据,因为最早一天的前一天数据库里没有数据,数据是空的。有的人说,那我就把数据为空的那一天的value_first和value_last都置为0,这种方法不是可行的,假如我们在9月14日到9月18日中间的9月16日没有生产,那天的产量在数据库中为空,也把value_first和value_last都置为0,那么统计结果如表4:

表4
时间点 数量 数据性质 数量 当天统计量
9月14日 00:02:00 114 value_first 114 190
9月14日 23:59:00 190 value_last 190
9月15日 00:02:00 192 value_first 192 146
9月15日 23:58:00 336 value_last 336
9月16日 00:00:00 null value_first 0 -336
9月16日 24:00:00 null value_last 0
9月17日 00:02:00 336 value_first 336 1204
9月17日 23:59:00 1204 value_last 1204
9月18日 00:02:00 1205 value_first 1205 430
9月18日 17:05:00 1634 value_last 1634

9月17日这天,产量应该=1204-336=868,而按我们的方法算出来则是1204,而且9月16日统计的结果为-336,9月14日统计量为190,都与实际情况不相符。说明这样处理没有生产量那天的数据是不可行的。

(2)考虑某天没有生产的情况

那么本文给出一种方法:

(1)首先确定数据库有数据的最早时间,那么可以把数据库部启用时间做为起点,往后搜索,搜到第一条数据对应的时间就是数据最早存入的时间,这一天可以标记为“数据库启用日期”,这一天往前的日期就都没有数据,不能进行统计了,“数据库启用日期”这天统计量为value_last-value_first。

(2)这天之后日期的统计量都是当天value_last-前一天value_last,每天的value_last值为这天的24:00往前搜索(不限定时间范围),所搜到的第一条数据,这样就把没有生产的那天的value_last赋值为这天之前最近的数据,因为没有生产这段时间,数据没有变化的。

根据这个方法9月16日没有生产,数据为空,那么往前搜到最后一条数据为336,把这个数据做为9月16日的value_last,根据这个方法表转化为表,从表中可以看出,9月16日没有生产这一天统计量为0,9月14日为第一天,统计量为76,都是合理的了。验证一下:总产量-1634-114=1520,每天的产量之和=76+146+0+868+430=1520。说明这种方法可行。

时间点 数量 数据性质 数量 当天统计量
9月14日 00:02:00 114 value_first 114 76
9月14日 23:59:00 190 value_last 190
9月15日 00:02:00 192 value_first 192 146
9月15日 23:58:00 336 value_last 336
9月16日 00:00:00 null value_first 0
9月16日 24:00:00 null value_last 336
9月17日 00:02:00 336 value_first 336 868
9月17日 23:59:00 1204 value_last 1204
9月18日 00:02:00 1205 value_first 1205 430
9月18日 17:05:00 1634 value_last 1634

(3)算法步骤

1、确定数据库启动日期:openning_date;

2、获得系统日期:system_date;

3、根据统计时间要求的范围,确定统计的起始日期begin_date和结束日期end_date;

4、如果begin_date<openning_date,那么begin_date=openning_date;

5、如果end_date>system_date,那么end_date=system_date;

6、根据调整后的起始日期begin_date和结束日期end_date,确定要统计的天数days;

7、从i=0,到i=days-1,循环赋值value_last[i]=(end_date-i)这天24:00往前搜索到的第一条数据;

8、确定统计的第一天第一条数据value_first为这天0:00往后搜索到的第一条数据;

9、从i=0,到i=days-2,循环赋值每天统计值value[i]=value_last[i]-value_last[i+1];

10、value[days-1]=value_last[days-1]-value_first。

时序数据库TSDB按时间进行数量统计算法研究相关推荐

  1. 为啥用 时序数据库 TSDB

    前言 其实我之前是不太了解时序数据库以及它相关的机制的,只是大概知晓它的用途.但因为公司的业务需求,我意外参与并主导了公司内部开源时序数据库influxdb的引擎改造,所以我也就顺理成章的成为时序数据 ...

  2. 时空时序数据库 TSDB的用法

    tsdb 时空时序数据库 中的 几个关键词 metric: metric 类似 关系型数据库 的一张 表名. fields 就是 其中 的字段 类似于 column 字段. tags : 是 能作为查 ...

  3. 人头识别与计数_基于人头检测的人数统计算法研究

    摘要: 在统计人数时候都是根据所检测到的目标进行计数,从最开始传统的红外线检测的人数统计系统到现在的智能视频处理人数统计系统.在一些人群众多的场所和人员并排走时会有很严重的遮挡现象,所以红外线检测就不 ...

  4. 时序数据库Influxdb带时间查询

    select * from table_name where time<='2021-12-15T23:59:59+08:00' order by time desc limit 1 +08:0 ...

  5. 阿里云发布时间序列数据库TSDB,关于时序你了解多少?

    概要介绍 时间序列数据是一种表示物理设备,系统.应用过程或行为随时间变化的数据,广泛应用于物联网,工业物联网,基础运维系统等场景.阿里云TSDB 时间序列数据库可以解决大规模时序数据的可靠写入,降低数 ...

  6. 零距离接触阿里云时序时空数据库TSDB

    概述 最近,Amazon新推出了完全托管的时间序列数据库Timestream,可见,各大厂商对未来时间序列数据库的重视与日俱增. 阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空 ...

  7. 零距离接触阿里云时序时空数据库TSDB 1

    概述 最近,Amazon新推出了完全托管的时间序列数据库Timestream,可见,各大厂商对未来时间序列数据库的重视与日俱增. 阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空 ...

  8. 【万字干货】OpenMetric与时序数据库存储模型分析

    摘要:解读OpenMetric规范和指标的模型定义基础上,结合当下主流的时序数据库核心存储及处理技术,尝试让用户(架构师.开发者或使用者)结合自身业务场景选择合适的产品,消除技术选型的困惑. 本文分享 ...

  9. mysql时序性数据库_时序数据库入门

    数据库的模型包含关系型.key-value 型.Document 型等很多种,那么为什么新型的时序数据库成为监控数据存储的新宠呢? 下面就会从 为什么需要时序数据库? 时序数据库的数据结构 两个方面来 ...

最新文章

  1. (转)使用 Spring缓存抽象 支持 EhCache 和 Redis 混合部署
  2. MNA-CNN: 如何在美学质量评估中储存照片原始信息
  3. 简述如何书写工程化的简单代码
  4. aws mysql价格_mysql – AWS RDS“转出”成本有多贵?
  5. [转载]windows2003上IIS+PyISAPIe1.1..0部署成功
  6. python 主线程_Python threading多线程模块
  7. java 格式化字符串
  8. (Dijkstra)迪杰斯特拉算法-最短路径算法
  9. PHP7.1 狐教程【旧】不在更新,请点击新连接查看
  10. Atitit path query 路径查询语言 数据检索语言 目录 1.1. List map spel 1 1.2. Html数据 》》Css选择符 1 1.3. Json 》map》
  11. 怎么查看ubuntu虚拟机ip地址?
  12. JAVA POI导出Excel文件并添加水印
  13. 复盘:C语言中int a[][3]={1,2,3,4,5,6,7,8}什么意思,int a[3][]又是什么意思,结果为10的是
  14. TRITTON天猫旗舰店开业 2月20日7折大促
  15. 六十星系之43紫微天相坐辰戌
  16. CAD批量导入点的方法
  17. 电视android内置系统界面,系统界面:原生安卓 定制界面_汽车科技评测-中关村在线...
  18. matlab 读excel表格文件 产生多个不同的.coe文件
  19. ArcMap 制图出图
  20. 交通银行香港分行实施 Linux 前端系统的开发手记

热门文章

  1. C++实现控制台计算器
  2. 初学CAD制图时,不同制图工具的技巧分析
  3. LMAX Disruptor 简介:
  4. 马云语录:今天很残酷,明天更残酷!后天很美好!但大多数人都死在明天晚上,看不到后天的太阳!
  5. excel动态图表ppt_具有动态日期范围的Excel图表
  6. 海康威视视频播放插件1.4.100教程
  7. 视觉机器学习20讲-MATLAB源码示例(12)-RBF学习算法
  8. 无人驾驶汽车系统入门(二十一)——基于Frenet优化轨迹的无人车动作规划方法
  9. pig的一些实例(我常用的语法)
  10. html在电脑上转换字体怎么变了,电脑上如何音频转文字?