- 論壇徽章:
- 9
|
本帖最后由 wlmqgzm 于 2016-05-13 17:08 編輯
已經(jīng)完成 File_mapping層的read/write初步編碼設計,簡單進行了數(shù)據(jù)讀寫,還未進行詳細測試.后面還要增加動態(tài)擴展大小的功能, 目前暫時固定大。
進入Class Block的設計,
// 設計壓縮塊/標準塊的結構:
// 1) 塊的位置號, 就是塊的唯一標志, 位置號就是offset, 4字節(jié)整數(shù), 位置號==實際存儲的offset, 即該位置上讀到的4字節(jié)數(shù)據(jù)==該位置的offset
// 2) 塊的壓縮格式及壓縮率: 1字節(jié), 0=不壓縮, 1-9=lz4壓縮, 21-29=gzip壓縮, 31-39=bzip2, 先只做lz4, 其他備用
// 3) 塊內(nèi)部記錄數(shù):1字節(jié). 每個數(shù)據(jù)塊可存放1-240條記錄, 標準塊是一條記錄一個塊, 壓縮塊是1-240個記錄一個塊
這里保留了241-255的編號, 這些編號主要是為了未來(第2個版本)預留,
這些編號對應的內(nèi)存結構, 在硬盤空間中沒有使用,
在內(nèi)存空間中使用, 將以特殊的方式, 提供高性能鎖空間
每個編號將在主鍵上以特殊方式(類似于MVCC)提供4M個鎖空間, 一共可以提供60M個鎖空間,即每個table可提供最大6000萬個鎖空間
將用于 存儲層的行鎖--更新鎖內(nèi)部使用, 這部分代碼還沒有做, 但是計劃在第2個版本中使用, 使用行鎖以后, 將提供完整MVCC和READ COMMIT等數(shù)據(jù)庫標準功能
第2個版本將實現(xiàn)完整的MVCC, 讀取是沒有任何鎖, 可提供高的性能. MVCC在第一個版本中做好預留, 但是不占數(shù)據(jù)內(nèi)存空間, 以便提供最好的性能
行鎖是寫鎖,即更新鎖, 正在考慮 不過都是第2個版本的事情, 這個版本只是做好預留, 按最簡單的方式實現(xiàn)
// 3) 塊的大小, 1-5字節(jié)整數(shù), 壓縮編碼整數(shù), 表示未壓縮的長度
// 4) 塊的大小, 1-5字節(jié)整數(shù), 壓縮編碼整數(shù) 表示壓縮后實際的長度,如果不壓縮,同上一個值
// 5) 塊的內(nèi)容 0K--3.999G
// 6) 塊的校驗碼: 8字節(jié), 塊內(nèi)容crc64校驗
// 7) 塊的同步碼 8字節(jié)
// 塊的管理用掉 4+1+1+3+3+8+8=28字節(jié) , 對于4K字節(jié)的壓縮塊, 大約不到1%的開銷,
|
|