基于ARM平台的嵌入式实时数据库的设计与实现
扫描二维码
随时随地手机看文章
引言
嵌入式系统是一种“完全嵌入受控件内部,为特定应用而设计的专用计算机系统”据不完全统计,目前世界上嵌入式处理器的品种总量超过一千多种,流行的体系结构也有30多个系列。但是没有一种微处理器和微处理器公司可以主导嵌入式系统。由于嵌入式系统设计的差异性极大,因此选择也是多样化的。ARM是近年来在嵌入式系统很有影响力的微处理制造商,ARM的设计非常适用于小的嵌入式系统。
嵌入式系统必须根据应用需求对软硬件进行剪裁,满足应用系统的功能、可靠性等要求。随着嵌入式系统的广泛应用及嵌入式操作系统的不断普及,嵌入式环境下的数据管理问题成为系统的重要环节,工业系统要求严格的时间性,要求在一定的时刻或时间段内对外部采集数据按照顺序进行存储,并及时作出响应。所处理的数据往往是“短暂”的,只在一定的时间段内有效,过时则没有任何意义,传统的嵌入式数据库主要用于处理永久性数据,设计时主要强调维护数据的完整性、一致性,提高系统的吞吐量和降低系统代价,没有考虑与数据处理相关联的时间因素,因而传统的嵌入式数据库无法满足工业实时应用的需求,因此我们开发了一款嵌入式实时数据库系统,实现了与操作系统的融合,建立属于实时数据库独有的缓冲区管理,将数据库的归档文件建立在专用的文件系统之上,该文件系统提供独立的访问接口及管理磁盘空间。1嵌入式实时数据库分析
嵌入式实时数据库系统是指在嵌入式设备中独立运行的数据库系统,用以处理大量的,时效性强且有严格时序的数据,它以高可靠性、高实时性和高信息吞吐量为目标,其数据的正确性不仅依赖于逻辑结果,而是依赖于逻辑结果产生的时间。由于嵌入式系统没有充足的硬件资源支持,要求数据库管理系统占用最小的内存和磁盘空间。如果用Linux自带的文件系统或大型关系型数据库管理系统,都不可避免地产生大量的冗余数据、数据管理效率低下等问题。所以,它们不能应用于嵌入式系统的数据管理。嵌入式环境下设计的实时数据库必须包含高效的存取机制,数据安全性机制,数据库日志管理等功能。在实际设计中更关心系统的实时性,开销大小,系统性能,可靠性等。
嵌入式实时数据库系统按照与嵌入式应用的关系可以分为两类[1]:一类是独立于具体的应用,它将数据库直接建立在内存之中,专门为嵌入式系统数据管理而编写的实时数据库;另一类是针对具体的应用而设计开发的嵌入式实时数据库系统。本文的实现属于后者,介绍针对工业数据处理的嵌入式实时数据库。
基于专用文件系统的数据库设计基本思想是将数据库技术引入文件系统,目前有两种实现方式:一种是搭建一个基于现有数据库的文件系统,其中数据库充当了新文件系统的基石。另一种是对传统文件系统进行改造,将文件系统设计成一个“数据库”,文件系统与数据库完全融合。它不同于传统的文件系统,其改造使得其文件的组织和访问发生重大的变化,因为文件系统更加数据库化,包含“文件”、“目录”这样的概念也可能发生改变。对于文件的组织和访问,或者说数据的组织和访问,也会更加侧重于数据库的方式,它会对各种数据提供统一访问存储机制,以此来获得有效而灵活的数据查询机制。本文使用了后者的实现方式,将数据库与专用文件系统进行融合,提供了统一的访问接口。
2嵌入式实时数据库文件系统的设计模型
2.1实时数据特点
实时数据自然是与时间紧密相关的,工业上嵌入式实时根据点号分配磁盘块I数据库所存储的数据通常是基于时间的连续模拟量或者数字量,如:温度、流量、压力、阀门开关等,这些数据有以下几个特点:
时效性
每个记录的值都与时间有关联,数据随时间不断添加入数据库,这些数据的顺序按照时间来排序的,以后不会被重新排序,而每秒中的数据都有可能发生改变。因此,在记录数据值得过程中必须记录其相应的时间。在数据查找时,也必须确定其时间点,否则数据就没有存在的意义。
数据格式
与关系型数据库中的元组不同,工业数据每一条数据只包含一条记录,数据格式相对简单,固定和独立。从应用角度来看,保存的数据有I/O整型、离散型、实数型、开关量等。但从数据存储技术方面看,都可归纳为1字节,2字节,4字节这三种情况,每一条记录的属性比较少,不存在记录点与记录点之间的依赖关系,没有类似关系数据库中数据间的复杂关系,它记录格式少,关系简单,可以采用统一的结构化管理。
数据时间间隔
在工业现场中,某些记录点变化频率非常快,而有些则是很长一段时间才会发生变化,根据这个特点,设计实时数据库时必须兼顾细分要求。
根据实时数据的特点,可以发现将实时数据存入关系型数据库既浪费系统资源,又无法满足其对实时性的要求,因此,我们设计了实时数据库文件系统用于存储一定格式的工业数据,其数据格式设定为三元组<点号、时间、数值>,其中“点号”代表工业现场的单值采样设备,“时间”代表设备状态的采样时刻,“数值”代表设备的工作状态或计量值。每一个数值由时间和点号确定,如果没有确定的时间与点号,数据则没有任何意义。
2.2嵌入式实时数据库文件系统设计框架
在系统架构方面,从操作系统内核结构的角度来看,数据库文件系统放在操作系统的内核之内,将数据库技术与文件系统技术深度结合叫图1所示为实时数据库文件系统在操作系统中存在形式。
嵌入式实时数据库文件系统不使用一般文件系统中的文件目录结构,而是建立针对实时数据的索引结构,以便实现对磁盘数据的高效读写,它的数据接口是通过在操作系统中建立新的系统调用来实现的,使用了Linux中现有的磁盘驱动程序,通过VFS完成在Linux环境下文件系统的注册和安装。嵌入式实时数据库文件系统的基本原型如图2所示。
图2嵌入式实时数据库文件系统(ERTFS)的体系结构
该结构提供了对实时数据进行读写的调用接口:其中数据写(rt_write)可更新一组块数据,包括磁盘块号以及写进该块的数据内容,可将数据写入磁盘。数据读(rt_read)则用于读出某一磁盘块数据,或者读出一批磁盘块数据。数据存储则以完整的块数据为基础,在文件系统内部不对块内数据进行任何处理,而对块数据内容的规整必须在文件系统之上完成。嵌入式实时数据库文件系统的数据处理流程如图3所示。
数据存储时根据点号分配磁盘块,查看磁盘块空间是否写满,若写满则分配新的磁盘块,然后为磁盘块分配缓冲块,将数据库拷贝到缓冲块,通过Linux的块设备驱动程序进行写入磁盘,同时维护索引区。数据读取时主要根据点号和时间进行读取,如果没有确定的时间点,数据没有任何意义。
2.3文件结构
嵌入式实时数据库文件系统的通过点号进行索引,每个点号指向对应的数据簇,它的数据组织方式如图4所示。
图4按照点时间管理数据
嵌入式实时数据库文件系统以点作为索引,在对某一点的数据进行访问时,需要获取该点的点信息,按照链表的方式来索引到指定的数据簇,在数据簇内,查询命中的数据块,将数据从数据区读取或者存入,采用这种索引结构,可以减少数据的访问时间,提高了实时数据的查询能力。其中点所指向的数据块基本信息如图5所示。
图5中,数据块索引信息将记录数据块信息,每个数据块存储固定数目的实时数据,为了节约存储空间,块内的每个时间值只保存偏移量,即实际时间减去该块数据起始时间。图6所示为数据块的存储结构。
3性能测试
测试选取的嵌入式ARM开发板选取YLE2440,处理器为SamsungS2C2440A,主频400MHz:外部存储器NorFLASH:2MB;NandFLASH:64MB;存取介质选取8GB的惠普优盘进行读写。实验过程中将实时数据库文件系统正常编译到了嵌入式Linux内核中,内核能够稳定的工作,格式化程序能够对优盘进行格式化,经过格式化后的优盘能够挂载到实时数据库文件系统上,能够对其进行数据读和写。
4结语
本文通过对嵌入式数据库的分析,提出了针对实时数据的嵌入式实时数据的框架结构,介绍了其文件系统在Linux内核中的存在形态以及其数据读取接口,根据实时数据的特点设计了通过点进行索引的文件结构,在数据文件内部,按照时间段分簇的方式来归类同一时间段内的数据。通过本文的阐述,读者可以大致明白如何设计实时数据库以及实现特有文件系统。