[物联网]2.4 存储数据--数据库

2022-03-29 14:27:32 浏览数 (1)

数据库的作用 数据库的作用是保存并灵活运用数据(图 2.25)。除此之外,其作用还包括从保存的数据中找出与所指定条件相符的数据。另外,数据库还能把多条数据连在一起,把它们作为一个数据取出。 打个比方,已知与特定传感器相关的 ID,测量时间,以及温度传感器的值。光凭这些数据,是无法理解数据指的是哪个房间的温度的。因此就需要传感器的 ID 以及跟房间名字有关的数据。把这两条数据加在一起,才能知道某房间的温度。 图 2.25 展示的是一个叫作 RDB(关系数据库)的数据库。最近,除了 RDB 以外还出现了一种叫作 NoSQL 的数据库。 RDB 用一种叫作 SQL 的专门用来操作数据库的语言来保存和提取数据。另一方面, NoSQL 则是用 SQL 以外的各种方法来操作数据库。 本书还会介绍键值存储( Key-Value Store,简称 KVS)和文档型数据库等种类的数据库。

数据库的种类和特征 这里我们一并为大家说明数据库的种类和特征,以及为了实现物联网服务而处理设备数据时的要点。 关系数据库 关系数据库是人们用得最普遍的数据库。如图 2.25 所示,关系数据库具备一种叫作表格的表格型数据结构,其用途在于存储数据库,使用者用 SQL 语言来对其执行数据的提取、插入以及删除。 SQL 是一种非常强大的语言,它能用非常简洁的表述写出命令,来把多个表格联系到一起,搜索符合目标条件的数据。此外,使用者还能通过多种多样的编程语言来使用 SQL。不过一旦确定了表格,就很难更改其结构了。因此,需要仔细考虑设备传来的数据性质再决定结构。 举个例子,假设由于传感器和设备的增加而导致一些必须保存的数据增多,此时,如果表格结构如图 2.26 所示,那么就很难再追加新的数据了。

在 A 表这种情况下,我们就必须变更表格的条目。而换成 B 表就没必要更改表格本身。不过,这样一来就需要生成一个新的表格。 因此,如图 2.27 所示,要生成一个结构来把所有传感器数据插入同一个字段里。采用这个结构时,即使来了新的传感器数据,也没有必要更改表格结构或是追加新的表格。不过传感器数据的类型必须是统一的,而且,这样一来就会在同一个表格里注册大量的数据。这种情况下,有时就得花一段时间才能从表格里检索到我们需要的数据。为了解决这个麻烦,数据库提供了一个叫作索引的机制。

以上列举的表格就是一个例子。关于用哪种方法构成表格更好,我们不能一概而论,而是需要先考虑注册的是怎样的数据,以后又会积累多少数据,然后再下决定。 关系数据库也不擅长保存图像和语音等二进制形式的数据。虽然能够用一种叫作 BLOB( Binary Large Object,二进制大对象)的数据形式来达到保存的目的,不过,这也需要另费一番工夫,因为根据用途,有时需要把图像直接保存为文件,把图像的路径单独保存在 RDB 里(图 2.28)。

数据库把数据保存到硬盘,因此经常会发生对硬盘的访问(磁盘 I/O)。这样一来,这步处理就比其他处理要慢。就系统中而言,这是处理速度方面容易产生瓶颈的一个地方。除了介绍的内容之外,还有一些需要大家注意的地方,希望大家加深对这部分内容的理解并将其灵活运用。 键值存储 键值存储属于 NoSQL 数据库的一种。NoSQL 是一种不使用 SQL数据库的统称。键值存储,就是把一种叫作“值”( value)的数据值,和能够一对一特定“值”的“键”( key)的集合保存在一起。此外,还有把数据保存在内存里的键值存储,以及把数据保存在硬盘里的键值存储。前者一方面能够高速保存数据,而另一方面,因为数据是放在内存上的,所以软件停止运行的时候,原先保存的内容就会丢失。因此前者适合作为缓存来使用。而后者保存数据的速度虽然不及前者,但即使软件停止运行,数据也不会丢失。 有一种叫作 Redis 的键值存储,它具备前后两者的性质,在通常情况下它是把数据存储在内存上的,但在任何时间都能够把数据保存到硬盘。因此,它既能够高速执行存储,也能永久保存数据。 文档型数据库 文档型数据库和键值存储一样,都属于 NoSQL 数据库的一种。文档型数据库能以 XML 和 JSON 这种结构化文档的格式保存数据。特别是近年来,有一种叫作 MongoDB 的文档型数据库很受欢迎,它以SON 的格式保存数据(图 2.29)。

MongoDB 能够直接保存 JSON 格式的数据,还能用 JSON 的值进行检索。这样一来,在用 JSON 交换传感器的信息时,就能直接对数据进行保存和使用。即使增加了新的数据条目或是新增了设备,也能直接以SON 格式保存数据,因此,不需要像 RDB 那样考虑表格的结构。非常适合用于无法读出设备的数量和数据的种类等情况,以及保存传感器等设备的数据。

0 人点赞