基于ARM平臺(tái)的嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
嵌入式系統(tǒng)是一種“完全嵌入受控件內(nèi)部,為特定應(yīng)用而設(shè)計(jì)的專用計(jì)算機(jī)系統(tǒng)”據(jù)不完全統(tǒng)計(jì),目前世界上嵌入式處理器的品種總量超過一千多種,流行的體系結(jié)構(gòu)也有30多個(gè)系列。但是沒有一種微處理器和微處理器公司可以主導(dǎo)嵌入式系統(tǒng)。由于嵌入式系統(tǒng)設(shè)計(jì)的差異性極大,因此選擇也是多樣化的。ARM是近年來在嵌入式系統(tǒng)很有影響力的微處理制造商,ARM的設(shè)計(jì)非常適用于小的嵌入式系統(tǒng)。
嵌入式系統(tǒng)必須根據(jù)應(yīng)用需求對(duì)軟硬件進(jìn)行剪裁,滿足應(yīng)用系統(tǒng)的功能、可靠性等要求。隨著嵌入式系統(tǒng)的廣泛應(yīng)用及嵌入式操作系統(tǒng)的不斷普及,嵌入式環(huán)境下的數(shù)據(jù)管理問題成為系統(tǒng)的重要環(huán)節(jié),工業(yè)系統(tǒng)要求嚴(yán)格的時(shí)間性,要求在一定的時(shí)刻或時(shí)間段內(nèi)對(duì)外部采集數(shù)據(jù)按照順序進(jìn)行存儲(chǔ),并及時(shí)作出響應(yīng)。所處理的數(shù)據(jù)往往是“短暫”的,只在一定的時(shí)間段內(nèi)有效,過時(shí)則沒有任何意義,傳統(tǒng)的嵌入式數(shù)據(jù)庫(kù)主要用于處理永久性數(shù)據(jù),設(shè)計(jì)時(shí)主要強(qiáng)調(diào)維護(hù)數(shù)據(jù)的完整性、一致性,提高系統(tǒng)的吞吐量和降低系統(tǒng)代價(jià),沒有考慮與數(shù)據(jù)處理相關(guān)聯(lián)的時(shí)間因素,因而傳統(tǒng)的嵌入式數(shù)據(jù)庫(kù)無法滿足工業(yè)實(shí)時(shí)應(yīng)用的需求,因此我們開發(fā)了一款嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng),實(shí)現(xiàn)了與操作系統(tǒng)的融合,建立屬于實(shí)時(shí)數(shù)據(jù)庫(kù)獨(dú)有的緩沖區(qū)管理,將數(shù)據(jù)庫(kù)的歸檔文件建立在專用的文件系統(tǒng)之上,該文件系統(tǒng)提供獨(dú)立的訪問接口及管理磁盤空間。1嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)分析
嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)是指在嵌入式設(shè)備中獨(dú)立運(yùn)行的數(shù)據(jù)庫(kù)系統(tǒng),用以處理大量的,時(shí)效性強(qiáng)且有嚴(yán)格時(shí)序的數(shù)據(jù),它以高可靠性、高實(shí)時(shí)性和高信息吞吐量為目標(biāo),其數(shù)據(jù)的正確性不僅依賴于邏輯結(jié)果,而是依賴于邏輯結(jié)果產(chǎn)生的時(shí)間。由于嵌入式系統(tǒng)沒有充足的硬件資源支持,要求數(shù)據(jù)庫(kù)管理系統(tǒng)占用最小的內(nèi)存和磁盤空間。如果用Linux自帶的文件系統(tǒng)或大型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),都不可避免地產(chǎn)生大量的冗余數(shù)據(jù)、數(shù)據(jù)管理效率低下等問題。所以,它們不能應(yīng)用于嵌入式系統(tǒng)的數(shù)據(jù)管理。嵌入式環(huán)境下設(shè)計(jì)的實(shí)時(shí)數(shù)據(jù)庫(kù)必須包含高效的存取機(jī)制,數(shù)據(jù)安全性機(jī)制,數(shù)據(jù)庫(kù)日志管理等功能。在實(shí)際設(shè)計(jì)中更關(guān)心系統(tǒng)的實(shí)時(shí)性,開銷大小,系統(tǒng)性能,可靠性等。
嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)按照與嵌入式應(yīng)用的關(guān)系可以分為兩類[1]:一類是獨(dú)立于具體的應(yīng)用,它將數(shù)據(jù)庫(kù)直接建立在內(nèi)存之中,專門為嵌入式系統(tǒng)數(shù)據(jù)管理而編寫的實(shí)時(shí)數(shù)據(jù)庫(kù);另一類是針對(duì)具體的應(yīng)用而設(shè)計(jì)開發(fā)的嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)。本文的實(shí)現(xiàn)屬于后者,介紹針對(duì)工業(yè)數(shù)據(jù)處理的嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)。
基于專用文件系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)基本思想是將數(shù)據(jù)庫(kù)技術(shù)引入文件系統(tǒng),目前有兩種實(shí)現(xiàn)方式:一種是搭建一個(gè)基于現(xiàn)有數(shù)據(jù)庫(kù)的文件系統(tǒng),其中數(shù)據(jù)庫(kù)充當(dāng)了新文件系統(tǒng)的基石。另一種是對(duì)傳統(tǒng)文件系統(tǒng)進(jìn)行改造,將文件系統(tǒng)設(shè)計(jì)成一個(gè)“數(shù)據(jù)庫(kù)”,文件系統(tǒng)與數(shù)據(jù)庫(kù)完全融合。它不同于傳統(tǒng)的文件系統(tǒng),其改造使得其文件的組織和訪問發(fā)生重大的變化,因?yàn)槲募到y(tǒng)更加數(shù)據(jù)庫(kù)化,包含“文件”、“目錄”這樣的概念也可能發(fā)生改變。對(duì)于文件的組織和訪問,或者說數(shù)據(jù)的組織和訪問,也會(huì)更加側(cè)重于數(shù)據(jù)庫(kù)的方式,它會(huì)對(duì)各種數(shù)據(jù)提供統(tǒng)一訪問存儲(chǔ)機(jī)制,以此來獲得有效而靈活的數(shù)據(jù)查詢機(jī)制。本文使用了后者的實(shí)現(xiàn)方式,將數(shù)據(jù)庫(kù)與專用文件系統(tǒng)進(jìn)行融合,提供了統(tǒng)一的訪問接口。
2嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)的設(shè)計(jì)模型
2.1實(shí)時(shí)數(shù)據(jù)特點(diǎn)
實(shí)時(shí)數(shù)據(jù)自然是與時(shí)間緊密相關(guān)的,工業(yè)上嵌入式實(shí)時(shí)根據(jù)點(diǎn)號(hào)分配磁盤塊I數(shù)據(jù)庫(kù)所存儲(chǔ)的數(shù)據(jù)通常是基于時(shí)間的連續(xù)模擬量或者數(shù)字量,如:溫度、流量、壓力、閥門開關(guān)等,這些數(shù)據(jù)有以下幾個(gè)特點(diǎn):
時(shí)效性
每個(gè)記錄的值都與時(shí)間有關(guān)聯(lián),數(shù)據(jù)隨時(shí)間不斷添加入數(shù)據(jù)庫(kù),這些數(shù)據(jù)的順序按照時(shí)間來排序的,以后不會(huì)被重新排序,而每秒中的數(shù)據(jù)都有可能發(fā)生改變。因此,在記錄數(shù)據(jù)值得過程中必須記錄其相應(yīng)的時(shí)間。在數(shù)據(jù)查找時(shí),也必須確定其時(shí)間點(diǎn),否則數(shù)據(jù)就沒有存在的意義。
數(shù)據(jù)格式
與關(guān)系型數(shù)據(jù)庫(kù)中的元組不同,工業(yè)數(shù)據(jù)每一條數(shù)據(jù)只包含一條記錄,數(shù)據(jù)格式相對(duì)簡(jiǎn)單,固定和獨(dú)立。從應(yīng)用角度來看,保存的數(shù)據(jù)有I/O整型、離散型、實(shí)數(shù)型、開關(guān)量等。但從數(shù)據(jù)存儲(chǔ)技術(shù)方面看,都可歸納為1字節(jié),2字節(jié),4字節(jié)這三種情況,每一條記錄的屬性比較少,不存在記錄點(diǎn)與記錄點(diǎn)之間的依賴關(guān)系,沒有類似關(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)間的復(fù)雜關(guān)系,它記錄格式少,關(guān)系簡(jiǎn)單,可以采用統(tǒng)一的結(jié)構(gòu)化管理。
數(shù)據(jù)時(shí)間間隔
在工業(yè)現(xiàn)場(chǎng)中,某些記錄點(diǎn)變化頻率非??欤行﹦t是很長(zhǎng)一段時(shí)間才會(huì)發(fā)生變化,根據(jù)這個(gè)特點(diǎn),設(shè)計(jì)實(shí)時(shí)數(shù)據(jù)庫(kù)時(shí)必須兼顧細(xì)分要求。
根據(jù)實(shí)時(shí)數(shù)據(jù)的特點(diǎn),可以發(fā)現(xiàn)將實(shí)時(shí)數(shù)據(jù)存入關(guān)系型數(shù)據(jù)庫(kù)既浪費(fèi)系統(tǒng)資源,又無法滿足其對(duì)實(shí)時(shí)性的要求,因此,我們?cè)O(shè)計(jì)了實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)用于存儲(chǔ)一定格式的工業(yè)數(shù)據(jù),其數(shù)據(jù)格式設(shè)定為三元組<點(diǎn)號(hào)、時(shí)間、數(shù)值>,其中“點(diǎn)號(hào)”代表工業(yè)現(xiàn)場(chǎng)的單值采樣設(shè)備,“時(shí)間”代表設(shè)備狀態(tài)的采樣時(shí)刻,“數(shù)值”代表設(shè)備的工作狀態(tài)或計(jì)量值。每一個(gè)數(shù)值由時(shí)間和點(diǎn)號(hào)確定,如果沒有確定的時(shí)間與點(diǎn)號(hào),數(shù)據(jù)則沒有任何意義。
2.2嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)設(shè)計(jì)框架
在系統(tǒng)架構(gòu)方面,從操作系統(tǒng)內(nèi)核結(jié)構(gòu)的角度來看,數(shù)據(jù)庫(kù)文件系統(tǒng)放在操作系統(tǒng)的內(nèi)核之內(nèi),將數(shù)據(jù)庫(kù)技術(shù)與文件系統(tǒng)技術(shù)深度結(jié)合叫圖1所示為實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)在操作系統(tǒng)中存在形式。
嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)不使用一般文件系統(tǒng)中的文件目錄結(jié)構(gòu),而是建立針對(duì)實(shí)時(shí)數(shù)據(jù)的索引結(jié)構(gòu),以便實(shí)現(xiàn)對(duì)磁盤數(shù)據(jù)的高效讀寫,它的數(shù)據(jù)接口是通過在操作系統(tǒng)中建立新的系統(tǒng)調(diào)用來實(shí)現(xiàn)的,使用了Linux中現(xiàn)有的磁盤驅(qū)動(dòng)程序,通過VFS完成在Linux環(huán)境下文件系統(tǒng)的注冊(cè)和安裝。嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)的基本原型如圖2所示。
圖2嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)(ERTFS)的體系結(jié)構(gòu)
該結(jié)構(gòu)提供了對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行讀寫的調(diào)用接口:其中數(shù)據(jù)寫(rt_write)可更新一組塊數(shù)據(jù),包括磁盤塊號(hào)以及寫進(jìn)該塊的數(shù)據(jù)內(nèi)容,可將數(shù)據(jù)寫入磁盤。數(shù)據(jù)讀(rt_read)則用于讀出某一磁盤塊數(shù)據(jù),或者讀出一批磁盤塊數(shù)據(jù)。數(shù)據(jù)存儲(chǔ)則以完整的塊數(shù)據(jù)為基礎(chǔ),在文件系統(tǒng)內(nèi)部不對(duì)塊內(nèi)數(shù)據(jù)進(jìn)行任何處理,而對(duì)塊數(shù)據(jù)內(nèi)容的規(guī)整必須在文件系統(tǒng)之上完成。嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)的數(shù)據(jù)處理流程如圖3所示。
數(shù)據(jù)存儲(chǔ)時(shí)根據(jù)點(diǎn)號(hào)分配磁盤塊,查看磁盤塊空間是否寫滿,若寫滿則分配新的磁盤塊,然后為磁盤塊分配緩沖塊,將數(shù)據(jù)庫(kù)拷貝到緩沖塊,通過Linux的塊設(shè)備驅(qū)動(dòng)程序進(jìn)行寫入磁盤,同時(shí)維護(hù)索引區(qū)。數(shù)據(jù)讀取時(shí)主要根據(jù)點(diǎn)號(hào)和時(shí)間進(jìn)行讀取,如果沒有確定的時(shí)間點(diǎn),數(shù)據(jù)沒有任何意義。
2.3文件結(jié)構(gòu)
嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)的通過點(diǎn)號(hào)進(jìn)行索引,每個(gè)點(diǎn)號(hào)指向?qū)?yīng)的數(shù)據(jù)簇,它的數(shù)據(jù)組織方式如圖4所示。
圖4按照點(diǎn)時(shí)間管理數(shù)據(jù)
嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)以點(diǎn)作為索引,在對(duì)某一點(diǎn)的數(shù)據(jù)進(jìn)行訪問時(shí),需要獲取該點(diǎn)的點(diǎn)信息,按照鏈表的方式來索引到指定的數(shù)據(jù)簇,在數(shù)據(jù)簇內(nèi),查詢命中的數(shù)據(jù)塊,將數(shù)據(jù)從數(shù)據(jù)區(qū)讀取或者存入,采用這種索引結(jié)構(gòu),可以減少數(shù)據(jù)的訪問時(shí)間,提高了實(shí)時(shí)數(shù)據(jù)的查詢能力。其中點(diǎn)所指向的數(shù)據(jù)塊基本信息如圖5所示。
圖5中,數(shù)據(jù)塊索引信息將記錄數(shù)據(jù)塊信息,每個(gè)數(shù)據(jù)塊存儲(chǔ)固定數(shù)目的實(shí)時(shí)數(shù)據(jù),為了節(jié)約存儲(chǔ)空間,塊內(nèi)的每個(gè)時(shí)間值只保存偏移量,即實(shí)際時(shí)間減去該塊數(shù)據(jù)起始時(shí)間。圖6所示為數(shù)據(jù)塊的存儲(chǔ)結(jié)構(gòu)。
3性能測(cè)試
測(cè)試選取的嵌入式ARM開發(fā)板選取YLE2440,處理器為SamsungS2C2440A,主頻400MHz:外部存儲(chǔ)器NorFLASH:2MB;NandFLASH:64MB;存取介質(zhì)選取8GB的惠普優(yōu)盤進(jìn)行讀寫。實(shí)驗(yàn)過程中將實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)正常編譯到了嵌入式Linux內(nèi)核中,內(nèi)核能夠穩(wěn)定的工作,格式化程序能夠?qū)?yōu)盤進(jìn)行格式化,經(jīng)過格式化后的優(yōu)盤能夠掛載到實(shí)時(shí)數(shù)據(jù)庫(kù)文件系統(tǒng)上,能夠?qū)ζ溥M(jìn)行數(shù)據(jù)讀和寫。
4結(jié)語
本文通過對(duì)嵌入式數(shù)據(jù)庫(kù)的分析,提出了針對(duì)實(shí)時(shí)數(shù)據(jù)的嵌入式實(shí)時(shí)數(shù)據(jù)的框架結(jié)構(gòu),介紹了其文件系統(tǒng)在Linux內(nèi)核中的存在形態(tài)以及其數(shù)據(jù)讀取接口,根據(jù)實(shí)時(shí)數(shù)據(jù)的特點(diǎn)設(shè)計(jì)了通過點(diǎn)進(jìn)行索引的文件結(jié)構(gòu),在數(shù)據(jù)文件內(nèi)部,按照時(shí)間段分簇的方式來歸類同一時(shí)間段內(nèi)的數(shù)據(jù)。通過本文的闡述,讀者可以大致明白如何設(shè)計(jì)實(shí)時(shí)數(shù)據(jù)庫(kù)以及實(shí)現(xiàn)特有文件系統(tǒng)。
20211124_619d105eaa45f__基于ARM平臺(tái)的嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)