關(guān)于用引用計(jì)數(shù)法寫緩存的一點(diǎn)看法

最近看了一個(gè)用go寫的數(shù)據(jù)庫(kù)NYADB2娇唯,
github地址:https://github.com/qw4990/NYADB2

看到作者關(guān)于存儲(chǔ)模塊的緩存用了引用計(jì)數(shù)法來(lái)寫强胰,而不是常用的LRU算法伴逸。
他在緩存部分用了二級(jí)緩存。

  • 第一級(jí)是page緩存维蒙,在內(nèi)存維持page,實(shí)質(zhì)是byte[]果覆,每個(gè)page都有一個(gè)引用數(shù)p木西,每次引用page,p++随静,釋放page,p--吗讶。一旦p==0燎猛,就把page寫回磁盤(page臟時(shí)),在內(nèi)存中釋放page照皆。

  • 第二級(jí)緩存是dataItem緩存重绷,這里的dataItem實(shí)質(zhì)上是切片(切片是go的一種內(nèi)置結(jié)構(gòu))對(duì)page中一段字節(jié)數(shù)組的引用,并沒(méi)有實(shí)質(zhì)上的緩存膜毁。這里同樣是引用計(jì)數(shù)法昭卓,只不過(guò),當(dāng)p==0時(shí)瘟滨,只是把切片釋放了而已候醒。

  • 在這里作者用了一個(gè)很漂亮的寫法,獨(dú)立寫了一個(gè)引用計(jì)數(shù)法的緩存模塊杂瘸,把緩存的對(duì)象和use緩存和release緩存的接口留了出來(lái)倒淫,所以這里的page緩存和dataItem緩存都是用這個(gè)緩存模塊做的。

整個(gè)使用緩存的流程是

1.查找dataItem(簡(jiǎn)寫為d)-->
2.dataItem緩存存在d,直接返回d,不存在d時(shí),在dataItem緩存中創(chuàng)建d緩存-->
3.創(chuàng)建d緩存會(huì)從其所在的page(簡(jiǎn)寫為p)中創(chuàng)建切片,若page緩存中不存在p,創(chuàng)建p緩存
4.創(chuàng)建p緩存,即從磁盤中寫出相應(yīng)的page
  • 一個(gè)緩存要能維持在內(nèi)存中败玉,那么它的引用數(shù)就必須一直滿足>=1敌土,且不能中斷,即是每時(shí)每刻都有對(duì)緩存的引用运翼,這就意味著返干,如果對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)頻率不夠高,那么引用計(jì)數(shù)法寫的緩存是無(wú)效的血淌【厍罚可想而知,用引用計(jì)數(shù)法寫的緩存一般比用LRU寫的緩存,緩存數(shù)不夠晚顷。
    所以在p--的時(shí)候可以考慮異步延遲峰伙,延遲時(shí)間由當(dāng)前緩存數(shù)量決定。

  • 其次在這里我認(rèn)為用引用計(jì)數(shù)法寫page緩存并不是一個(gè)好選擇该默,因?yàn)榧僭O(shè)有10%的數(shù)據(jù)(訪問(wèn)頻率夠高)一直被緩存瞳氓,就意味著,那10%數(shù)據(jù)對(duì)應(yīng)的page也會(huì)一直維持在內(nèi)存栓袖。如果這10%的數(shù)據(jù)分步在所有的page中匣摘,那么所有的page都會(huì)維持在緩存,那所謂的分頁(yè)管理就沒(méi)有意義了裹刮。

  • 用引用計(jì)數(shù)法寫可以很容易把鎖表和緩存結(jié)合音榜,在實(shí)現(xiàn)諸如b-link-tree之類需要節(jié)點(diǎn)加讀寫鎖的索引結(jié)構(gòu)時(shí)很方便。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捧弃,一起剝皮案震驚了整個(gè)濱河市赠叼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌违霞,老刑警劉巖嘴办,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異买鸽,居然都是意外死亡涧郊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門眼五,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妆艘,“玉大人,你說(shuō)我怎么就攤上這事看幼∨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵桌吃,是天一觀的道長(zhǎng)朱沃。 經(jīng)常有香客問(wèn)我,道長(zhǎng)茅诱,這世上最難降的妖魔是什么逗物? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮瑟俭,結(jié)果婚禮上翎卓,老公的妹妹穿的比我還像新娘。我一直安慰自己摆寄,他們只是感情好失暴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布坯门。 她就那樣靜靜地躺著,像睡著了一般逗扒。 火紅的嫁衣襯著肌膚如雪古戴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,729評(píng)論 1 289
  • 那天矩肩,我揣著相機(jī)與錄音现恼,去河邊找鬼。 笑死黍檩,一個(gè)胖子當(dāng)著我的面吹牛叉袍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刽酱,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼喳逛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了棵里?” 一聲冷哼從身側(cè)響起润文,我...
    開(kāi)封第一講書(shū)人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎殿怜,沒(méi)想到半個(gè)月后转唉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稳捆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了麦轰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乔夯。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖款侵,靈堂內(nèi)的尸體忽然破棺而出末荐,到底是詐尸還是另有隱情,我是刑警寧澤新锈,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布甲脏,位于F島的核電站,受9級(jí)特大地震影響妹笆,放射性物質(zhì)發(fā)生泄漏块请。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一拳缠、第九天 我趴在偏房一處隱蔽的房頂上張望墩新。 院中可真熱鬧,春花似錦窟坐、人聲如沸海渊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)臣疑。三九已至盔憨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讯沈,已是汗流浹背郁岩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芙盘,地道東北人驯用。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像儒老,于是被迫代替她去往敵國(guó)和親蝴乔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

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