新聞中心

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

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

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

        表2.3 數組root[1]結構

        00 00 00 00 00 01 60 00

        00 00 00 00 00 00 A0 00

        00 00 00 00 00 00 00 10 00

        8 bytes

        8 bytes

        8 bytes

        00 00 00 00 00 01 42 80

        00 00 12 00

        00 00 12 00

        8 bytes

        4 bytes

        4 bytes

        00 00 10 08

        00 00 00 00

        00 00 00 02

        4 bytes

        4 bytes

        4 bytes

        00 00 10 01

        00 00 10 02

        00 00 00 00

        4 bytes

        4 bytes

        4 bytes

        表2.4 事務id

        00 00 00 00 00 00 00 01

        8 bytes

        事務id


        數據庫文件的第一頁(4K)存放了整個數據庫文件的Header信息。程序從數據庫文件的Header信息中分離出數據庫文件的使用情況和索引結構的存儲位置,這樣可以很快的定位數據庫中的記錄數據。

        3 Perst的Object Index

        Perst專門開辟了一段空間,稱Object Index區,存放持久化對象在文件中的實際存儲位置。一般這個區在文件的第2-10頁,第11-19頁存放這個區的備份。第2-9頁的數據被標識為空閑文件區,第10頁存放實際Object Index。

        在Object Index區中,每個元素稱為Object Handle,每Object Handle用8個字節表示,存放對應對象在文件中的實際存儲位置,即對象的OID。對于4K的頁,可以存放512個Object Handles。Object Index區的結構如圖3.1所示。

        圖3.1 Object Index結構圖

        在圖3.1的0x00012000h位置以前都是空閑區,之后的才是真正存放Object Handle的Object Index區。如果Perst數據庫文件中的持久化對象的OID個數超過512個,Perst會在數據庫文件的另一個區開辟更大的存儲空間充當 Object Index區,以存放更多的Object Handle。

        4 Perst記錄數據及類的

        Perst中記錄數據存放位置是根據當前數據庫的使用情況來為記錄數據分配存儲空間。Perst中每個記錄數據的存放格式都是統一的,每個記錄數據的開頭占用8個字節存放記錄數據的基本信息。前4個字節存放這條記錄占用的字節個數,后4個字節存放構建這個記錄對象的類的 OID,通過這個OID就可以動態的加載該類的對象。以類Test.User的記錄為例,該記錄包含一個int類型的數據和一個變量名為“name”的 String類型,其如圖4.1所示:

        占的總字節數

        類Test.User的OID

        Int類型的值

        “name”的字符個數M

        “name”的字節數組形式

        4 bytes

        4 bytes

        4 bytes

        4 bytes

        2*M bytes

        圖4.1 記錄數據的存儲結構



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 响水县| 大荔县| 新宾| 蕉岭县| 台东市| 台山市| 平顶山市| 中山市| 瑞昌市| 运城市| 普洱| 汕头市| 唐山市| 平南县| 东丰县| 宁陕县| 乌拉特前旗| 彰化市| 肥城市| 苍溪县| 武川县| 蒙阴县| 贺州市| 荥经县| 英超| 根河市| 永新县| 白玉县| 韩城市| 曲水县| 哈密市| 察雅县| 筠连县| 阳新县| 莒南县| 昌平区| 堆龙德庆县| 遂溪县| 嘉善县| 中宁县| 隆回县|