• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Smartphone 類手機數(shù)據(jù)庫設計

      2013-03-19 13:03:52劉洲洲
      微處理機 2013年3期
      關鍵詞:數(shù)據(jù)庫系統(tǒng)字節(jié)數(shù)據(jù)庫

      劉洲洲

      (西安航空學院,西安 710077)

      1 引言

      隨著多媒體移動終端(PDA,智能手機)的快速發(fā)展,手機已經不再只是用于語音通信的手持設備,而成為集成了MP3、MP4 以及上網移動辦公等附加功能的嵌入式通信平臺。同時移動通信網絡的服務能力和承載能力也取得大幅度的提升,其發(fā)展也趨于智能化,各種功能都將變得更為強勁[1-2]。與此同時,手機需要管理的數(shù)據(jù)量也越來越大,傳統(tǒng)的手機軟件系統(tǒng)很難適應新的需要?,F(xiàn)在的主流手機都是簡單地從存儲介質上直接讀取短信、電話簿和通話記錄等,也就是基于文件系統(tǒng)實現(xiàn)的,這樣的架構有一個最大的弊端,那就是數(shù)據(jù)庫受到了文件系統(tǒng)的牽制,文件系統(tǒng)的低效率會直接影響到數(shù)據(jù)庫的存取速度?,F(xiàn)在要改為基于數(shù)據(jù)庫設備,直接面向Flash 驅動的方案進行設計研究。

      2 數(shù)據(jù)庫方案設計

      文中的Smartphone是Accelerator Technology 公司開發(fā)的一種嵌入式RTOS 產品,其操作系統(tǒng)為Nucleus,只需一次性購買Licenses,就可以獲得操作系統(tǒng)的源碼,目前手機行業(yè)有很多使用Nucleus 操作系統(tǒng)。測試平臺采用展訊的SC6600 基帶處理芯片,多媒體芯片則采用廣達的QCP1880 芯片平臺,音頻編解碼芯片采用Wolfson 8750 芯片。

      數(shù)據(jù)庫設備是這樣一個概念,用一塊Flash的一段連續(xù)空間構成數(shù)據(jù)庫存儲介質,在此基礎上加上數(shù)據(jù)庫驅動和一個簡單的FMM,就構成了數(shù)據(jù)庫設備,它向數(shù)據(jù)庫系統(tǒng)提供一個可逆的連續(xù)邏輯地址空間。所謂可逆就是在Flash 整理的時候,物理地址改動而邏輯地址不變。所謂連續(xù)指的是數(shù)據(jù)庫設備向數(shù)據(jù)庫系統(tǒng)提供的是一個線性連續(xù)的地址空間,但是在設備低層,依然是一個塊設備,一個塊定義為一個擦除塊的大小,根據(jù)Flash的硬件特性可能是64K 或者16K。

      本中所描述的數(shù)據(jù)庫并不是一個關系數(shù)據(jù)庫,每個數(shù)據(jù)庫由一個個數(shù)據(jù)庫名和若干個變長的記錄外加一個或者多個索引表構成。索引表按照一定的規(guī)則對記錄進行排序。記錄主要由一個類別加上一個目錄信息再加上記錄數(shù)據(jù)構成。目錄是一種特別的記錄,它的類別表明它是一個目錄,它的數(shù)據(jù)是一個字符串表示目錄名。索引表以一個記錄的形式保存到數(shù)據(jù)庫里,并用記錄類別加以區(qū)分。數(shù)據(jù)庫基于數(shù)據(jù)庫設備,與文件系統(tǒng)以及注冊表無關,這可能會對數(shù)據(jù)庫初始化及打開數(shù)據(jù)庫帶來不便,但是這種獨立性有兩個好處,一是便于移植,二是其他模塊的BUG 甚至崩潰都不會直接影響數(shù)據(jù)庫系統(tǒng)。

      2.1 數(shù)據(jù)庫設備

      文中采取的方案為數(shù)據(jù)庫設備向下直接面向Flash 驅動,向上向數(shù)據(jù)庫系統(tǒng)提供線性的尋址空間,它用一個地址映射表來實現(xiàn)將Flash的一個個擦除塊映射成為一個連續(xù)的可逆邏輯地址空間。邏輯地址從0 開始編址,如果設備大小是2M,那么邏輯地址就是0x00000000 到0x00200000。數(shù)據(jù)庫設備是和數(shù)據(jù)庫相關的,表現(xiàn)在幾個方面。第一,雖然邏輯地址是連續(xù)的,但是數(shù)據(jù)庫要求每個記錄不能跨Bank(注:文中提到的Bank 就是一個擦除塊,大小為64K),也就是說記錄必需寫在同一個擦除塊中,以便整理臟塊;這要求數(shù)據(jù)庫設備要提供動態(tài)分配記錄空間的能力。第二,整理臟塊時,數(shù)據(jù)庫設備不能獨立完成,必須依賴于記錄索引表,因為已經刪除的記錄在索引表中有刪除標記。第三,為了完成動態(tài)分配記錄空間的功能,數(shù)據(jù)庫設備必需記錄每個查處塊的使用情況,包括已經用掉多少、剩余多少、臟塊多少等等,這些數(shù)據(jù)的來源都是數(shù)據(jù)庫操作。第四,有關掉電保護,塊擦除時掉電保護由設備層獨立完成,但是記錄在增、刪、改等操作時的掉電保護要靠數(shù)據(jù)庫系統(tǒng)的操作次序保障。

      為了便于描述,假定數(shù)據(jù)庫設備大小為2M,每個擦除塊大小為64K,這樣一共有32個擦除塊,其中有一個塊作為Bank0的交換塊,可用的只有31個塊。為了實現(xiàn)地址映射,給這31個擦除塊每個塊的前四個字節(jié)寫入塊ID 號,ID 號由28 位Bank 號加上4 位Flag 構成,數(shù)據(jù)結構如下:

      0~27Bits,Bank 號

      28~31Bits,F(xiàn)lag

      其中,Bank 號是地址映射表的下標序號,取值范圍0~30。Flag是掉電保護標志,具體含義如下:

      Flag=0xF 表示該Bank 空閑(Free)。

      Flag=0xE 表示正在整理過程中,該Bank是交換塊,而且數(shù)據(jù)轉存完成,系統(tǒng)正在擦除原來的臟塊。

      Flag=0xC 表示該Bank 在使用中,其中的記錄有效。

      Flag=0x8 表示該Bank為臟塊,需要擦除。

      Flag=其他 無效標志,該Bank 需要擦除。

      在系統(tǒng)啟動,數(shù)據(jù)庫設備初始化時,掃描這32個塊ID 號,并在內存中動態(tài)生成一個映射表,因為有一個保留的交換塊,所以可以填寫的只有31個節(jié)點,定義最后一個節(jié)點記錄保留塊的地址信息,其余各個節(jié)點內容除了包含該節(jié)點的物理地址信息,還應該包含該Bank的使用情況信息(如:剩余,臟多少),這些信息在數(shù)據(jù)庫設備的其他功能中會用到。

      數(shù)據(jù)庫設備向數(shù)據(jù)庫系統(tǒng)提供動態(tài)分配記錄空間的功能。為了回收臟塊的方便,數(shù)據(jù)庫記錄必需存放在同一個擦除塊,不能跨Bank 存放。分配的依據(jù)是地址映射表中的Free 字段,為了減少碎片以及均勻使用各個物理塊,分配原則是優(yōu)先分配那些Free 較小的Bank。同時刪除、修改記錄會產生臟塊,這些臟塊需要回收才能再次被利用?;厥盏挠|發(fā)發(fā)生在寫記錄時,當設備空間分配引擎報告沒有剩余空間時,觸發(fā)臟塊回收功能。臟塊回收需要先選中一個回收的目標塊,根據(jù)地址映射表中的Dirty字段,原則是Dirty 越大越優(yōu)先。選定一個目標塊后,需要將該塊中的有效記錄全部搬至其他Bank,這一步可以理解為一個修改記錄的過程,修改記錄可以將記錄轉存到其他Bank,然后再刪除原來的記錄。當該Bank的所有記錄轉移后,調用Flash 驅動的塊擦除函數(shù),擦除完成后再寫入ID 號,同時修改地址映射表,Dirty 和Free 字段清零。

      2.2 數(shù)據(jù)塊初始化和架構

      數(shù)據(jù)庫系統(tǒng)初始化分兩步,首先是數(shù)據(jù)庫設備初始化,其次才是數(shù)據(jù)庫自身初始化。設備初始化類似于FMM 初始化,它的主要工作是掃描整個設備,獲得地址映射表的各項數(shù)據(jù)。首先要掃描各個Bank ID,填寫Addr 字段。然后掃描各個Bank 記錄,獲取該Bank 已經用掉的空間和刪除的記錄空間,計算出剩余空間(Free)和臟塊大小(Dirty)。

      整個數(shù)據(jù)庫系統(tǒng)由一個記錄索引表和數(shù)據(jù)記錄區(qū)構成,索引表占用一個Bank,并且定義固定在邏輯Bank0(下面提到的都是邏輯Bank 號)。交換塊不占地址空間,只是臨時存放在所引表的最后一個節(jié)點上。記錄區(qū)占用其余的所有Bank(1~30)。索引表記錄每條數(shù)據(jù)庫記錄的地址、記錄ID、類別、大小、所屬目錄等信息,每個表項占12 字節(jié)。每個記錄有一個唯一的ID,整個數(shù)據(jù)庫系統(tǒng)的所有數(shù)據(jù)庫的所有記錄,ID 號不能沖突,而且ID 號可以區(qū)分是那個數(shù)據(jù)庫以及記錄類別。為了便于管理,數(shù)據(jù)庫系統(tǒng)有一個自己內定的管理數(shù)據(jù)庫(sysdb),它的每一條記錄標識著一個用戶建立的數(shù)據(jù)庫,內容包含數(shù)據(jù)庫名、索引表的個數(shù)、比較函數(shù)等信息,數(shù)據(jù)庫名不能重復,大小寫不敏感。用戶創(chuàng)建、打開數(shù)據(jù)庫時就要訪問到sysdb。數(shù)據(jù)庫系統(tǒng)有一個自己內定的管理數(shù)據(jù)庫sysdb,數(shù)據(jù)庫系統(tǒng)初始化時打開這個數(shù)據(jù)庫。sysdb 沒有索引記錄,它的記錄類別只有一種,而且每條記錄注冊著一個用戶創(chuàng)建的數(shù)據(jù)庫。

      索引表在Bank0,由32 字節(jié)的HEAD 和一個索引表構成,索引表的每項占12 字節(jié),共有5458 項,最后剩余4個字節(jié)保留。

      數(shù)據(jù)記錄區(qū)里面是用戶加入數(shù)據(jù)庫的數(shù)據(jù)信息,系統(tǒng)對這樣的信息不做任何解析,只是把它當作一個二進制的數(shù)據(jù)包,用戶必需指明該數(shù)據(jù)記錄所在的目錄,目錄實際上是一種分類信息,目錄信息將加入到Bank0 中記錄所引表的目錄號字段中。數(shù)據(jù)記錄的大小是用戶數(shù)據(jù)包加上時間戳的大小,也就是說系統(tǒng)打包后的實際大小,數(shù)據(jù)庫設備在存儲時,會自動向4 字節(jié)對齊。數(shù)據(jù)記錄的格式如下:

      4byte時間戳 N byte 用戶數(shù)據(jù)

      時間戳用一個DWORD 記錄,高字表示Date,低字表示Time,Size=N +4;并賦值給記錄所引表的size 字段。每個數(shù)據(jù)庫記錄有一個目錄屬性,表明該記錄屬于哪個目錄,目錄實際上是記錄的歸類信息。目錄本身也當作記錄存儲在數(shù)據(jù)庫中,目錄作為記錄也有一個所屬目錄的屬性,表明自己的父目錄,由此可見整個是一個樹狀結構,數(shù)據(jù)記錄是葉子節(jié)點,樹根是sysdb。一個數(shù)據(jù)庫的根目錄沒有記錄和它對應,定義根目錄的記錄ID 等于0。

      目錄作為記錄,它的格式和數(shù)據(jù)記錄的格式是一樣的,也是有一個時間戳加上數(shù)據(jù)構成。它的數(shù)據(jù)是目錄名,是一個null 結束的字符串,計算記錄大小時結束符null 也算一個字節(jié)。和文件系統(tǒng)一樣,同一個目錄下的子目錄名不能有重復。本數(shù)據(jù)庫系統(tǒng)對目錄的級數(shù)以及子目錄的個數(shù)不做限制,但是受到數(shù)據(jù)結構的限制,目錄的最大個數(shù)等于記錄的最大個數(shù)5458,實際可用5400。

      3 關于掉電保護

      掉電保護是數(shù)據(jù)庫設備層的基本功能之一,要做到在突然掉電的情況下,資料的完整性不受破壞,這就要求在寫操作時,按照一定的步驟,還要依賴于相應的標志位。掉點保護有兩個必要條件,一是系統(tǒng)啟動后在初始化時,有能力知道上次關機是正常關機還是異常掉電關機。二是系統(tǒng)在任何時候突然掉電,有能力追溯到掉電前的資料信息。

      數(shù)據(jù)庫系統(tǒng)用于掉電保護的信息有兩個,分別是每個Bank的ID 號和Bank0 索引表中的每個節(jié)點的addr。這兩個4 字節(jié)數(shù)據(jù)的最后4bit是掉電保護Flag,其含義基本相同,下面詳細介紹。

      數(shù)據(jù)庫的完整性包括三個方面:①各個擦除塊的完整,也就是邏輯地址空間完整、連續(xù)、有效;②記錄索引表的完整;③記錄的完整。只有在寫操作過程中突然掉電,才可能對數(shù)據(jù)庫的完整性造成破壞,這些寫操作包括記錄臟塊的整理、Bank0的整理、增加刪除修改記錄等。

      另外,除了數(shù)據(jù)庫設備層的掉電保護,數(shù)據(jù)庫系統(tǒng)還要做好數(shù)據(jù)庫本身的數(shù)據(jù)相關性保護,保證數(shù)據(jù)的完整。這些相關性包括目錄名不得沖突、排序方法不能相同、排序表必需和排序方法一一對應,排序記錄要完整有效等,當然這些都與掉電保護沒有關系,它依賴于數(shù)據(jù)庫本身的魯棒性。

      4 測試環(huán)境

      通過在SC6600(ARM9)+ nucleus+QCP1880的平臺上進行測試,比原來的方案存取速度提高10倍以上,而且占用內存也大大減少,僅需要幾十個字節(jié)。本軟件模組在PC 機上開發(fā),經過編譯工具embedded Visual C ++編譯后,可在CPU為ARM920T的硬件平臺下運行[3]。

      編程語言:C 語言

      操作系統(tǒng):Nucleus

      Nucleus 內核版本:2.4.20

      交叉編譯工具:VC++&ADS

      編譯環(huán)境:Visual C++

      硬件平臺:SC6600 或ARM920T

      [1]龔星宇,許佳,龔尚福.嵌入式數(shù)據(jù)庫的研究[J].現(xiàn)代電子技術,2007(9):46-49.

      [2]張永.嵌入式數(shù)據(jù)庫系統(tǒng)的設計與實現(xiàn)[D].北京:清華大學,2004.

      [3]吳飛,王昕.嵌入式移動數(shù)據(jù)庫SQL Server for Windows CE的應用研究[J].微計算機信息,2006 (17):56-59.

      猜你喜歡
      數(shù)據(jù)庫系統(tǒng)字節(jié)數(shù)據(jù)庫
      No.8 字節(jié)跳動將推出獨立出口電商APP
      No.10 “字節(jié)跳動手機”要來了?
      數(shù)據(jù)庫系統(tǒng)shell腳本應用
      電子測試(2018年14期)2018-09-26 06:04:24
      簡談MC7字節(jié)碼
      微細銑削工藝數(shù)據(jù)庫系統(tǒng)設計與開發(fā)
      數(shù)據(jù)庫
      財經(2017年2期)2017-03-10 14:35:35
      實時數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)安全采集方案
      電信科學(2016年10期)2016-11-23 05:12:00
      數(shù)據(jù)庫
      財經(2016年15期)2016-06-03 07:38:02
      數(shù)據(jù)庫
      財經(2016年3期)2016-03-07 07:44:46
      數(shù)據(jù)庫
      財經(2016年6期)2016-02-24 07:41:51
      扶风县| 滦平县| 那坡县| 县级市| 上栗县| 津市市| 湘西| 志丹县| 台中市| 岢岚县| 同心县| 鲁甸县| 修武县| 普格县| 新宁县| 普陀区| 白城市| 天峻县| 合江县| 平远县| 荥阳市| 基隆市| 大同市| 万山特区| 青州市| 贵德县| 翼城县| 祁阳县| 酒泉市| 宁都县| 青海省| 确山县| 美姑县| 玉树县| 红原县| 宁陕县| 临夏市| 如东县| 崇义县| 腾冲县| 宁乡县|