新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Perst嵌入式數據庫存儲結構分析與研究

        Perst嵌入式數據庫存儲結構分析與研究

        作者: 時間:2012-03-20 來源:網絡 收藏

        引言

        Perst是McObject公司發布的一款非常袖珍的開源,是一個簡單,快速,便捷,面向對象,適合java與.Net的數據庫。Perst不需要專門的編譯器與預處理器,支持ACID事務[2]。對于在資源受限的移動設備(如手機,PDA等)上存儲大量數據和對數據進行頻繁的I/O操作往往要消耗很多的設備資源。由于移動設備內存小,性能較差,如果采用關系數據庫(如 SQLServer2000,Oracle)管理數據,僅靠其有限的內存資源是不能運行這些數據庫管理系統的,這樣就有必要采用一些特殊的數據庫系統。 Perst數據庫正是為這類設備研究開發的,它們是如何在資源受限的設備上完成大量數據的訪問操作。其實這些設備的系統資源主要消耗在從磁盤上讀取數據的 I/O操作。如何提供一種有效的文件存儲策略來降低對磁盤的I/O操作是軟件設計的主要任務。文章將著重介紹Perst的文件存儲策略和索引結構[3]。

        1 Perst基本概念介紹

        1.1 頁Page

        Perst對數據庫文件的基本操作都是以頁為單位進行的。這些基本操作包括:內存分配,從數據庫文件中讀取數據,將內存中的數據寫入文件等。Perst一頁默認的大小是4K。

        1.2 對象標識符OID

        Perst創建的每個對象都是可以持久化的,即它可以被保存在數據庫文件中。每個持久化的對象都會用對象標識符(OID)引用,通過對象標識符,程序可以從數據庫文件中找到該對象在文件中實際存放位置。

        1.3 Root Object

        Perst的每個數據庫文件都必須有且只能有一個稱作Root Object的類。在這個類中定義了數據庫文件中的所有索引結構。通過這個類,程序可以定位到數據庫文件中的所有記錄對象。

        2 數據庫Header信息的存儲格式

        Perst數據庫文件開始的第一頁中,前139個字節存放Perst數據庫使用情況和數據庫當前狀態等Header信息。它在文件中的數據結構如圖2.1所示。表2.1到2.4對圖2.1中Header信息中的每個數據做了詳細分析。數據意義如表所示。

        圖2.1 數據庫的Header信息

        表2.1 數據庫Header信息前3個字節意義

        01

        01

        02

        1 byte

        1 byte

        1 byte

        root數組的下標

        數據庫文件被不正常關閉?

        數據庫版本

        表2.2數組root[0]結構

        00 00 00 00 00 01 40 00

        00 00 00 00 00 00 10 00

        00 00 00 00 00 00 A0 00

        8 bytes

        8 bytes

        8 bytes

        database file size

        offset of object index

        offset of shadow index

        00 00 00 00 00 00 00 00

        00 00 12 00

        00 00 12 00

        8 bytes

        4 bytes

        4 bytes

        size used by objects

        size of object index

        size of object index

        00 00 10 01

        00 00 00 00

        00 00 00 02

        4 bytes

        4 bytes

        4 bytes

        used part of the index

        L1 list of free descriptors

        最后分配的位圖頁的索引

        00 00 00 00

        00 00 00 00

        00 00 00 00

        4 bytes

        4 bytes

        4 bytes

        OID of root object

        List of class descriptors

        對象索引中擴展位圖頁的開始

        數組root[1]是root[0]的備份,每個元素對應的意義相同


        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 双鸭山市| 中西区| 县级市| 贵德县| 新乡县| 深圳市| 偏关县| 呼伦贝尔市| 宁强县| 鲁山县| 乌苏市| 闵行区| 田林县| 阳曲县| 太康县| 西贡区| 武清区| 崇阳县| 平南县| 拉萨市| 凉城县| 太仓市| 丰镇市| 固原市| 山阳县| 师宗县| 德昌县| 裕民县| 萍乡市| 孙吴县| 郸城县| 吉木萨尔县| 呼和浩特市| 梨树县| 共和县| 乳源| 沂南县| 金昌市| 辛集市| 佛学| 黑龙江省|