根据Gartner的报告,估计未来五年物联网设备的数量将达到数万亿。物联网呈现出高度新颖的挑战,特别是对数据库管理系统的挑战,如如何实时集成大量庞大的数据,并处理数据的安全性。例如,智能城市中应用的基于物联网的交通传感器将实时生成大量的交通数据。数据库在充分处理物联网数据方面发挥着非常重要的作用。因此,随着一个适当的平台,正确的数据库同样重要。由于物联网在全球多元化的环境中运作,选择适当的数据库变得非常具有挑战性。另一个例子就是安装在智能城市中的基于物联网的环境温度传感器,它可以在几分钟内产生大量关于活跃大气温度和湿度的数据。
可见,物联网一个重要特点是以数据为中心:
1. 海量性
假设有一个拥有100个传感器的传感网,而每个传感节点每分钟只传回1Kb的数据,那么每天的数据量就达到1.4Gb。如果是一些大型的敏感的传感网,每天的数据量可达1TB以上。至于未来物物互联的物联网时代,产生的数据就是十分庞大的数量。因此物联网数据具有海量性。
2. 多态性
物联网的应用包罗万象,产生的数据自然也是多种多样。有温度、湿度等环境数据;有视频、音频等多媒体数据;还有与用户交换信息的结构化数据等等。数据的多态性必然增加数据的复杂性,不同网络产生的数据格式可能不同,就算是相同类型的数据也会有单位和精度的差别,一个测量量在不同的时间也在变化。因此物联网数据具有多态性。
3. 关联性及语义性
物联网中的数据都不会是相互独立的。描述同一个实体的数据在时间上具有关联性;描述不同实体的数据在空间上会有关联性;描述实体的不同维度之间也具有关联性。而不同的关联性组合会产生丰富的语义,可以通过数据在时间或空间或维度上的关联性推断出实体的变化。
简言之,在很多物联网系统中都需要对数量庞大的联网设备进行监控,并对监控采样到的数据进行持久化。经过分析不难看出,物联网中的数据类型有:
- RFID:射频识别
- 地址/仅有标识符
- 过程,系统和对象的描述性数据
- 普遍的环境数据和位置数据
- 传感器数据:多维时间序列数据
- 历史数据
- 物理模型:模型是现实的模板
- 用于控制的执行器和命令数据的状态
所以,我们在为物联网应用选择数据库之前应考虑的因素有:
- 尺寸,比例和索引
- 处理大量数据时的有效性
- 用户友好的模式
- 便携性
- 查询语言
- 流程建模和交易
- 异质性和一体化
- 时间序列聚合
- 存档
- 安全性和成本
下面通过一张图来简单分析一下当前各种用于大数据时代的数据库特点
从这张对比图不难看出,这些基于存储的数据库各有其自己的优势和缺陷,Hbase 属于 NO SQL ,虽然适合于高并发查询,但它不直接支持SQL 查询;MYSQL 属于传统的 RDS, 其系统的扩展性较差,不适合海量数据大批量处理;Redis 属于内存数据库系统, 过分依赖于内存计算, 系统的扩展性和安全性较差。
那么究竟什么样的数据适合于物联网呢?
其实,很多年前在工业领域已经有专门的数据库来完成这个任务了,在工业领域这个叫实时数据库。工业领域的实时数据库具有数据采集、实时数据缓存、数据回写(向设备发送指令)、采样数据归档存盘等主要功能。
目前工业领域实时数据库基本上被国外厂家所垄断,价格昂贵。例如,PI(Plant Information System)是由美国OSIsoft公司开发的一套基于Client/Server结构的商品化软件应用平台,作为工厂底层控制网络与上层管理信息系统网络连接的桥梁,PI在工厂信息集成中扮演着特殊和重要的角色。PI数据库基础版本(只有5000个测点)就需要大约10万美元,每个数据采集接口需要6000美元。这个价格对新兴的物联网公司来说代价太大了。
以下重点推荐几款适用于物联网的开源数据库:
1. InfluxDB
开源网址:https://github.com/influxdata/influxdb
InfluxDB于2013年发布,是最近的数据库之一。 Go编程语言用于开发此数据库,该数据库完全基于LevelDB,一个键值数据库。 InfluxDB是一个时间序列数据库,用于优化和处理时间序列数据。 2000年Kdb发布时间序列数据,但随着物联网的兴起,InfluxDB开始流行起来,因为它推动了NoSQL,NewSQL和大量不断增加的数据。
使用InfluxDB进行物联网数据的优势包括:
- 允许编制索引
- 它有一个类似于SQL的查询语言
- 它还提供了缺失数据的内置线性插值
- 它支持自动数据下采样
- 支持连续查询来计算聚合
2. CrateDB
开源网址:https://github.com/crate/crate
CrateDB是一个分布式SQL数据库管理系统。作为开源代码并以Java编写,它包含了来自Facebook Presto,Apache Lucene,Elasticsearch和Netty的组件,因此它的设计具有很高的可扩展性。 CrateDB是为了使物联网数据正常工作而开发的。从工业互联网和连接汽车到可穿戴设备,CrateDB是新型物联网解决方案创新者的常选数据库。
使用CrateDB进行物联网数据的优势包括:
- 每秒数百万个数据点:快速,可线性扩展的数据摄取
- 实时查询:列式索引和字段缓存提供内存中的SQL性能
- 动态模式:即时添加和查询新的传感器数据结构
- 物联网分析:快速,强大的时间序列,AI,地理空间,文本搜索,连接,聚合
- 始终开启:内置数据复制和群集重新平衡确保不间断的性能
- ANSI SQL:无需锁定,便于任何开发人员使用和集成
- 内置MQTT代理:直接从设备到数据库集成
- 物联网生态系统:适用于Kafka,Grafana,NodeRED和其他流行的物联网堆栈软件
- 在任何地方运行,以便在边缘或云中进行高效处理
3. RethinkDB
开源网址:https://github.com/rethinkdb/rethinkdb
在开源数据库列表中,RethinkDB位于顶部。它是用于实时Web的可扩展JSON数据库,它是从头开始构建的。 RethinkDB通过转换传统的数据库体系结构引入了令人兴奋的新访问模式。当开发人员向其发送命令时,它可以不断将更新后的查询结果推送至应用程序。这是开发人员称为换卡的功能。 RethinkDB作为系统状态的数据库,实时存储库和消息代理,这是更改进程允许的。其实时推送体系结构大大减少了构建可扩展实时应用程序所需的时间和精力。
将RethinkDB用于物联网传感器数据的优点包括:
- RethinkDB具有适用于检查API的查询语言,这非常容易设置和学习。
- 如果任何主服务器发生故障,命令会自动转移到新服务器。
- 实时即插即用的节点功能,即使是一秒钟也没有停机时间,有助于节点的轻松添加。
- 通过Ruby和Tornado中的Eventmachine提供异步查询,从而提供异步应用程序编程接口。
- 它提供SSL访问只是为了通过公共互联网安全地访问RethinkDB。
- Floor,Ceil和Round是由RethinkDB提供的各种数学运算符。
4. Apache Cassandra
开源网址:
- http://cassandra.apache.org/,
- https://github.com/apache/cassandra
Apache Cassandra是一个免费的开源分布式NoSQL数据库管理系统,最初于2008年发布。它旨在通过许多商品服务器处理大量数据,提供高可用性,无单点故障。
在物联网中,由于大量连接的设备,通过各种网络生成,跟踪和共享数据的规模非常巨大。 Cassandra非常擅长利用大量时间序列数据,这些数据直接来自设备,用户,传感器以及存在于不同地理位置的类似机制。
使用Apache Cassandra获得物联网数据的优势包括:
- 容错
- 演示高性能
- 分散化:集群中的每个节点都是相同的
- 可扩展
- 耐用
- 确保您处于控制之下:每个更新都可以选择同步和异步复制
- 弹性:读取和写入都是实时执行的,因此任何应用程序都没有停机时间
- 专业支持:它强化了第三方提供的合同和服务。