XDAG技術(shù)詳解8-文件存儲(chǔ)結(jié)構(gòu)

時(shí)間格式

因?yàn)閤dag的文件存儲(chǔ)命名使用了時(shí)間戳,需要先描述時(shí)間戳的格式。

  1. 時(shí)間戳

    xdag用的時(shí)間戳是一個(gè)64位的int值,分為兩部分。

    1. 尾部低10位

      表示秒以下的單位育灸,最小單位是1/1024秒,注意作者在這里用的是二進(jìn)制運(yùn)算昵宇,所以用1024去分割秒磅崭。

    2. 剩余的高54位

      UTC秒。注意瓦哎,實(shí)際中用不到54位砸喻。

  2. 時(shí)間片

    xdag用64秒做為一個(gè)時(shí)間片,假設(shè)t為時(shí)間戳杭煎,則 t>>16 (先右移10位去秒恩够,再右移6位) 為時(shí)間片序號,代碼中每次取時(shí)間片都是用這種方式羡铲。

storage目錄結(jié)構(gòu)

一個(gè)典型的存儲(chǔ)目錄結(jié)構(gòu):

image-20190819132213748.png
  1. 文件命名

    除了0級目錄名固定為storage外蜂桶,1到3級目錄和block文件的命名均與時(shí)間戳有關(guān)。

    假設(shè)一個(gè)block的時(shí)間戳16進(jìn)制為:XX1-XX2-XX3-XX4-XX5-XX6-XX7-XX8也切,則這個(gè)block會(huì)被存儲(chǔ)在名為storage/XX1XX2XX3/XX4/XX5/XX6.dat的文件中扑媚,因?yàn)橥ǔ?code>XX1XX2都是0(目前秒的部分只需要32位就夠了腰湾,而這里實(shí)際有54位),所以我們看到的實(shí)際文件名路徑一般為storage/XX3/XX4/XX5/XX6.dat疆股,但是注意费坊,隨著時(shí)間的推移,1級目錄名出現(xiàn)XX1XX2XX3的形式是正確的旬痹。但在目前的代碼實(shí)現(xiàn)上附井,只允許出現(xiàn)XX3,不允許出現(xiàn)XX1XX2XX3两残,所以后續(xù)都假設(shè)只有XX3一種形式永毅。

  2. 目錄存儲(chǔ)

    因?yàn)槲募拿玫氖且粋€(gè)字節(jié)的16進(jìn)制字符表示,所以理論上人弓,任何一個(gè)目錄下的子目錄或者文件個(gè)數(shù)沼死,最多只能有256個(gè)。文件名反映了對上級時(shí)間段的256分割崔赌。

    1. 3級目錄下的block文件意蛀,最多可以有256個(gè),每個(gè)文件包含了一個(gè)時(shí)間片內(nèi)所有的block存儲(chǔ)(64秒內(nèi))健芭。
    2. 1县钥、2、3級目錄中的目錄數(shù)吟榴,也是只能最多256個(gè)魁蒜。
    3. 0級目錄只有固定的一個(gè)storage囊扳。

block文件結(jié)構(gòu)

一個(gè)block文件(XX6.dat)吩翻,存儲(chǔ)了一個(gè)XX6時(shí)間片(64秒)內(nèi)所有收到的block,按順序把二進(jìn)制放進(jìn)去锥咸,個(gè)數(shù)不限狭瞎,理論上這個(gè)文件可以無限大(除了受到文件系統(tǒng)限制)。

格式:block1-struct-binary | block2-struct-binary | ... | blockN-struct-binary搏予。

