亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種數(shù)據(jù)合并的方法和裝置制造方法

文檔序號(hào):6634205閱讀:150來源:國知局
一種數(shù)據(jù)合并的方法和裝置制造方法【專利摘要】本發(fā)明公開了一種數(shù)據(jù)合并的方法和裝置,涉及計(jì)算機(jī)【
技術(shù)領(lǐng)域
】。所述方法包括:獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)。本發(fā)明解決了平均數(shù)據(jù)長度短keyspace的sstable文件的合并阻塞整個(gè)各keyspace之間的compaction過程的問題,取得了可使不同數(shù)據(jù)長度的keyspace均可以及時(shí)的完成其SStable的合并,縮短系統(tǒng)整體compaction的時(shí)間有益效果?!緦@f明】一種數(shù)據(jù)合并的方法和裝置【
技術(shù)領(lǐng)域
】[0001]本發(fā)明涉及計(jì)算機(jī)【
技術(shù)領(lǐng)域
】,具體涉及一種數(shù)據(jù)合并的方法和裝置。【
背景技術(shù)
】[0002]目前幾乎所有的大數(shù)據(jù)存儲(chǔ)系統(tǒng),基于存儲(chǔ)與讀寫性能的考慮,在實(shí)現(xiàn)上都采用對(duì)了數(shù)據(jù)Append模式,即所有的寫操作都將先將數(shù)據(jù)寫入內(nèi)存中的Memtable(內(nèi)存表)即可,Memtable寫滿后Dump(轉(zhuǎn)儲(chǔ))到磁盤上的SSTable(SortedStringTable,有序字符串表)文件中。[0003]但是,當(dāng)磁盤上SSTable文件數(shù)過多的時(shí)候,會(huì)導(dǎo)致來自客戶端的檢索請(qǐng)求所打開的文件數(shù)會(huì)很多,單個(gè)請(qǐng)求的資源消耗大幅增加,從而導(dǎo)致整個(gè)系統(tǒng)的吞吐和性能大幅下降。因此,系統(tǒng)需要再后臺(tái)通過Compact1n(可以理解為合并)機(jī)制將全部或部分SSTable文件合并成新的SSTable文件,以達(dá)到降低文件個(gè)數(shù)提高系統(tǒng)吞吐和性能、去除重復(fù)數(shù)據(jù)節(jié)省磁盤空間的目的。[0004]但是現(xiàn)有的Compact1n機(jī)制如圖1所述,系統(tǒng)存在一個(gè)Compact1n工作隊(duì)列TaskQueue,當(dāng)SSTable個(gè)數(shù)等滿足一定的條件時(shí)會(huì)將這些SSTable文件作為一個(gè)Compact1n(如圖1中compact1ntask0>compact1ntaskl>compact1ntask2)任務(wù)提交到工作隊(duì)列中。每一個(gè)Compact1n過程就是一個(gè)工作任務(wù),工作線程worker按照提交順序串行的執(zhí)行Compact1n任務(wù),完成對(duì)應(yīng)SSTable文件的合并。[0005]但是隨著用戶的Keyspace(在Cassandra中,Keyspace就是數(shù)據(jù)的存儲(chǔ)容器,一般Keyspace的存儲(chǔ)大小是一樣的)越來越多,以及數(shù)據(jù)的持續(xù)寫入,各Keyspace的SSTable文件的個(gè)數(shù)會(huì)越來越多。而由于Compact1n過程本質(zhì)上是一個(gè)多路歸并操作,即從若干個(gè)參與Compact1n過程的SSTable文件中逐個(gè)讀取每個(gè)key及其數(shù)據(jù),進(jìn)而合并輸出到一個(gè)SSTable文件中。因此,對(duì)于那些平均數(shù)據(jù)長度很小(如幾字節(jié))的Keyspace而言,其做一次Compact1n的時(shí)間遠(yuǎn)大于那些平均數(shù)據(jù)長度很大(如幾百K)的Keyspace的Compact1n時(shí)間。因?yàn)橐话愦鎯?chǔ)系統(tǒng)在keyspace由memtable表dump到磁盤時(shí),memtable的容量是固定的,那么平均數(shù)據(jù)長度越小的keyspace中,其存儲(chǔ)的用戶數(shù)據(jù)條數(shù)更多,其key也更多。[0006]那么,由圖1的現(xiàn)有技術(shù)過程可知,在一個(gè)工作隊(duì)列中,當(dāng)包括大量的平均數(shù)據(jù)長度較小的SSTable的Compact1n任務(wù)執(zhí)行時(shí),其Compact1n過程持續(xù)時(shí)間很長,會(huì)嚴(yán)重阻塞其他Keyspace的SSTable的合并,從而導(dǎo)致系統(tǒng)層面整體數(shù)據(jù)Compact1n執(zhí)行時(shí)間過長,甚至無法保證每天新增數(shù)據(jù)的合并,進(jìn)而導(dǎo)致系統(tǒng)訪問吞吐性能下降?!?br/>發(fā)明內(nèi)容】[0007]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種數(shù)據(jù)合并的裝置和相應(yīng)的一種數(shù)據(jù)合并的方法。[0008]依據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)合并的方法,包括:[0009]獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;[0010]將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;[0011]由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)。[0012]優(yōu)選的,還包括:[0013]創(chuàng)建至少兩個(gè)工作隊(duì)列,所述工作隊(duì)列的個(gè)數(shù)至少等于所述分類個(gè)數(shù)。[0014]優(yōu)選的,所述創(chuàng)建至少兩個(gè)工作隊(duì)列包括:[0015]在系統(tǒng)啟動(dòng)時(shí)加載配置文件,通過所述配置文件設(shè)置并創(chuàng)建至少兩個(gè)工作隊(duì)列;所述配置文件中包括平均數(shù)據(jù)長度的分類與工作隊(duì)列的對(duì)應(yīng)關(guān)系。[0016]優(yōu)選的,還包括:[0017]針對(duì)系統(tǒng)中的每個(gè)存儲(chǔ)表,獲取所述存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤后的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述存儲(chǔ)表在系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中。[0018]優(yōu)選的,針對(duì)系統(tǒng)中的每個(gè)存儲(chǔ)表,獲取所述存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤后的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述存儲(chǔ)表在系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中,包括:[0019]在系統(tǒng)加載索引時(shí),根據(jù)索引中記錄的鍵的文件偏移和數(shù)據(jù)長度,計(jì)算現(xiàn)已存儲(chǔ)所述存儲(chǔ)表的用戶數(shù)據(jù)的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述數(shù)據(jù)結(jié)構(gòu);[0020]在每次將存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤時(shí),利用內(nèi)存表數(shù)據(jù)中新增的數(shù)據(jù)長度修正所述平均數(shù)據(jù)長度,并將修正后的平均數(shù)據(jù)長度更新至所述數(shù)據(jù)結(jié)構(gòu)中。[0021]優(yōu)選的,將各存儲(chǔ)表按平均數(shù)據(jù)長度進(jìn)行分類包括:[0022]針對(duì)每一個(gè)存儲(chǔ)表,從所述系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中提取平均數(shù)據(jù)長度,根據(jù)所述平均數(shù)據(jù)長度對(duì)所述存儲(chǔ)表進(jìn)行分類。[0023]優(yōu)選的,由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)包括:[0024]通過至少一個(gè)工作線程并行執(zhí)行所述工作隊(duì)列中的各個(gè)合并任務(wù)。[0025]優(yōu)選的,通過至少一個(gè)工作線程執(zhí)行工作隊(duì)列中的各個(gè)合并任務(wù)后,還包括:[0026]當(dāng)一工作隊(duì)列中等待執(zhí)行的合并任務(wù)的數(shù)量大于閾值時(shí),自動(dòng)增加新的工作線程以并行執(zhí)行所述工作隊(duì)列中的合并任務(wù)。[0027]優(yōu)選的,將各存儲(chǔ)表按平均數(shù)據(jù)長度進(jìn)行分類之前,還包括:[0028]針對(duì)每個(gè)存儲(chǔ)表生成一個(gè)合并任務(wù)。[0029]依據(jù)本發(fā)明了另外一個(gè)方面,提供了一種數(shù)據(jù)合并的裝置,包括:[0030]存儲(chǔ)表分類模塊,適于獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;[0031]任務(wù)提交模塊,適于將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;[0032]任務(wù)處理模塊,適于由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)。[0033]優(yōu)選的,還包括:[0034]工作隊(duì)列創(chuàng)建模塊,適于創(chuàng)建至少兩個(gè)工作隊(duì)列,所述工作隊(duì)列的個(gè)數(shù)至少等于所述分類個(gè)數(shù)。[0035]優(yōu)選的,所述工作隊(duì)列創(chuàng)建模塊包括:[0036]第一工作隊(duì)列加載模塊,適于在系統(tǒng)啟動(dòng)時(shí)加載配置文件,通過所述配置文件設(shè)置并創(chuàng)建至少兩個(gè)工作隊(duì)列;所述配置文件中包括平均數(shù)據(jù)長度的分類與工作隊(duì)列的對(duì)應(yīng)關(guān)系。[0037]優(yōu)選的,還包括:[0038]數(shù)據(jù)長度統(tǒng)計(jì)模塊,適于針對(duì)系統(tǒng)中的每個(gè)存儲(chǔ)表,獲取所述存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤后的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述存儲(chǔ)表在系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中。[0039]優(yōu)選的,所述平均數(shù)據(jù)長度統(tǒng)計(jì)模塊,包括:[0040]第一數(shù)據(jù)長度計(jì)算模塊,適于在系統(tǒng)加載索引時(shí),根據(jù)索引中記錄的鍵的文件偏移和數(shù)據(jù)長度,計(jì)算現(xiàn)已存儲(chǔ)所述存儲(chǔ)表的用戶數(shù)據(jù)的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述數(shù)據(jù)結(jié)構(gòu);[0041]第二數(shù)據(jù)長度計(jì)算模塊,適于在每次將存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤時(shí),利用內(nèi)存表數(shù)據(jù)中新增的數(shù)據(jù)長度修正所述平均數(shù)據(jù)長度,并將修正后的平均數(shù)據(jù)長度更新至所述數(shù)據(jù)結(jié)構(gòu)中。[0042]優(yōu)選的,所述存儲(chǔ)表分類模塊包括:[0043]第一存儲(chǔ)表分類模塊,適于針對(duì)每一個(gè)存儲(chǔ)表,從所述系統(tǒng)內(nèi)存數(shù)據(jù)結(jié)構(gòu)中提取平均數(shù)據(jù)長度,根據(jù)所述平均數(shù)據(jù)長度對(duì)所述存儲(chǔ)表進(jìn)行分類。[0044]優(yōu)選的,所述任務(wù)處理模塊還包括:[0045]第一任務(wù)處理模塊,適于通過至少一個(gè)工作線程并行執(zhí)行所述工作隊(duì)列中的各個(gè)合并任務(wù)。[0046]優(yōu)選的,在第一任務(wù)處理模塊之后,還包括:[0047]工作線程增加模塊,適于當(dāng)一工作隊(duì)列中等待執(zhí)行的合并任務(wù)的數(shù)量大于閾值時(shí),自動(dòng)增加新的工作線程以并行執(zhí)行所述工作隊(duì)列中的合并任務(wù)。[0048]優(yōu)選的,在存儲(chǔ)表分類模塊之前,還包括:[0049]任務(wù)生成模塊,適于針對(duì)每個(gè)存儲(chǔ)表生成一個(gè)合并任務(wù)。[0050]根據(jù)本發(fā)明的一種數(shù)據(jù)合并的方法可以將各存儲(chǔ)表(keyspace)按平均數(shù)據(jù)長度進(jìn)行分類,所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度,然后將不同分類的keyspace的compact1n(合并)任務(wù)提交至相應(yīng)的工作隊(duì)列去執(zhí)行,一個(gè)分類一個(gè)工作隊(duì)列,由此解決了平均數(shù)據(jù)長度短keyspace的sstable文件的合并阻塞整個(gè)各keyspace之間的compact1n過程的問題,取得了可使不同數(shù)據(jù)長度的keyspace均可以及時(shí)的完成其SStable的合并,縮短系統(tǒng)整體compact1n的時(shí)間有益效果。[0051]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】?!緦@綀D】【附圖說明】[0052]通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:[0053]圖1示出了【
背景技術(shù)
】的一種數(shù)據(jù)合并的方法的隊(duì)列執(zhí)行邏輯示例;[0054]圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種數(shù)據(jù)合并的方法的流程示意圖;[0055]圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的另一種數(shù)據(jù)合并的方法的流程示意圖;[0056]圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的另一種數(shù)據(jù)合并的方法的流程示意圖;[0057]圖5示出了根據(jù)本發(fā)明圖4實(shí)施例的隊(duì)列執(zhí)行邏輯示例;[0058]圖6示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種數(shù)據(jù)合并的裝置的結(jié)構(gòu)示意圖;[0059]圖7示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的另一種數(shù)據(jù)合并的裝置的結(jié)構(gòu)示意圖;以及[0060]圖8示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的另一種數(shù)據(jù)合并的裝置的結(jié)構(gòu)示意圖?!揪唧w實(shí)施方式】[0061]下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。[0062]本發(fā)明的核心思想之一是:對(duì)于若干個(gè)存儲(chǔ)表,以存儲(chǔ)表的平均數(shù)據(jù)長度進(jìn)行分類,那么將針對(duì)多個(gè)存儲(chǔ)表的合并任務(wù),分別提交至不同規(guī)模的個(gè)工作隊(duì)列進(jìn)行處理,此解決了平均數(shù)據(jù)長度短keyspace的sstable文件的合并影響整個(gè)工作隊(duì)列的合并速度,從而導(dǎo)致系統(tǒng)層面整體數(shù)據(jù)Compact1n執(zhí)行時(shí)間過長,甚至無法保證每天新增數(shù)據(jù)的合并,進(jìn)而導(dǎo)致系統(tǒng)訪問吞吐性能下降的問題,取得了優(yōu)化系統(tǒng)層面整體數(shù)據(jù)Compact1n執(zhí)行時(shí)間的問題,可以避免無法保證每天新增數(shù)據(jù)的合并而導(dǎo)致的系統(tǒng)訪問吞吐性能下降的有益效果。[0063]首先,針對(duì)本發(fā)明解釋涉及到的幾個(gè)技術(shù)術(shù)語:[0064]SSTable:SortedStringTable,有序字符串表,是Cassandra系統(tǒng)中數(shù)據(jù)處理和交換的文件存儲(chǔ)格式。SSTable中存儲(chǔ)一組任意有序鍵-值對(duì)的文件。SSTable—旦完成寫入,就不可更改,只能讀取。通過Compact1n壓縮機(jī)制對(duì)多個(gè)SSTable文件進(jìn)行Merge消重后形成新的SSTable文件。[0065]Compact1n:SSTable文件的Compact1n機(jī)制,字面上的意思就是SSTable文件的合并。通過文件合并達(dá)到降低文件個(gè)數(shù)提高訪問性能、去除重復(fù)數(shù)據(jù)節(jié)省磁盤空間的目的。Compact1n有兩種,分別為:[0066]MinorCompact1n:部分文件的合并。[0067]MajorCompact1n:全部文件的合并。[0068]Keyspace:在Cassandra中,Keyspace就是數(shù)據(jù)的存儲(chǔ)容器,實(shí)現(xiàn)了不同類型的數(shù)據(jù)的隔離存儲(chǔ)。一個(gè)Keyspace可以看作一個(gè)二維索引結(jié)構(gòu):[0069].第一層索引所用的key為(row-key,cf-name),即用一個(gè)row-key和column-family-name可以定位一個(gè)columnfamily。columnfamily是column的集合。[0070].第二層索引所用的key為column-name,即通過一個(gè)column_name可以在一個(gè)columnfamily中定位一個(gè)column。[0071]Column是這個(gè)數(shù)據(jù)模型里面最基本的數(shù)據(jù)單元,它是一個(gè)三元組(name,value,timestamp)。一個(gè)columnfamily里面,所有的column是按照column-name排序的。所以可以根據(jù)column-name快速找到column。[0072]Keyspace在系統(tǒng)內(nèi)存中以memtable的形式存儲(chǔ)數(shù)據(jù),在磁盤中以SStable文件形式存儲(chǔ)數(shù)據(jù)。[0073]本發(fā)明實(shí)施例中的Compact1n機(jī)制按照不同的Keyspace而分別執(zhí)行。[0074]為了方便后續(xù)描述,本發(fā)明實(shí)施例中存儲(chǔ)表以keyspace表示,合并任務(wù)以compact1n表不,工作隊(duì)列以TaskQueue表不,內(nèi)存表以memtable表不,轉(zhuǎn)儲(chǔ)以dump表不。[0075]實(shí)施例一[0076]參照?qǐng)D2,其示出了本發(fā)明一種數(shù)據(jù)合并的方法的流程示意圖,具體可以包括:[0077]步驟110,獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;[0078]對(duì)于存儲(chǔ)表,也即keyspace,其基本上也是以key為索引,以keyspace中的value為實(shí)際存儲(chǔ)用戶數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),其每個(gè)key的長度是以value決定的,因此可以統(tǒng)計(jì)每個(gè)key的value長度,去計(jì)算整個(gè)keyspace的平均數(shù)據(jù)長度。[0079]比如keyspaceO中記錄的用戶數(shù)據(jù)包括:(key=I,value=XI)、(key=2,value=X2)、(key=3,value=X3)、(key=4,value=X4),其中X1、X2、X3、X4代表具體的用戶數(shù)據(jù),其長度分別為20k、30k、10k、40k,那么keyspaceO的平均數(shù)據(jù)長度為25k。[0080]在本發(fā)明實(shí)施例中,對(duì)于針對(duì)用戶的keyspace,可以對(duì)其存儲(chǔ)的用戶數(shù)據(jù)進(jìn)行平均數(shù)據(jù)長度計(jì)算,然后以一個(gè)專門的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)該keyspace的平均數(shù)據(jù)長度,其平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度。在本發(fā)明中,針對(duì)每個(gè)Keyspace,在系統(tǒng)內(nèi)存中都存在一個(gè)與之相對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),用于記錄該Keyspace所存儲(chǔ)數(shù)據(jù)的平均數(shù)據(jù)長度以及現(xiàn)已存儲(chǔ)的key總條目數(shù)。本發(fā)明實(shí)際上統(tǒng)計(jì)的最終目標(biāo)為針對(duì)一個(gè)keyspace的各SStable文件中,其存儲(chǔ)的所有用戶數(shù)據(jù)的平均數(shù)據(jù)長度。[0081]在統(tǒng)計(jì)的各個(gè)keyspace的平均數(shù)據(jù)長度的基礎(chǔ)上,即可對(duì)keyspace以數(shù)據(jù)長度進(jìn)行分類,比如長度O-1k的keyspace為一類,l_500k的為一類等等。本發(fā)明的分類可根據(jù)實(shí)際情況進(jìn)行調(diào)整。[0082]步驟120,將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;[0083]在將各keyspace進(jìn)行分類后,即可將同一分類的合并任務(wù)提交至同一個(gè)工作隊(duì)列中,等待工作隊(duì)列的線程去執(zhí)行。在本發(fā)明中工作隊(duì)列創(chuàng)建的個(gè)數(shù)至少需要等于分類的個(gè)數(shù),如此,可保證每個(gè)分類均可以有工作隊(duì)列負(fù)責(zé)對(duì)其中的compact1n任務(wù)進(jìn)行處理,而不用各個(gè)平均數(shù)據(jù)長度的compact1n相互堵塞。[0084]本發(fā)明中一個(gè)分類至少放入一個(gè)工作隊(duì)列,即可以一個(gè)工作隊(duì)列負(fù)責(zé)一個(gè)分類,或者多個(gè)工作隊(duì)列負(fù)責(zé)一個(gè)分類。[0085]步驟130,由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)。[0086]那么每個(gè)工作隊(duì)列即可采用其工作線程對(duì)其中的合并任務(wù)進(jìn)行處理。[0087]當(dāng)然每個(gè)工作隊(duì)列的工作線程可以為一個(gè)也可以為多個(gè)。[0088]在本發(fā)明實(shí)施例中,步驟110至130是在Cassandra系統(tǒng)的各服務(wù)器中執(zhí)行的。Cassandra系統(tǒng)是一個(gè)分布式Key-Value存儲(chǔ)系統(tǒng)。[0089]本發(fā)明提出的上述技術(shù)方案,通過將系統(tǒng)中各Keyspace的Compact1n按照其平均數(shù)據(jù)長度進(jìn)行劃分,分別提交到不同的工作隊(duì)列中去執(zhí)行。避免了各Keyspace數(shù)據(jù)的Compact1n過程的相互阻塞影響,保證了系統(tǒng)中各Keyspace均可以及時(shí)地完成SSTable的合并。在保證了公平性的同時(shí),大幅縮短了系統(tǒng)整體Compact1n的時(shí)間,同時(shí)避免了由于未能及時(shí)完成數(shù)據(jù)的Compact1n而帶來的訪問吞吐性能的降低的情況。[0090]實(shí)施例二[0091]參照?qǐng)D3,其示出了本發(fā)明優(yōu)選的一種數(shù)據(jù)合并的方法的流程示意圖,具體可以包括:[0092]步驟210,針對(duì)系統(tǒng)中的每個(gè)存儲(chǔ)表,獲取所述存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤后的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述存儲(chǔ)表在系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中;[0093]本發(fā)明實(shí)施例中,各個(gè)keyspace在內(nèi)存中存儲(chǔ)的memtable(內(nèi)存表)數(shù)據(jù)是需要dump(轉(zhuǎn)儲(chǔ))磁盤中,最終以SStable文件進(jìn)行存儲(chǔ)的。而compact1n本質(zhì)上也是針對(duì)SStable文件的,以達(dá)到降低文件個(gè)數(shù)提高系統(tǒng)吞吐和性能、去除重復(fù)數(shù)據(jù)節(jié)省磁盤空間的目的。因此所統(tǒng)計(jì)的各個(gè)keyspace的平均數(shù)據(jù)長度,是針對(duì)該keyspace的memtable數(shù)據(jù)dump至磁盤得到SStable文件后,keyspace磁盤中以SStable文件存儲(chǔ)的形式下的平均數(shù)據(jù)長度。[0094]優(yōu)選的,步驟210包括,包括:[0095]子步驟S212,在系統(tǒng)加載索引時(shí),根據(jù)索引中記錄的鍵的文件偏移和數(shù)據(jù)長度,計(jì)算現(xiàn)已存儲(chǔ)所述存儲(chǔ)表的用戶數(shù)據(jù)的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述數(shù)據(jù)結(jié)構(gòu);[0096]本發(fā)明實(shí)施例可以在系統(tǒng)啟動(dòng)服務(wù)時(shí),在讀取SStable文件的索引文件進(jìn)行加載的過程中完成平均數(shù)據(jù)的統(tǒng)計(jì)。在加載SStable文件的索引時(shí),會(huì)根據(jù)索引信息中記錄的,針對(duì)對(duì)應(yīng)各keyspace的,每個(gè)SStable文件的key(鍵)的文件偏移(文件偏移即相對(duì)存儲(chǔ)文件地址的開始位置的偏移量)和數(shù)據(jù)長度,計(jì)算出每個(gè)keyspace中當(dāng)前已存儲(chǔ)數(shù)的據(jù)平均數(shù)據(jù)長度,并先將其存儲(chǔ)在系統(tǒng)內(nèi)存與keyspace對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)中。[0097]子步驟S214,在每次將存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤時(shí),利用內(nèi)存表數(shù)據(jù)中新增的數(shù)據(jù)長度修正所述平均數(shù)據(jù)長度,并將修正后的平均數(shù)據(jù)長度更新至所述數(shù)據(jù)結(jié)構(gòu)中。[0098]在系統(tǒng)運(yùn)行過程中,每個(gè)keyspace會(huì)產(chǎn)生新的數(shù)據(jù),該數(shù)據(jù)寫入在memtable中,那么新增的數(shù)據(jù)會(huì)影響該keyspace整體的平均數(shù)據(jù)長度,本發(fā)明則可在該keyspace的memtable數(shù)據(jù)dump到磁盤的時(shí)候,利用該memtable的數(shù)據(jù)修正該keyspace在所述數(shù)據(jù)結(jié)構(gòu)中記錄的平均數(shù)據(jù)長度,并將修正后的平均數(shù)據(jù)長度更新至所屬數(shù)據(jù)結(jié)構(gòu)中。如此循環(huán),可保證每次該keyspace的memtable數(shù)據(jù)dump到磁盤時(shí),其平均數(shù)據(jù)長度是實(shí)時(shí)的、準(zhǔn)確的。[0099]當(dāng)然,對(duì)于一個(gè)完全新建的keyspace,其數(shù)據(jù)結(jié)構(gòu)中記錄的平均數(shù)據(jù)長度為O。[0100]比如對(duì)于一個(gè)keyspace,索引中已經(jīng)計(jì)算其平均數(shù)據(jù)長度為1k,其所對(duì)應(yīng)的各個(gè)SStable文件中記錄的key的總量為100個(gè),如果新增的memtable數(shù)據(jù)中增加的數(shù)據(jù)總長度為1000k,那么在memtable數(shù)據(jù)dump到磁盤生成SStable文件時(shí),該keyspace的平均數(shù)據(jù)長度修正為(10k*100+1000k)/100=20k,更新20k到keyspace記錄平均數(shù)據(jù)長度的數(shù)據(jù)結(jié)構(gòu)中,即將1k替換掉。[0101]上述過程中對(duì)于磁盤中現(xiàn)存的keyspace的SStable文件不再進(jìn)行計(jì)算,只計(jì)算該keyspace新增的memtable數(shù)據(jù),去修正已有的平均數(shù)據(jù)長度。計(jì)算過程方便,占用系統(tǒng)資源較少。[0102]步驟220,創(chuàng)建至少兩個(gè)工作隊(duì)列,所述工作隊(duì)列的個(gè)數(shù)至少等于所述分類個(gè)數(shù);[0103]本發(fā)明可預(yù)先構(gòu)建工作隊(duì)列與分類的對(duì)應(yīng)關(guān)系,使一個(gè)分類至少對(duì)應(yīng)一個(gè)隊(duì)列。當(dāng)然可以多個(gè)工作隊(duì)列負(fù)責(zé)一個(gè)分類的各個(gè)compact1n。工作隊(duì)列與分類可以是一對(duì)一的關(guān)系,也可以是多對(duì)一的關(guān)系。[0104]優(yōu)選的,所述創(chuàng)建至少兩個(gè)工作隊(duì)列包括:[0105]子步驟S222,在系統(tǒng)啟動(dòng)時(shí)加載配置文件,通過所述配置文件設(shè)置并創(chuàng)建至少兩個(gè)工作隊(duì)列;所述配置文件中包括平均數(shù)據(jù)長度的分類與工作隊(duì)列的對(duì)應(yīng)關(guān)系。[0106]本發(fā)明實(shí)施例可在系統(tǒng)啟動(dòng)時(shí)加載配置文件,設(shè)置并創(chuàng)建Compact1n工作隊(duì)列的個(gè)數(shù),該工作隊(duì)列分別對(duì)應(yīng)相應(yīng)一個(gè)分類。[0107]本發(fā)明可以通過配置文件對(duì)工作隊(duì)列與分類進(jìn)行設(shè)置,比如tiny、small、normal、Iargy四個(gè)隊(duì)列,然后每個(gè)隊(duì)列負(fù)責(zé)一個(gè)平均數(shù)據(jù)長度的分類。然后系統(tǒng)加載時(shí)即可加載該四個(gè)隊(duì)列,也得到四個(gè)分類的范圍區(qū)間。[0108]步驟230,針對(duì)每一個(gè)存儲(chǔ)表,從所述系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中提取平均數(shù)據(jù)長度,根據(jù)所述平均數(shù)據(jù)長度對(duì)所述存儲(chǔ)表進(jìn)行分類。[0109]將每個(gè)keyspace,從前述系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中提取其平均數(shù)據(jù)長度,然后根據(jù)該平均數(shù)據(jù)長度與分類的范圍進(jìn)行比較,即可將該keyspace分入某一類中。[0110]步驟240,將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;[0111]步驟250,由所述工作隊(duì)列的工作線程執(zhí)行對(duì)應(yīng)分類的合并任務(wù)。[0112]即由各個(gè)工作隊(duì)列本身的工作線程執(zhí)行其隊(duì)列中的合并任務(wù)。[0113]當(dāng)然,本發(fā)明實(shí)施例中,也可以根據(jù)平均數(shù)據(jù)長度的范圍對(duì)keyspace進(jìn)行分類,再根據(jù)分類的個(gè)數(shù)啟動(dòng)相應(yīng)的工作隊(duì)列,本發(fā)明不對(duì)其加以限制。[0114]當(dāng)然,本發(fā)明實(shí)施例中分類的范圍,還可通過智能學(xué)習(xí)進(jìn)行設(shè)置。比如在第一輪預(yù)設(shè)了分類范圍,在系統(tǒng)工作一定時(shí)間段內(nèi)(比如一個(gè)周),中間循環(huán)進(jìn)行多次合并,記錄每次合并完成時(shí)間,然后計(jì)算平均完成時(shí)長。然后在第二輪調(diào)整每個(gè)分類的范圍,按上述方法統(tǒng)計(jì)該輪的平均完成時(shí)長,如此循環(huán),直至穩(wěn)定出現(xiàn)某個(gè)范圍內(nèi)的最短時(shí)長,即獲得最優(yōu)的分類范圍。[0115]本發(fā)明實(shí)施例與實(shí)施例一類似的步驟原理類似,在此不再詳述。[0116]本發(fā)明提出的上述技術(shù)方案,通過將系統(tǒng)中各Keyspace的Compact1n按照其平均數(shù)據(jù)長度進(jìn)行劃分,分別提交到不同的工作隊(duì)列中去執(zhí)行。避免了各Keyspace數(shù)據(jù)的Compact1n過程的相互阻塞影響,保證了系統(tǒng)中各Keyspace均可以及時(shí)地完成SSTable的合并。在保證了公平性的同時(shí),大幅縮短了系統(tǒng)整體Compact1n的時(shí)間,同時(shí)避免了由于未能及時(shí)完成數(shù)據(jù)的Compact1n而帶來的訪問吞吐性能的降低的情況。[0117]實(shí)施例三[0118]參照?qǐng)D4,其示出了本發(fā)明最優(yōu)的一種數(shù)據(jù)合并的方法的流程示意圖,具體可以包括:[0119]步驟310,在系統(tǒng)加載索引時(shí),根據(jù)索引中記錄的鍵的文件偏移和數(shù)據(jù)長度,計(jì)算現(xiàn)已存儲(chǔ)所述存儲(chǔ)表的用戶數(shù)據(jù)的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述數(shù)據(jù)結(jié)構(gòu);[0120]步驟320,在每次將存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤時(shí),利用內(nèi)存表數(shù)據(jù)中新增的數(shù)據(jù)長度修正所述平均數(shù)據(jù)長度,并將修正后的平均數(shù)據(jù)長度更新至所述數(shù)據(jù)結(jié)構(gòu)中。[0121]步驟330,創(chuàng)建N個(gè)工作隊(duì)列,所述工作隊(duì)列的個(gè)數(shù)N等于所述分類個(gè)數(shù);[0122]結(jié)合如圖5所示,系統(tǒng)在啟動(dòng)時(shí)根據(jù)配置文件的配置,按照平均數(shù)據(jù)長度范圍共初始化tiny、smal1、normal、large等4個(gè)工作隊(duì)列,分別負(fù)責(zé)不同平均數(shù)據(jù)長度的Keyspace的合并任務(wù)。比如tiny對(duì)應(yīng)[0byte_500byte]范圍,其工作隊(duì)列為TaskQueueO(tiny);smalI對(duì)應(yīng)[501byte-100k]范圍,其工作隊(duì)列為TaskQueuel(small);normal對(duì)應(yīng)[101k_500k]范圍,其工作隊(duì)列為TaskQueue2(normal);large對(duì)應(yīng)[501k_無窮大]范圍,其工作隊(duì)列為TaskQueue3(large)。[0123]步驟340,針對(duì)每個(gè)存儲(chǔ)表生成一個(gè)合并任務(wù);[0124]步驟350,獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;[0125]步驟360,將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;[0126]步驟350至360的過程中,為系統(tǒng)后臺(tái)提交compact1n,從系統(tǒng)內(nèi)存的每個(gè)keyspace的數(shù)據(jù)結(jié)構(gòu)中提取每個(gè)keyspace的平均數(shù)據(jù)長度,然后以該平均數(shù)據(jù)長度判斷其屬于哪個(gè)分類,進(jìn)而即可知道該keyspace的compact1n屬于哪個(gè)工作隊(duì)列,然后即可將該compact1n提交至相應(yīng)的工作隊(duì)列中。[0127]結(jié)合圖5所不,比如系統(tǒng)現(xiàn)在有KeyspaceO、KeyspaceKKeyspace2>Keyspace3>Keyspace4、Keyspace5共6個(gè)Keyspace,根據(jù)之前統(tǒng)計(jì)的其平均數(shù)據(jù)長度,判斷其落在那個(gè)工作隊(duì)列說負(fù)責(zé)的范圍內(nèi),即將其提交到對(duì)應(yīng)的工作隊(duì)列中去。例如KeyspaceO、Keyspacel的數(shù)據(jù)Compact1n的任務(wù)(keyspaceOTask、keyspacelTask)提交到tiny隊(duì)列(TaskQueueO(tiny))中,Keyspace2的數(shù)據(jù)Compact1n的任務(wù)(keyspace2Task)提交到small隊(duì)列(TaskQueuel(small))中,Keyspace3、Keyspace4的數(shù)據(jù)Compact1n的任務(wù)(keyspace3Task、keyspace4Task)提交到normal隊(duì)列(TaskQueue2(normal))中,而Keyspace5的Compact1n任務(wù)(keyspace5Task)則提交到large隊(duì)列(TaskQueue3(large))中去。[0128]步驟370,針對(duì)每個(gè)工作隊(duì)列,通過至少一個(gè)工作線程并行執(zhí)行所述工作隊(duì)列中的各個(gè)合并任務(wù);[0129]如圖5所不,工作隊(duì)列TaskQueueO(tiny)有兩個(gè)工作線程workerO和workerl去執(zhí)行;工作隊(duì)列TaskQueuel(small)有兩個(gè)工作線程workerO和workerl去執(zhí)行;工作隊(duì)列TaskQueue2(normal)有兩個(gè)工作線程workerO和workerl去執(zhí)行;工作隊(duì)列TaskQueue3(large)有兩個(gè)工作線程workerO和workerl去執(zhí)行。每兩個(gè)工作隊(duì)列之間的工作線程是不沖突的、相互獨(dú)立的。[0130]步驟380,當(dāng)一工作隊(duì)列中等待執(zhí)行的合并任務(wù)的數(shù)量大于閾值時(shí),自動(dòng)增加新的工作線程以并行執(zhí)行所述工作隊(duì)列中的合并任務(wù)。[0131]如,當(dāng)在某一時(shí)刻,large隊(duì)列中等待執(zhí)行的Compact1n任務(wù)過多,超過預(yù)設(shè)的閾值時(shí),則增加額外的工作線程來加快large隊(duì)列中Compact1n任務(wù)的執(zhí)行。該種情況可根據(jù)系統(tǒng)內(nèi)存的占用量去選擇增加多少額外的工作線程。比如圖5中TaskQueue3(large)增加的工作線程worker2。[0132]本發(fā)明實(shí)施例與實(shí)施例一、二類似的步驟原理類似,在此不再詳述。[0133]在本發(fā)明實(shí)施例中,以keyspace為compact1n的處理單位,將同一分類的keyspace的compact1n任務(wù)放入相應(yīng)處理該分類的工作隊(duì)列進(jìn)行處理,避免了各Keyspace數(shù)據(jù)的Compact1n過程的相互阻塞影響,保證了系統(tǒng)中各Keyspace均可以及時(shí)地完成SSTable的合并;在保證了公平性的同時(shí),大幅縮短了系統(tǒng)整體Compact1n的時(shí)間,同時(shí)避免了【
背景技術(shù)
】中由于未能及時(shí)完成數(shù)據(jù)的Compact1n而帶來的訪問吞吐性能的降低的情況。并且針對(duì)每個(gè)工作隊(duì)列采用了靈活的工作線程處理方式,進(jìn)一步提縮短了compact1n時(shí)間。[0134]實(shí)施例四[0135]參照?qǐng)D6,其本發(fā)明一種數(shù)據(jù)合并的裝置的結(jié)構(gòu)示意圖,具體可以包括:[0136]存儲(chǔ)表分類模塊410,適于獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;[0137]任務(wù)提交模塊420,適于將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;[0138]任務(wù)處理模塊430,適于由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)。[0139]實(shí)施例五[0140]參照?qǐng)D7,其本發(fā)明一種數(shù)據(jù)合并的裝置的結(jié)構(gòu)示意圖,具體可以包括:[0141]數(shù)據(jù)長度統(tǒng)計(jì)模塊510,適于針對(duì)系統(tǒng)中的每個(gè)存儲(chǔ)表,獲取所述存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤后的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述存儲(chǔ)表在系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中。[0142]優(yōu)選的,所述平均數(shù)據(jù)長度統(tǒng)計(jì)模塊510,包括:[0143]第一數(shù)據(jù)長度計(jì)算模塊,適于在系統(tǒng)加載索引時(shí),根據(jù)索引中記錄的鍵的文件偏移和數(shù)據(jù)長度,計(jì)算現(xiàn)已存儲(chǔ)所述存儲(chǔ)表的用戶數(shù)據(jù)的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述數(shù)據(jù)結(jié)構(gòu);[0144]第二數(shù)據(jù)長度計(jì)算模塊,適于在每次將存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤時(shí),利用內(nèi)存表數(shù)據(jù)中新增的數(shù)據(jù)長度修正所述平均數(shù)據(jù)長度,并將修正后的平均數(shù)據(jù)長度更新至所述數(shù)據(jù)結(jié)構(gòu)中。[0145]工作隊(duì)列創(chuàng)建模塊520,適于創(chuàng)建至少兩個(gè)工作隊(duì)列,所述工作隊(duì)列的個(gè)數(shù)至少等于所述分類個(gè)數(shù)。[0146]優(yōu)選的,所述工作隊(duì)列創(chuàng)建模塊520包括:[0147]第一工作隊(duì)列加載模塊,適于在系統(tǒng)啟動(dòng)時(shí)加載配置文件,通過所述配置文件設(shè)置并創(chuàng)建至少兩個(gè)工作隊(duì)列;所述配置文件中包括平均數(shù)據(jù)長度的分類與工作隊(duì)列的對(duì)應(yīng)關(guān)系。[0148]存儲(chǔ)表分類模塊530,適于獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;[0149]任務(wù)提交模塊540,適于將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;[0150]任務(wù)處理模塊550,適于由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)。[0151]實(shí)施例六[0152]參照?qǐng)D8,其示出了本發(fā)明最優(yōu)的一種數(shù)據(jù)合并的裝置的結(jié)構(gòu)示意圖,具體可以包括:[0153]數(shù)據(jù)長度統(tǒng)計(jì)模塊S600,所述數(shù)據(jù)長度統(tǒng)計(jì)模塊S600包括:[0154]第一數(shù)據(jù)長度計(jì)算模塊610,適于在系統(tǒng)加載索引時(shí),根據(jù)索引中記錄的鍵的文件偏移和數(shù)據(jù)長度,計(jì)算現(xiàn)已存儲(chǔ)所述存儲(chǔ)表的用戶數(shù)據(jù)的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述數(shù)據(jù)結(jié)構(gòu);[0155]第二數(shù)據(jù)長度計(jì)算模塊620,適于在每次將存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤時(shí),利用內(nèi)存表數(shù)據(jù)中新增的數(shù)據(jù)長度修正所述平均數(shù)據(jù)長度,并將修正后的平均數(shù)據(jù)長度更新至所述數(shù)據(jù)結(jié)構(gòu)中。[0156]工作隊(duì)列創(chuàng)建模塊630,適于創(chuàng)建N個(gè)工作隊(duì)列,所述工作隊(duì)列的個(gè)數(shù)N等于所述分類個(gè)數(shù);[0157]任務(wù)生成模塊640,適于針對(duì)每個(gè)存儲(chǔ)表生成一個(gè)合并任務(wù);[0158]存儲(chǔ)表分類模塊650,適于獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;[0159]任務(wù)提交模塊660,適于將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;[0160]任務(wù)處理模S670,所述任務(wù)處理模S670包括:[0161]第一存儲(chǔ)表分類模塊670,適于針對(duì)每一個(gè)存儲(chǔ)表,從所述系統(tǒng)內(nèi)存數(shù)據(jù)結(jié)構(gòu)中提取平均數(shù)據(jù)長度,根據(jù)所述平均數(shù)據(jù)長度對(duì)所述存儲(chǔ)表進(jìn)行分類。[0162]工作線程增加模塊680,適于當(dāng)一工作隊(duì)列中等待執(zhí)行的合并任務(wù)的數(shù)量大于閾值時(shí),自動(dòng)增加新的工作線程以并行執(zhí)行所述工作隊(duì)列中的合并任務(wù)。[0163]在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。[0164]在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。[0165]類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循【具體實(shí)施方式】的權(quán)利要求書由此明確地并入該【具體實(shí)施方式】,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。[0166]本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。[0167]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。[0168]本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)合并設(shè)備中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。[0169]應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。[0170]本發(fā)明公開了Al、一種數(shù)據(jù)合并的方法,包括:[0171]獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;[0172]將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;[0173]由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)。[0174]A2、如Al所述的方法,還包括:[0175]創(chuàng)建至少兩個(gè)工作隊(duì)列,所述工作隊(duì)列的個(gè)數(shù)至少等于所述分類個(gè)數(shù)。[0176]A3、如A2所述的方法,所述創(chuàng)建至少兩個(gè)工作隊(duì)列包括:[0177]在系統(tǒng)啟動(dòng)時(shí)加載配置文件,通過所述配置文件設(shè)置并創(chuàng)建至少兩個(gè)工作隊(duì)列;所述配置文件中包括平均數(shù)據(jù)長度的分類與工作隊(duì)列的對(duì)應(yīng)關(guān)系。[0178]A4、如Al所述的方法,還包括:[0179]針對(duì)系統(tǒng)中的每個(gè)存儲(chǔ)表,獲取所述存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤后的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述存儲(chǔ)表在系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中。[0180]A5、如A4所述的方法,針對(duì)系統(tǒng)中的每個(gè)存儲(chǔ)表,獲取所述存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤后的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述存儲(chǔ)表在系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中,包括:[0181]在系統(tǒng)加載索引時(shí),根據(jù)索引中記錄的鍵的文件偏移和數(shù)據(jù)長度,計(jì)算現(xiàn)已存儲(chǔ)所述存儲(chǔ)表的用戶數(shù)據(jù)的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述數(shù)據(jù)結(jié)構(gòu);[0182]在每次將存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤時(shí),利用內(nèi)存表數(shù)據(jù)中新增的數(shù)據(jù)長度修正所述平均數(shù)據(jù)長度,并將修正后的平均數(shù)據(jù)長度更新至所述數(shù)據(jù)結(jié)構(gòu)中。[0183]A6、如A5所述的方法,將各存儲(chǔ)表按平均數(shù)據(jù)長度進(jìn)行分類包括:[0184]針對(duì)每一個(gè)存儲(chǔ)表,從所述系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中提取平均數(shù)據(jù)長度,根據(jù)所述平均數(shù)據(jù)長度對(duì)所述存儲(chǔ)表進(jìn)行分類。[0185]A7、如Al所述的方法,由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)包括:[0186]通過至少一個(gè)工作線程并行執(zhí)行所述工作隊(duì)列中的各個(gè)合并任務(wù)。[0187]A8、如A7所述的方法,通過至少一個(gè)工作線程執(zhí)行工作隊(duì)列中的各個(gè)合并任務(wù)后,還包括:[0188]當(dāng)一工作隊(duì)列中等待執(zhí)行的合并任務(wù)的數(shù)量大于閾值時(shí),自動(dòng)增加新的工作線程以并行執(zhí)行所述工作隊(duì)列中的合并任務(wù)。[0189]A9、如Al所述的方法,將各存儲(chǔ)表按平均數(shù)據(jù)長度進(jìn)行分類之前,還包括:[0190]針對(duì)每個(gè)存儲(chǔ)表生成一個(gè)合并任務(wù)。[0191]本發(fā)明還公開了B10、一種數(shù)據(jù)合并的裝置,包括:[0192]存儲(chǔ)表分類模塊,適于獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;[0193]任務(wù)提交模塊,適于將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;[0194]任務(wù)處理模塊,適于由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)。[0195]B11、如BlO所述的裝置,還包括:[0196]工作隊(duì)列創(chuàng)建模塊,適于創(chuàng)建至少兩個(gè)工作隊(duì)列,所述工作隊(duì)列的個(gè)數(shù)至少等于所述分類個(gè)數(shù)。[0197]B12、如Bll所述的裝置,所述工作隊(duì)列創(chuàng)建模塊包括:[0198]第一工作隊(duì)列加載模塊,適于在系統(tǒng)啟動(dòng)時(shí)加載配置文件,通過所述配置文件設(shè)置并創(chuàng)建至少兩個(gè)工作隊(duì)列;所述配置文件中包括平均數(shù)據(jù)長度的分類與工作隊(duì)列的對(duì)應(yīng)關(guān)系。[0199]B13、如BlO所述的裝置,還包括:[0200]數(shù)據(jù)長度統(tǒng)計(jì)模塊,適于針對(duì)系統(tǒng)中的每個(gè)存儲(chǔ)表,獲取所述存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤后的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述存儲(chǔ)表在系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中。[0201]B14、如B13所述的裝置,所述平均數(shù)據(jù)長度統(tǒng)計(jì)模塊,包括:[0202]第一數(shù)據(jù)長度計(jì)算模塊,適于在系統(tǒng)加載索引時(shí),根據(jù)索引中記錄的鍵的文件偏移和數(shù)據(jù)長度,計(jì)算現(xiàn)已存儲(chǔ)所述存儲(chǔ)表的用戶數(shù)據(jù)的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述數(shù)據(jù)結(jié)構(gòu);[0203]第二數(shù)據(jù)長度計(jì)算模塊,適于在每次將存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤時(shí),利用內(nèi)存表數(shù)據(jù)中新增的數(shù)據(jù)長度修正所述平均數(shù)據(jù)長度,并將修正后的平均數(shù)據(jù)長度更新至所述數(shù)據(jù)結(jié)構(gòu)中。[0204]B15、如B14所述的裝置,所述存儲(chǔ)表分類模塊包括:[0205]第一存儲(chǔ)表分類模塊,適于針對(duì)每一個(gè)存儲(chǔ)表,從所述系統(tǒng)內(nèi)存數(shù)據(jù)結(jié)構(gòu)中提取平均數(shù)據(jù)長度,根據(jù)所述平均數(shù)據(jù)長度對(duì)所述存儲(chǔ)表進(jìn)行分類。[0206]B16、如BlO所述的裝置,所述任務(wù)處理模塊還包括:[0207]第一任務(wù)處理模塊,適于通過至少一個(gè)工作線程并行執(zhí)行所述工作隊(duì)列中的各個(gè)合并任務(wù)。[0208]B17、如B16所述的裝置,在第一任務(wù)處理模塊之后,還包括:[0209]工作線程增加模塊,適于當(dāng)一工作隊(duì)列中等待執(zhí)行的合并任務(wù)的數(shù)量大于閾值時(shí),自動(dòng)增加新的工作線程以并行執(zhí)行所述工作隊(duì)列中的合并任務(wù)。[0210]B18、如BlO所述的裝置,在存儲(chǔ)表分類模塊之前,還包括:[0211]任務(wù)生成模塊,適于針對(duì)每個(gè)存儲(chǔ)表生成一個(gè)合并任務(wù)?!緳?quán)利要求】1.一種數(shù)據(jù)合并的方法,包括:獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)。2.如權(quán)利要求1所述的方法,其特征在于,還包括:創(chuàng)建至少兩個(gè)工作隊(duì)列,所述工作隊(duì)列的個(gè)數(shù)至少等于所述分類個(gè)數(shù)。3.如權(quán)利要求2所述的方法,其特征在于,所述創(chuàng)建至少兩個(gè)工作隊(duì)列包括:在系統(tǒng)啟動(dòng)時(shí)加載配置文件,通過所述配置文件設(shè)置并創(chuàng)建至少兩個(gè)工作隊(duì)列;所述配置文件中包括平均數(shù)據(jù)長度的分類與工作隊(duì)列的對(duì)應(yīng)關(guān)系。4.如權(quán)利要求1所述的方法,其特征在于,還包括:針對(duì)系統(tǒng)中的每個(gè)存儲(chǔ)表,獲取所述存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤后的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述存儲(chǔ)表在系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中。5.如權(quán)利要求4所述的方法,其特征在于,針對(duì)系統(tǒng)中的每個(gè)存儲(chǔ)表,獲取所述存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤后的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述存儲(chǔ)表在系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中,包括:在系統(tǒng)加載索引時(shí),根據(jù)索引中記錄的鍵的文件偏移和數(shù)據(jù)長度,計(jì)算現(xiàn)已存儲(chǔ)所述存儲(chǔ)表的用戶數(shù)據(jù)的平均數(shù)據(jù)長度,并將所述平均數(shù)據(jù)長度存入所述數(shù)據(jù)結(jié)構(gòu);在每次將存儲(chǔ)表的內(nèi)存表數(shù)據(jù)轉(zhuǎn)儲(chǔ)至磁盤時(shí),利用內(nèi)存表數(shù)據(jù)中新增的數(shù)據(jù)長度修正所述平均數(shù)據(jù)長度,并將修正后的平均數(shù)據(jù)長度更新至所述數(shù)據(jù)結(jié)構(gòu)中。6.如權(quán)利要求5所述的方法,其特征在于,將各存儲(chǔ)表按平均數(shù)據(jù)長度進(jìn)行分類包括:針對(duì)每一個(gè)存儲(chǔ)表,從所述系統(tǒng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中提取平均數(shù)據(jù)長度,根據(jù)所述平均數(shù)據(jù)長度對(duì)所述存儲(chǔ)表進(jìn)行分類。7.如權(quán)利要求1所述的方法,其特征在于,由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)包括:通過至少一個(gè)工作線程并行執(zhí)行所述工作隊(duì)列中的各個(gè)合并任務(wù)。8.如權(quán)利要求7所述的方法,其特征在于,通過至少一個(gè)工作線程執(zhí)行工作隊(duì)列中的各個(gè)合并任務(wù)后,還包括:當(dāng)一工作隊(duì)列中等待執(zhí)行的合并任務(wù)的數(shù)量大于閾值時(shí),自動(dòng)增加新的工作線程以并行執(zhí)行所述工作隊(duì)列中的合并任務(wù)。9.如權(quán)利要求1所述的方法,其特征在于,將各存儲(chǔ)表按平均數(shù)據(jù)長度進(jìn)行分類之前,還包括:針對(duì)每個(gè)存儲(chǔ)表生成一個(gè)合并任務(wù)。10.一種數(shù)據(jù)合并的裝置,包括:存儲(chǔ)表分類模塊,適于獲取每個(gè)存儲(chǔ)表的平均數(shù)據(jù)長度,并以所述平均數(shù)據(jù)長度對(duì)各個(gè)存儲(chǔ)表進(jìn)行分類;所述平均數(shù)據(jù)長度為存儲(chǔ)表中存儲(chǔ)的各用戶數(shù)據(jù)的平均數(shù)據(jù)長度;任務(wù)提交模塊,適于將同一分類的存儲(chǔ)表對(duì)應(yīng)的合并任務(wù)提交至負(fù)責(zé)所述分類的工作隊(duì)列中;任務(wù)處理模塊,適于由所述工作隊(duì)列的工作線程執(zhí)行所述合并任務(wù)?!疚臋n編號(hào)】G06F3/06GK104360824SQ201410645460【公開日】2015年2月18日申請(qǐng)日期:2014年11月10日優(yōu)先權(quán)日:2014年11月10日【發(fā)明者】王鋒申請(qǐng)人:北京奇虎科技有限公司,奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1