基于分布式文件系統(tǒng)的小文件存儲(chǔ)方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及通信領(lǐng)域,尤其涉及一種基于分布式文件系統(tǒng)的小文件存儲(chǔ)方法及裝置。
【背景技術(shù)】
[0002]隨著信息技術(shù)的發(fā)展,面臨的數(shù)據(jù)處理需求將越來越復(fù)雜,而且非結(jié)構(gòu)化數(shù)據(jù)的比例也會(huì)越來越高。所謂結(jié)構(gòu)化數(shù)據(jù),是指可以按照特定格式進(jìn)行整理的數(shù)據(jù),更符合傳統(tǒng)數(shù)據(jù)處理的需求;比如更符合關(guān)系型數(shù)據(jù)庫的處理需求。而非結(jié)構(gòu)化數(shù)據(jù)是指沒有特定格式或者結(jié)構(gòu)的數(shù)據(jù);比如無特定格式的純文本,圖像,視頻等數(shù)據(jù)。
[0003]在實(shí)際生產(chǎn)環(huán)境中,數(shù)據(jù)來源和類型可能會(huì)非常復(fù)雜,在進(jìn)行數(shù)據(jù)處理的過程中,實(shí)際處理的數(shù)據(jù)中可能會(huì)包含大量的非結(jié)構(gòu)化數(shù)據(jù),甚至這些非結(jié)構(gòu)化數(shù)據(jù)可能都是不同大小甚至包含各種不同格式的數(shù)據(jù),因此在針對(duì)這些非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行處理時(shí),大量的小文件意味著將要面對(duì)海量的文件處理對(duì)象,當(dāng)處理的小文件達(dá)到一定的數(shù)量后(比如數(shù)以億計(jì)),可能會(huì)由于消耗大量的內(nèi)存導(dǎo)致數(shù)據(jù)處理系統(tǒng)崩潰。
【發(fā)明內(nèi)容】
[0004]本申請(qǐng)?zhí)岢鲆环N基于分布式文件系統(tǒng)的小文件存儲(chǔ)方法,該方法包括:
[0005]為存在關(guān)聯(lián)性的待存儲(chǔ)小文件分配唯一對(duì)應(yīng)的數(shù)據(jù)分表;所述數(shù)據(jù)分表為預(yù)設(shè)的邏輯二維表,包括由預(yù)設(shè)大小的邏輯存儲(chǔ)單元構(gòu)成的若干邏輯行和邏輯列;所述待存儲(chǔ)文件包括文件類型和大小均不相同的批量小文件;
[0006]將所述待存儲(chǔ)小文件中存在關(guān)聯(lián)性的小文件分別存儲(chǔ)至所述數(shù)據(jù)分表中的同一邏輯行或者同一邏輯列;
[0007]針對(duì)所述存在關(guān)聯(lián)性的小文件分別生成唯一對(duì)應(yīng)的文件索引,并將該文件索引保存至對(duì)應(yīng)的邏輯行或者邏輯列中。
[0008]可選的,所述為存在關(guān)聯(lián)性的待存儲(chǔ)小文件分配唯一對(duì)應(yīng)的數(shù)據(jù)分表包括:
[0009]基于表征所述待存儲(chǔ)小文件的關(guān)聯(lián)性的信息生成唯一對(duì)應(yīng)的查詢索引;
[0010]為生成的所述查詢索引分配對(duì)應(yīng)的數(shù)據(jù)分表,并建立所述查詢索引與所述數(shù)據(jù)分表之間的映射關(guān)系。
[0011]可選的,所述將所述待存儲(chǔ)小文件中存在關(guān)聯(lián)性的小文件分別存儲(chǔ)至所述數(shù)據(jù)分表中的同一邏輯行或者同一邏輯列包括:
[0012]依次讀取所述待存儲(chǔ)小文件中存在關(guān)聯(lián)性的小文件;
[0013]在所述數(shù)據(jù)分表中為所述待存儲(chǔ)小文件中存在關(guān)聯(lián)性的小文件分別指定邏輯行或者邏輯列;
[0014]基于所述邏輯行或者邏輯列的邏輯存儲(chǔ)地址將所述存在關(guān)聯(lián)性的小文件分別存儲(chǔ)至指定的同一邏輯行或者同一邏輯列中。
[0015]可選的,所述基于所述邏輯行或者邏輯列的邏輯存儲(chǔ)地址將所述存在關(guān)聯(lián)性的小文件存儲(chǔ)至指定的同一邏輯行或者同一邏輯列中包括:
[0016]從所述存在關(guān)聯(lián)性的小文件中依次讀取目標(biāo)小文件;
[0017]判斷讀取到的所述目標(biāo)小文件的大小是否大于所述邏輯存儲(chǔ)單元的大??;
[0018]當(dāng)讀取到的所述目標(biāo)小文件的大小小于或者等于所述邏輯存儲(chǔ)單元的大小時(shí),基于所述邏輯行或者邏輯列的邏輯存儲(chǔ)地址將所述目標(biāo)小文件的文件內(nèi)容存儲(chǔ)至同一邏輯行或者同一邏輯列中;
[0019]當(dāng)讀取到的所述目標(biāo)小文件的大小大于所述邏輯存儲(chǔ)單元的大小時(shí),基于所述邏輯行或者邏輯列的邏輯存儲(chǔ)地址將所述目標(biāo)小文件的文件內(nèi)容分片存儲(chǔ)至同一邏輯行或者同一邏輯列;或者對(duì)所述目標(biāo)小文件進(jìn)行單獨(dú)存儲(chǔ),將所述目標(biāo)小文件的存儲(chǔ)位置提示信息存儲(chǔ)至同一邏輯行或者同一邏輯列中。
[0020]可選的,所述方法還包括:
[0021]當(dāng)為所述存在關(guān)聯(lián)性的小文件指定的為邏輯行時(shí),在將所述存在關(guān)聯(lián)性的小文件分別存儲(chǔ)至指定的同一邏輯行后,所述數(shù)據(jù)分表中同一邏輯列中存儲(chǔ)的小文件的文件類型相同;
[0022]當(dāng)為所述存在關(guān)聯(lián)性的小文件指定的為邏輯列時(shí),在將所述存在關(guān)聯(lián)性的小文件分別存儲(chǔ)至指定的同一邏輯列后,所述數(shù)據(jù)分表中同一邏輯行中的存儲(chǔ)的小文件的文件類型相同。
[0023]可選的,所述方法還包括:
[0024]針對(duì)所述數(shù)據(jù)分表生成對(duì)應(yīng)的分表索引;
[0025]其中,所述分表索引包括針對(duì)所述數(shù)據(jù)分表中各邏輯行或者邏輯列中所存儲(chǔ)的文件類型的描述信息。
[0026]可選的,所述表征所述待存儲(chǔ)小文件的關(guān)聯(lián)性的信息包括所述待存儲(chǔ)小文件的來源信息以及業(yè)務(wù)類型信息;
[0027]所述待存儲(chǔ)小文件的來源信息包括所述待存儲(chǔ)小文件的url地址;所述業(yè)務(wù)類型信息包括業(yè)務(wù)ID;
[0028]所述待存儲(chǔ)小文件中存在關(guān)聯(lián)性的小文件包括所述待存儲(chǔ)小文件中處于同一目標(biāo)頁面中的小文件;或者所述待存儲(chǔ)小文件中業(yè)務(wù)類型相同的小文件;
[0029]所述文件索引包括針對(duì)所述目標(biāo)頁面的url地址進(jìn)行哈希計(jì)算得到的哈希值;或者與所述業(yè)務(wù)類型對(duì)應(yīng)的業(yè)務(wù)ID;
[0030]所述查詢索引包括針對(duì)所述待存儲(chǔ)文件的url地址進(jìn)行哈希計(jì)算得到的哈希值。
[0031]本申請(qǐng)還提出一種基于分布式文件系統(tǒng)的小文件存儲(chǔ)裝置,該裝置包括:
[0032]分配模塊,用于為存在關(guān)聯(lián)性的待存儲(chǔ)小文件分配唯一對(duì)應(yīng)的數(shù)據(jù)分表;所述數(shù)據(jù)分表為預(yù)設(shè)的邏輯二維表,包括由預(yù)設(shè)大小的邏輯存儲(chǔ)單元構(gòu)成的若干邏輯行和邏輯列;所述待存儲(chǔ)文件包括文件類型和大小均不相同的批量小文件;
[0033]存儲(chǔ)模塊,用于將所述待存儲(chǔ)小文件中存在關(guān)聯(lián)性的小文件分別存儲(chǔ)至所述數(shù)據(jù)分表中的同一邏輯行或者同一邏輯列;
[0034]生成模塊,用于針對(duì)所述存在關(guān)聯(lián)性的小文件分別生成唯一對(duì)應(yīng)的文件索引,并將該文件索引保存至對(duì)應(yīng)的邏輯行或者邏輯列中。
[0035]可選的,所述分配模塊具體用于:
[0036]基于表征所述待存儲(chǔ)小文件的關(guān)聯(lián)性的信息生成唯一對(duì)應(yīng)的查詢索引;
[0037]為生成的所述查詢索引分配對(duì)應(yīng)的數(shù)據(jù)分表,并建立所述查詢索引與所述數(shù)據(jù)分表之間的映射關(guān)系
[0038]可選的,所述存儲(chǔ)模塊具體用于:
[0039]依次讀取所述待存儲(chǔ)小文件中存在關(guān)聯(lián)性的小文件;
[0040]在所述數(shù)據(jù)分表中為所述待存儲(chǔ)小文件中存在關(guān)聯(lián)性的小文件分別指定邏輯行或者邏輯列;
[0041]基于所述邏輯行或者邏輯列的邏輯存儲(chǔ)地址將所述存在關(guān)聯(lián)性的小文件分別存儲(chǔ)至指定的同一邏輯行或者同一邏輯列中。
[0042]可選的,所述存儲(chǔ)模塊進(jìn)一步用于:
[0043]從所述存在關(guān)聯(lián)性的小文件中依次讀取目標(biāo)小文件;
[0044]判斷讀取到的所述目標(biāo)小文件的大小是否大于所述邏輯存儲(chǔ)單元的大小;
[0045]當(dāng)讀取到的所述目標(biāo)小文件的大小小于或者等于所述邏輯存儲(chǔ)單元的大小時(shí),基于所述邏輯行或者邏輯列的邏輯存儲(chǔ)地址將所述目標(biāo)小文件的文件內(nèi)容存儲(chǔ)至同一邏輯行或者同一邏輯列中;
[0046]當(dāng)讀取到的所述目標(biāo)小文件的大小大于所述邏輯存儲(chǔ)單元的大小時(shí),基于所述邏輯行或者邏輯列的邏輯存儲(chǔ)地址將所述目標(biāo)小文件的文件內(nèi)容分片存儲(chǔ)至同一邏輯行或者同一邏輯列;或者對(duì)所述目標(biāo)小文件進(jìn)行單獨(dú)存儲(chǔ),將所述目標(biāo)小文件的存儲(chǔ)位置提示信息存儲(chǔ)至同一邏輯行或者同一邏輯列中。
[0047]可選的,當(dāng)為所述存在關(guān)聯(lián)性的小文件指定的為邏輯行時(shí),在將所述存在關(guān)聯(lián)性的小文件分別存儲(chǔ)至指定的同一邏輯行后,所述數(shù)據(jù)分表中同一邏輯列中存儲(chǔ)的小文件的文件類型相同;
[0048]當(dāng)為所述存在關(guān)聯(lián)性的小文件指定的為邏輯列時(shí),在將所述存在關(guān)聯(lián)性的小文件分別存儲(chǔ)至指定的同一邏輯列后,所述數(shù)據(jù)分表中同一邏輯行中的存儲(chǔ)的小文件的文件類型相同。
[0049]可選的,所述生成模塊進(jìn)一步用于:
[0050]針對(duì)所述數(shù)據(jù)分表生成對(duì)應(yīng)的分表索引;
[0051]其中,所述分表索引包括針對(duì)所述數(shù)據(jù)分表中各邏輯行或者邏輯列中所存儲(chǔ)的文件類型的描述信息。
[0052]可選的,所述表征所述待存儲(chǔ)小文件的關(guān)聯(lián)性的信息包括所述待存儲(chǔ)小文件的來源信息以及業(yè)務(wù)類型信息;
[0053]所述待存儲(chǔ)小文件的來源信息包括所述待存儲(chǔ)小文件的url地址;所述業(yè)務(wù)類型信息包括業(yè)務(wù)ID;
[0054]所述待存儲(chǔ)小文件中存在關(guān)聯(lián)性的小文件包括所述待存儲(chǔ)小文件中處于同一目標(biāo)頁面中的小文件;或者所述待存儲(chǔ)小文件中業(yè)務(wù)類型相同的小文件;
[0055]所述文件索引包括針對(duì)所述目標(biāo)頁面的url地址進(jìn)行哈希計(jì)算得到的哈希值;或者與所述業(yè)務(wù)類型對(duì)應(yīng)的業(yè)務(wù)ID;
[0056]所述查詢索引包括針對(duì)所述待存儲(chǔ)文件的url地址進(jìn)行哈希計(jì)算得到的哈希值。
[0057]本申請(qǐng)中,通過為存在關(guān)聯(lián)性的待存儲(chǔ)小文件分配唯一對(duì)應(yīng)的數(shù)據(jù)分表;所述數(shù)據(jù)分表為預(yù)設(shè)的邏輯二維表,包括由預(yù)設(shè)大小的邏輯存儲(chǔ)單元構(gòu)成的若干邏輯行和邏輯列;將所述待存儲(chǔ)小文件中存在關(guān)聯(lián)性的小文件分別存儲(chǔ)至所述數(shù)據(jù)分表中的同一邏輯行或者同一邏輯列;針對(duì)所述存在關(guān)聯(lián)性的小文件分別生成唯一對(duì)應(yīng)的文件索引,并將該文件索引保存至對(duì)應(yīng)的邏輯行或者邏輯列中,可以實(shí)現(xiàn)將存在關(guān)聯(lián)性的大量非結(jié)構(gòu)化的小文件存儲(chǔ)至同一數(shù)據(jù)分表,并在存儲(chǔ)時(shí)將這些非結(jié)構(gòu)化的小文件中存在關(guān)聯(lián)性的小文件映射至邏輯二維表中的同一邏輯行或者邏輯列,可以顯著降低分布式文件系統(tǒng)的文件存儲(chǔ)壓力。而且,在針對(duì)