sums文件

  1. sums文件格式

    sums.dat存儲(chǔ)了當(dāng)前目錄下所有block(或者目錄)的數(shù)據(jù)摘要結(jié)果熊锭。

    sum文件固定為4K大小,文件被等分為256個(gè)部分雪侥,存儲(chǔ)當(dāng)前目錄下256個(gè)文件(目錄)各自的sum計(jì)算結(jié)果碗殷。每個(gè)等分16字節(jié),等于struct xdag_storage_sum的大小速缨。

    struct xdag_storage_sum {
        uint64_t sum;   // 8字節(jié)
        uint64_t size;  // 8字節(jié)
    };
    

    每個(gè)block(目錄)在sum在文件中的存儲(chǔ)索引锌妻,就是block文件名的值(轉(zhuǎn)為十進(jìn)制后)。

    拿9d/sums.dat文件舉例旬牲,這個(gè)文件的第138等分處仿粹,存儲(chǔ)的是9d/8a.dat文件的sum計(jì)算結(jié)果(直接存儲(chǔ)了xdag_storage_sum結(jié)構(gòu)體)搁吓,因?yàn)?6進(jìn)制的8a等于十進(jìn)制的138。

  2. sum計(jì)算方式

    每個(gè)位置實(shí)際存儲(chǔ)的就是xdag_storage_sum結(jié)構(gòu)體的二進(jìn)制內(nèi)容吭历,下面說明如何計(jì)算堕仔。

    以9d/8a.dat文件的sum計(jì)算舉例,在9d/sums.dat文件的第138個(gè)位置晌区,存儲(chǔ)了一個(gè)下面的結(jié)構(gòu)體摩骨。

    struct xdag_storage_sum {
        uint64_t sum;
        uint64_t size;
    };
    

    size:8a.dat文件中所有block的字節(jié)總和,實(shí)際上就是文件大小朗若,之所以這樣描述仿吞,是因?yàn)榇a是這樣寫的,這是直觀意圖捡偏,但不排除未來這兩者不再相等唤冈。

    sum:把block文件按照8字節(jié)分割,每個(gè)8字節(jié)作為一個(gè)64位int疊加到sum银伟,原始代碼:s.sum += ((uint64_t *)(buf + i))[j];你虹。這里的目的是為了做摘要后在多結(jié)點(diǎn)間對比數(shù)據(jù)差異,碰撞概率上比hash大彤避,有一定瑕疵傅物。

  3. 1/2/3級目錄sum計(jì)算

    以3級目錄舉例,3級目錄中sums.dat文件中的存儲(chǔ)結(jié)構(gòu)與block目錄的sums.dat文件存儲(chǔ)模式一致琉预,只不過把block的位置換成了目錄的位置董饰。

    以9d目錄舉例,則6c/sums.dat文件中的第157位置存儲(chǔ)的是9d目錄的sum結(jié)果圆米,因?yàn)?6進(jìn)制9d等于十進(jìn)制157卒暂。

    9d目錄的xdag_storage_sum結(jié)構(gòu)體計(jì)算方法比較簡單,就是把9d/sums.dat中256個(gè)xdag_storage_sum結(jié)構(gòu)體的相同字段簡單求和娄帖。9d-xdag_storage_sum.size = sum(9d/sums.dat.size)也祠,sum字段類似。

    1近速、2級目錄的sum計(jì)算方法一樣诈嘿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市削葱,隨后出現(xiàn)的幾起案子奖亚,更是在濱河造成了極大的恐慌,老刑警劉巖析砸,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昔字,死亡現(xiàn)場離奇詭異,居然都是意外死亡干厚,警方通過查閱死者的電腦和手機(jī)李滴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門螃宙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人所坯,你說我怎么就攤上這事谆扎。” “怎么了芹助?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵堂湖,是天一觀的道長。 經(jīng)常有香客問我状土,道長无蜂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任蒙谓,我火速辦了婚禮斥季,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘累驮。我一直安慰自己酣倾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布谤专。 她就那樣靜靜地躺著躁锡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪置侍。 梳的紋絲不亂的頭發(fā)上映之,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機(jī)與錄音蜡坊,去河邊找鬼杠输。 笑死,一個(gè)胖子當(dāng)著我的面吹牛算色,可吹牛的內(nèi)容都是我干的抬伺。 我是一名探鬼主播螟够,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼灾梦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妓笙?” 一聲冷哼從身側(cè)響起若河,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寞宫,沒想到半個(gè)月后萧福,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辈赋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年鲫忍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膏燕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡悟民,死狀恐怖坝辫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情射亏,我是刑警寧澤近忙,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站智润,受9級特大地震影響及舍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窟绷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一锯玛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兼蜈,春花似錦更振、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钥平,卻和暖如春实撒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涉瘾。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工知态, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人立叛。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓负敏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秘蛇。 傳聞我的和親對象是個(gè)殘疾皇子其做,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

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

  • 01 毒劑毒性 toxicity of toxic agent 02 急性毒性 acure toxicit...
    范蘭英閱讀 217評論 0 5
  • 時(shí)間熬出的濃郁,豆腐菌菇蔬菜的清香甘甜赁还,肉的緊實(shí)甘甜妖泄,太陽的熱量生命力的跳躍種種力量匯聚如同洪水將人淹沒。又像是溫...
    亭君_閱讀 131評論 0 0
  • 《孩子艘策,你慢慢來》于2016年12月30日迎來最后一頁的閱讀蹈胡,人生三書我并沒有按順序看,從《目送》到《孩子,你慢...
    清塵912閱讀 187評論 0 0
  • 最近充斥的對拼多多的冷嘲熱諷以及貶低,好像拼多多是個(gè)很奇怪的物種荷并!潛臺(tái)詞大概如是——拼多多病涨,你也配上市! 我讀歷史...
    剎那流轉(zhuǎn)閱讀 6,701評論 0 4