实时数据是工业物联网建设中经常遇到的一种数据类型,一般采用实时数据库来管理与存储,实时数据库是采用实时数据模型建立起来的数据库,用于处理不断更新的、快速变化的数据及具有时间限制的事务处理。实时数据库技术是实时系统和数据库技术相结合的产物,利用数据库技术来解决实时系统中的数据管理问题,同时利用实时技术为实时数据库提供时间驱动调度和资源分配算法。实时数据库是工业领域信息化的核心基础软件,是大数据、云计算和物联网等产业的核心支撑软件。
未来公司的重大决策将从【经验决策】到【实时数据驱动决策】,让一切行动以数据为基础,所有决策都基于定量分析,形成公司的决策事实。
一、实时数据特性:
时间约束、 事务调度、 数据存储、 数据在线压缩等。
二、通用的数据处理流程
三、实时数据与离线批处理数据的特征对比
四、流处理、分块流处理和批处理的对比
-
流处理: 无界,实时,无需对整个数据集执行操作,只对系统传输的每个数据项执行操作;适合实时统计
-
分块流处理:定制下的无界,实时,需要对部分数据集执行操作, 无需对整个数据集,只对系统传输的每个数据项执行操作;适合实时统计
-
批处理: 有界且大量、持久,适合访问全套记录才能完成的计算工作;适合离线统计
五、实时数据库、关系数据库和内存数据的对比
六、实时数据库常见的压缩算法:
实时数据库都是采用压缩存储,压缩有有损和无损压缩,
一般实际应用,流程工业采用10:1的压缩很合适,超过此数据,会发现大量有用的细节都不见了。
实时数据库方面常见的压缩算法是
Huffman( 哈夫曼 ) 算法,无损压缩,
属于可变代码长度算法一族,
意思是个体符号(比如,文本文件里的字符)用一个特定长度的位序列替代,
频率高的符号,使用短的位序列。而那些非常少出现的符号。则用较长的位序列。
Huffman编码流程
1.扫描要压缩的文件,对字符出现的频率进行计算。
2.把字符按出现的频率进行排序,组成一个队列。把出现频率最低(权值)的两个字符作为叶子节点。
3.它们的权值之和为根节点组成一棵树。
4.把上面叶子节点的两个字符从队列中移除,并把它们组成的根节点增加到队列。
5.把队列又一次进行排序。
6.反复步骤 3、4、5 直到队列中仅仅有一个节点为止。
7.把这棵树上的根节点定义为0(可自行定义0或1)左边为0 。右边为1 。
这样就得到每个叶子节点的哈夫曼编码了。
假设树的左边用0表示右边用1表示,如上方图e。则每个数能够用一个01串表示出来。
编码示例如下(
每个01串,既为每个数字的哈弗曼编码)
:
1–>110
2–>111
3–>10
4–>0
比如1
这个数字。用整数写进计算机硬盘去存储,占用了32个二进制位(8Byte),
而假设用它的哈弗曼编码去存储,仅仅有110三个二进制位,大大节约了存储空间。
七、通用数据处理计算的技术架构:一般架构设计的原则主要遵循合适、简单和演化原则,不要过度设计。
八、实时数据处理的开源方案
目前比较流行的开源解决方案是Aapache Druid,
Druid是一个分布式的、支持实时多维OLAP分析的数据处理系统。
Druid优势
-
亚秒响应的交互式查询,支持较高并发。
-
支持实时导入,导入即可被查询,支持高并发导入。
-
采用分布式 shared-nothing 的架构,可以扩展到PB级。
-
支持聚合函数,count 和 sum,以及使用 javascript 实现自定义 UDF。
-
支持复杂的 Aggregator,近似查询的 Aggregator 例如 HyperLoglog 以及 6. Yahoo 开源的 DataSketches。
-
支持Groupby,Select,Search查询。
-
不支持大表之间的Join,但其 lookup 功能满足和维度表的 Join。(最新版0.18已经支持Join,具体性能待测试)。