sqlite pager 從 磁盤 讀取內(nèi)存

筆記

btree模塊苍苞,通過pager模塊來讀和寫二進制文件,通過pager模塊筒饰,把sqlite文件看成一個由page組成的數(shù)組缴啡。所有的操作,都是先從磁盤讀取到內(nèi)存瓷们,操做完了以后再寫回业栅。
這里假設(shè) 數(shù)據(jù)庫足夠大,比內(nèi)存還要大

再內(nèi)存中用來存放部分數(shù)據(jù)庫數(shù)據(jù)的叫做cache 或者 data buffer 在sqlite中稱作為page cahce
pager的責任是使得上層透明谬晕,并且提供一個在 mian memory中可以通過地址訪問的功能

pager的功能

也提供一些事務處理的特性:事務管理碘裕,數(shù)據(jù)管理,日志管理攒钳,鎖管理

  1. 數(shù)據(jù)管理:協(xié)調(diào)帮孔,cache和文件數(shù)據(jù)讀寫,文件空間管理
  2. 日志管理:journal file when wrting
  3. 鎖管理:使得事務成為可能

pager實現(xiàn)數(shù)據(jù)持久化夕玩,和事務自動化

每個pagecache 表示一個一個程序的內(nèi)存空間你弦,多個連接,有多個pagecache燎孟。

sqlite 沒有使用系統(tǒng)的緩存機制自己每次需要cache的時候直接從native file 獲取

舊版本是這樣禽作,我閱讀的新的版本,在開啟debug模式的時候揩页,才會直接從硬盤讀取

pager manage至關(guān)重要
pager 結(jié)構(gòu)中的ahash數(shù)組旷偿,是用來存放hashtable用來訪問在 page cache中的page(新版本,中page結(jié)構(gòu)沒有ahash這個數(shù)組爆侣,而是存放一個函數(shù)的指針萍程,通過傳入xGet函數(shù)指針,傳入?yún)?shù)訪問兔仰,真正獲取的函數(shù)為getPageNormal)

每個hash茫负,指向一個桶,每個桶乎赴,中有多個page忍法,組成一個linkedlist 內(nèi)部是無序的

pgHdr只能pager看到 btree不能看到
dirty表示,還沒有寫回到native文件中

nref來運行LRU

nref表明是否pined down 如果沒有pined down 就是free的 后面用來作替換算法時使用的
讀寫都遵循LRU算法 sqlite 用queue來 管理 free pages(unpind page)

page 如何從file到memory

在pager結(jié)構(gòu)中榕吼,有pager->fd->pMethods->xRead 方法饿序,通過調(diào)用,seekAndRead羹蚣,從磁盤讀取到內(nèi)存

開啟了debug模式原探,會直接從磁盤中讀取文件,而不會使用cache
從已知的頭中設(shè)置一些信息顽素?

在分配內(nèi)存方面大多使用memcpy為什么咽弦?以及區(qū)別

strcpy 和 memcpy 主要有以下 3 方面的區(qū)別。
1胁出、復制的內(nèi)容不同离唬。strcpy 只能復制字符串,而 memcpy 可以復制任意內(nèi)容划鸽,例如字符數(shù)組输莺、整型、結(jié)構(gòu)體裸诽、類等嫂用。
2、復制的方法不同丈冬。strcpy 不需要指定長度嘱函,它遇到被復制字符的串結(jié)束符 "\0" 才結(jié)束,所以容易溢出埂蕊。memcpy 則是根據(jù)其第 3 個參數(shù)決定復制的長度往弓。
3疏唾、用途不同。通常在復制字符串時用 strcpy函似,而需要復制其他類型數(shù)據(jù)時則一般用 memcpy

新版本3.16.2槐脏,替代ahash為xget函數(shù)指針來獲取page

每個PCache對應db的中的一個page

btree層,只操作撇寞,database pages 的復制層
btree通過page number從pager處 獲得 page的內(nèi)存可訪問地址

再修改之前顿天,btree 會通知 pager從而讓page 及時保存
當btree 修改完成后也會通知page 從而page及時保存 每個pager對象,只關(guān)聯(lián)一個文件
pager 只有一個蔑担,當有多個線程鏈接的時候牌废,會創(chuàng)建多個pager cahce提供使用

PgHdr 每個再cache中的page又這個結(jié)構(gòu)管理
btree getpage,通常情況通過getPageNormal方法啤握,從cache中獲取page

從磁盤讀入指定內(nèi)存方法

開啟debug編譯選項

debug編譯選項
debug編譯選項

sqltie提供統(tǒng)一的接口sqlite3OsRead(pPager->fd, pDest, N, 0);讀入特定長度內(nèi)容
底層調(diào)用unixread方法
實際的底層方法
實際的底層方法

使用memcpy調(diào)用
memecpy函數(shù)
memecpy函數(shù)

再內(nèi)存結(jié)構(gòu)中的pageMemPage

內(nèi)存中的page
內(nèi)存中的page
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸟缕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子排抬,更是在濱河造成了極大的恐慌叁扫,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畜埋,死亡現(xiàn)場離奇詭異莫绣,居然都是意外死亡,警方通過查閱死者的電腦和手機悠鞍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門对室,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咖祭,你說我怎么就攤上這事掩宜。” “怎么了么翰?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵牺汤,是天一觀的道長。 經(jīng)常有香客問我浩嫌,道長檐迟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任码耐,我火速辦了婚禮追迟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骚腥。我一直安慰自己敦间,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著廓块,像睡著了一般厢绝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上带猴,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天昔汉,我揣著相機與錄音,去河邊找鬼浓利。 笑死挤庇,一個胖子當著我的面吹牛钞速,可吹牛的內(nèi)容都是我干的贷掖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼渴语,長吁一口氣:“原來是場噩夢啊……” “哼苹威!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驾凶,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤牙甫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后调违,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窟哺,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年技肩,在試婚紗的時候發(fā)現(xiàn)自己被綠了且轨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡虚婿,死狀恐怖旋奢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情然痊,我是刑警寧澤至朗,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站剧浸,受9級特大地震影響锹引,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唆香,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一粤蝎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧袋马,春花似錦初澎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽软啼。三九已至,卻和暖如春延柠,著一層夾襖步出監(jiān)牢的瞬間祸挪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工贞间, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贿条,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓增热,卻偏偏與公主長得像整以,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子峻仇,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,125評論 29 470
  • 史上最全的iOS面試題及答案 迷途的羔羊--專為路癡量身打造的品牌公黑。史上最精準的定位。想迷路都難摄咆!閃電更新中......
    南虞閱讀 1,497評論 0 8
  • 1.寫一個NSString類的實現(xiàn) +(id)initWithCString:(c*****t char *)nu...
    韓七夏閱讀 3,748評論 2 37
  • 之前看了很多面試題凡蚜,感覺要不是不夠就是過于冗余,于是我將網(wǎng)上的一些面試題進行了刪減和重排吭从,現(xiàn)在分享給大家朝蜘。(題...
    Job_Yang閱讀 12,100評論 12 143
  • 首先,要感謝 DEV Club 能給我一個這么好的平臺,在那里學到大牛們分享的技術(shù).這次感謝的是張三華,張哥的這么...
    A_sura閱讀 1,039評論 5 11