第一篇:磁測(cè)資料數(shù)據(jù)處理解釋小結(jié)
磁測(cè)資料處理方法:
1、收集磁性資料,并對(duì)野外整理后的數(shù)據(jù)進(jìn)行檢查、消除畸變點(diǎn)、網(wǎng)格化等預(yù)處理工作。
2、實(shí)測(cè)△T異常是斜磁化條件下的總場(chǎng)異常,它與磁性體的實(shí)際位置有偏移。必須將斜磁化條件下的磁異常換算為垂直磁化條件下的磁異常,即進(jìn)行磁異常的化極處理。
3、磁異常的延拓可以劃分不同深度的磁場(chǎng)區(qū),幫助判斷磁性體的延伸。因此,必須對(duì)磁異常做向上延拓100米、200米、300米、500米、1000米、2000米計(jì)算。
4、磁異常的方向求導(dǎo)能夠壓制區(qū)域背景、突出局部異常、分離疊加磁性體、確定磁性體邊界等。資料處理中必須根據(jù)解釋需要對(duì)磁異常進(jìn)行0°、45°、90°、135°及垂直方向求導(dǎo)計(jì)算。
5、資料的處理還應(yīng)根據(jù)提取和解釋異常的需要組合使用延拓、求導(dǎo)、分離、圓滑、各種濾波、趨勢(shì)分析、多次切割等方法的計(jì)算。
6、通過(guò)數(shù)據(jù)的處理,分離工作區(qū)縱、橫向迭加的變化磁異常△T,提取出目標(biāo)磁性體的信息,并結(jié)合地質(zhì)、化探、巖石磁性統(tǒng)計(jì)資料進(jìn)行綜合分析。
磁異常解釋?zhuān)?/p>
1、定性解釋可采用從已知到未知的類(lèi)比法、模型對(duì)比法及統(tǒng)計(jì)解釋法等,通過(guò)實(shí)測(cè)物性、地質(zhì)及其它物探資料的綜合解釋減少多解性。定性解釋既要用未經(jīng)過(guò)處理的基礎(chǔ)圖件,也要用經(jīng)過(guò)處理后的圖件,達(dá)到全面分析所有信息的目的。
2、定性解釋一般從磁場(chǎng)的分區(qū)入手,將工作區(qū)的磁場(chǎng)置于更大范圍場(chǎng)的背景中加以研究,并與鄰區(qū)對(duì)比,按照磁場(chǎng)特征進(jìn)行巖性分區(qū)和構(gòu)造分區(qū)研究。
(1)巖性分區(qū)研究應(yīng)根據(jù)工作區(qū)主要巖性磁性測(cè)定統(tǒng)計(jì)結(jié)果與實(shí)測(cè)磁異常的分析,對(duì)磁性差異較明顯的巖性,確定其對(duì)應(yīng)的磁場(chǎng)強(qiáng)度變化范圍,進(jìn)行磁場(chǎng)強(qiáng)度劃分研究,尤其是劃分火山巖分布區(qū)。
(2)構(gòu)造分區(qū)研究應(yīng)根據(jù)不同磁場(chǎng)區(qū)與構(gòu)造區(qū)的特征對(duì)比,研究磁場(chǎng)與構(gòu)造區(qū)的對(duì)應(yīng)關(guān)系,探索劃分成礦帶的展布特征。
3、局部高磁異常解釋工作一般先從強(qiáng)度大的、形態(tài)簡(jiǎn)單、干擾小的或有巖石露頭的異常入手,異常劃分原則可參照以下三點(diǎn):(1)異常下限按超過(guò)誤差2.5倍即13nT視為可信弱磁異常的下限;(2)2條以上測(cè)線有顯示,沿測(cè)線方向有3個(gè)點(diǎn)高于背景場(chǎng);(3)形成明顯的局部磁力高圈閉。
4、磁異常斷裂構(gòu)造劃分可參照以下三點(diǎn):
(1)呈線性展布的串珠狀高磁異常帶。此類(lèi)高磁異常帶可能是沿?cái)嗔亚秩氲膸r體或磁鐵礦化引起,可做為劃分?jǐn)嗔训囊豁?xiàng)依據(jù)。
(2)線性展布的窄脈形低磁異常帶。此類(lèi)低磁異常帶可能由于斷裂破碎帶造成帶內(nèi)巖石磁性降低形成,可做為劃分?jǐn)嗔训囊豁?xiàng)依據(jù)。
(3)不同異常強(qiáng)度的磁場(chǎng)區(qū)分界處。斷裂構(gòu)造形成的上下盤(pán)錯(cuò)動(dòng)以及兩側(cè)巖性明顯差異可以在磁場(chǎng)上形成不同異常強(qiáng)度的磁場(chǎng)區(qū),因此,場(chǎng)區(qū)分界處可做為劃分?jǐn)嗔训囊豁?xiàng)依據(jù)。
5、異常編錄按照由北向南、從西向東的原則對(duì)局部高磁異常進(jìn)行編號(hào),然后在異常登記表中填寫(xiě)異常長(zhǎng)度、寬度、走向、極大值、形態(tài)、有無(wú)伴生負(fù)磁異常及其坐標(biāo)等資料。
6、必須對(duì)優(yōu)選的局部磁異常進(jìn)行磁性體進(jìn)行定量-半定量計(jì)算。定量計(jì)算時(shí)要盡可能用實(shí)測(cè)的物性參數(shù)、已有工程控制的地下地質(zhì)情況及其它物探工作的結(jié)果,作為先驗(yàn)控制信息,并選用最可能的目標(biāo)物的形態(tài)、產(chǎn)狀、物性參數(shù)作為初始模型和控制條件,以減少定量反演的多解性和不可靠性。
7、不具備嚴(yán)格的定量反演條件或只需粗略估計(jì)時(shí),對(duì)規(guī)模較大(上頂寬大于上頂埋深)的地質(zhì)體邊界可以根據(jù)垂直地質(zhì)體的總梯度的極值、水平一階導(dǎo)數(shù)極值或垂向一階導(dǎo)數(shù)、二階導(dǎo)數(shù)零值線大致確定。對(duì)接觸面的傾斜方向可根據(jù)水平一階導(dǎo)數(shù)曲線的不對(duì)稱(chēng)性、垂向一階導(dǎo)數(shù)正負(fù)極值之比或延拓不同高度的水平一階導(dǎo)數(shù)極值的位移(極值向傾斜方向位移)等標(biāo)志加以粗略判斷。
8、應(yīng)根據(jù)定性和定量解釋、平面和剖面的解釋結(jié)果,按照地質(zhì)學(xué)的基本原理編制各類(lèi)推斷成果圖件,對(duì)推斷成果圖件上磁測(cè)工作解釋出的地質(zhì)體、地質(zhì)現(xiàn)象要進(jìn)行地質(zhì)解釋和推斷,闡明它們相互間的關(guān)系及與已知地質(zhì)情況的關(guān)系等。若原有地質(zhì)觀點(diǎn)無(wú)法合理解釋物探推斷時(shí),在深入研究綜合資料后,可按照物探推斷結(jié)果做出新的地質(zhì)解釋。9、1∶5萬(wàn)地面高精度磁測(cè)成果需提供直接找礦信息和間接找礦信息,并進(jìn)行找礦靶區(qū)優(yōu)選。
(1)直接找礦信息的基本原則可參照以下二點(diǎn):
a、強(qiáng)度大于5000nT的高磁異區(qū)可直接作為尋找磁鐵礦體的可靠靶區(qū)。b、強(qiáng)度在2000—5000nT之間的高磁異常,經(jīng)調(diào)查研究排除基性—超基性巖、矽卡巖等干擾因素后,也可作為尋找磁鐵礦體靶區(qū)。
(2)間接找礦信息的基本原則可參照以下二點(diǎn):
a、利用磁異常圈出中基性—超基性侵入巖體,劃分出巖體的邊界,結(jié)合化探異常及地質(zhì)填圖優(yōu)選出可能與中基性—超基性侵入巖體有關(guān)的貴金屬、有色、多金屬綜合成礦信息作為找礦目標(biāo)區(qū)。
b、利用磁異常劃分的斷裂構(gòu)造,結(jié)合地質(zhì)、化探資料,選擇斷裂交匯部位和巖性有利區(qū)內(nèi)的弱磁異常進(jìn)行踏勘檢查,綜合地質(zhì)、化探檢查結(jié)果劃分找礦靶區(qū)。
第二篇:地面高精度磁測(cè)小結(jié)(范文)
地面高精度磁測(cè)小結(jié)
一、任務(wù)完成情況
我單位立人員于2009年4月27日抵達(dá)雅干測(cè)區(qū),并且著手開(kāi)始野外生產(chǎn)工作,野外掃面工作于2009年6月中旬基本結(jié)束,6月中旬至7月中旬開(kāi)始測(cè)量標(biāo)本,9月份以后開(kāi)始收集資料,進(jìn)行室內(nèi)整理。
高精度磁測(cè)共完成勘探面積1321.28 km2,設(shè)計(jì)面積為1400 km2,因?yàn)闇y(cè)區(qū)緊鄰中蒙邊界,所以導(dǎo)致邊界地區(qū)無(wú)法進(jìn)行實(shí)地勘測(cè);其中扎尼烏蘇幅90.38 km、好來(lái)公幅383.48 km、阿拉格烏拉幅349 km、雅干幅329.78 km、呼和毛日特烏拉幅168.64 km2。實(shí)測(cè)物理點(diǎn)24604個(gè),檢查點(diǎn)751個(gè),檢查率3.1%。采集物性標(biāo)本1500塊。
222
二、質(zhì)量評(píng)述
1.使用捷克產(chǎn)PMG-1型高精度質(zhì)子磁力儀性能穩(wěn)定,一致性測(cè)試精度為1.8559nT。噪聲2503號(hào)儀器0.36nT、2504號(hào)儀器0.31nT、2505號(hào)0.42nT、2512號(hào)儀器0.29 nT、8061號(hào)儀器0.20 nT、8062號(hào)儀器0.15 nT、8063號(hào)儀器0.20 nT。
2.基點(diǎn)聯(lián)測(cè):經(jīng)長(zhǎng)時(shí)間連續(xù)觀測(cè)和十字剖面觀測(cè),認(rèn)為基點(diǎn)選擇合理,磁場(chǎng)變化穩(wěn)定,連續(xù)觀測(cè)地磁場(chǎng)平均值變化小于2nT,周?chē)鷽](méi)有干擾。
3.野外測(cè)點(diǎn)觀測(cè)采用GPS定點(diǎn),每個(gè)測(cè)點(diǎn)插筷子并有紅色標(biāo)記,每1km定有木樁并注記,注記清晰,定位準(zhǔn)確,定位坐標(biāo)GPS自動(dòng)記錄,并記錄路線軌跡。
4.高精度磁測(cè)觀測(cè)逐點(diǎn)進(jìn)行,并起閉于校正點(diǎn),儀器自動(dòng)記錄數(shù)據(jù),室內(nèi)回放計(jì)算機(jī)進(jìn)行資料整理,記錄精度高、準(zhǔn)確、無(wú)人為誤差,資料整理符合《規(guī)范》要求。
5.質(zhì)量檢查隨工作進(jìn)度逐步開(kāi)展,質(zhì)量檢查率3.1%,精度達(dá)±2.2nT,滿(mǎn)足《規(guī)范》要求。
三、高精度磁測(cè)成果
本次地質(zhì)礦產(chǎn)調(diào)查地面高精度磁測(cè)的成果研究主要是建立在等值線圖和延拓圖件的基礎(chǔ)上的,用原始數(shù)據(jù)編制的等值線圖,除白堊系及二疊系覆蓋較厚,異常形態(tài)較為簡(jiǎn)單,大部分地區(qū)異常形態(tài)比較雜亂,給異常的劃分工作帶來(lái)了困難。因此,將測(cè)區(qū)的數(shù)據(jù)進(jìn)行了化極延拓處理,異常的圈定是在化極延拓100米后進(jìn)行的。
1、地面高精度磁測(cè)異常概述
共圈定異常12處,下面將分別論述:
C1異常:位于扎尼烏蘇幅,東西走向,長(zhǎng)約2.7公里,寬約1公里,△T在200nT左右,北側(cè)異常梯度變化大,南側(cè)異常變化緩慢,是該處東西向串珠狀異常幅值較高、形態(tài)較為規(guī)整的一處,也是次級(jí)斷裂F1穿過(guò)的位置。同時(shí),此處還應(yīng)存在南北向的小斷裂,東西向、南北向構(gòu)造交錯(cuò)穿插在中奧陶系地層中,是良好的導(dǎo)礦容礦構(gòu)造?;疆惓R苍摌?gòu)造帶也有分布。
C2異常:位于好來(lái)公幅道爾根嘎順西北約3公里處,北東走向,長(zhǎng)約5公里,寬約0.8公里,處在平靜的負(fù)磁背景異常中,多個(gè)正異常中心延北東方向展布,異常北西側(cè)梯度大,南東側(cè)梯度緩,判斷該磁性體為板狀體,傾向南東,產(chǎn)狀較陡。異常形態(tài)和出露的華立西晚期中粒石英閃長(zhǎng)巖和中?;◢忛W長(zhǎng)巖基本吻合,其中石英閃長(zhǎng)巖磁化率(K)和剩磁(Jr)都較弱,中?;◢忛W長(zhǎng)巖除個(gè)別磁化率和剩磁較高外,大部分巖石磁化率和剩磁都比較低,因此引起的磁異常也比較弱,但是在異常中有幅值在400nT以上的磁異常出現(xiàn),所以需要重點(diǎn)查明。
根據(jù)望湖山銅鎳礦的勘探結(jié)果,見(jiàn)礦位置基本為低緩的弱磁異常。C3異常:位于好來(lái)公幅中部,哈爾敖包附近,異常近似圓形,位于平靜的正磁異常中,異常幅值大于600nT。主要出露的巖性為華立西晚期中粒石英閃長(zhǎng)巖和中細(xì)粒閃長(zhǎng)巖,該異常也很好的反映了兩種巖體的界限。中細(xì)粒閃長(zhǎng)巖磁化率和剩磁都較高,因此該磁異常與閃長(zhǎng)巖有關(guān)。在該異常區(qū)附近多種金屬元素組合較好,因此在該地區(qū)應(yīng)注意尋找多金屬元素。
C4異常:位于好來(lái)公幅好來(lái)公高勒南1公里左右,異常呈橢圓形,近東西走向,幅值在大于300nT,南側(cè)梯度略陡大。異常出露在上二迭系與上白堊系地層的接觸帶上。砷、銀、鋅等元素組合較好。
C5異常:位于好來(lái)公幅薩特奧爾布格東約2公里處,整個(gè)異常與C3、C4異常同在一個(gè)異常帶上,近似圓形,由三個(gè)小的異常組成,為弱磁異常,出露巖性主要為上白堊系泥質(zhì)粉砂巖、泥巖及粉砂巖。C6、C7、C10異常位于近北西向的異常帶上,該異常帶規(guī)模較大,地質(zhì)活動(dòng)較為頻繁,同時(shí)也導(dǎo)致了該地區(qū)磁異常的復(fù)雜性。
C6異常:位于阿拉格烏拉幅東北部,經(jīng)過(guò)化極延拓后異常形態(tài)較為規(guī)則,東西走向,近似長(zhǎng)方形,東西長(zhǎng)約1.7公里,南北寬約1公里,異常幅值在200nT以上,出露巖性主要為中粒花崗閃長(zhǎng)巖,并且有輝綠玢巖脈和閃長(zhǎng)巖脈侵入。該異常應(yīng)為巖體引起的異常。
C7異常:該異常位于阿拉格烏拉幅與雅干幅的交界處,異常呈圓形,直徑約2公里,異常幅值在800nT以上,北側(cè)被負(fù)異常包圍,南側(cè)被正異常包圍,南側(cè)比北側(cè)的梯度變化較大。該磁性體為球體,埋深較淺。出露巖性為中?;◢忛W長(zhǎng)巖。但是中粒花崗閃長(zhǎng)巖不會(huì)產(chǎn)生這么大的磁性,因此該磁性體性質(zhì)有待查明。
該處鉛、銀、鎳、金的組合較好。
C8異常:位于雅干幅,伊和洪古爾吉烏拉南約3公里,異常呈條帶狀,東西延伸約5公里,南北最寬處約1公里,最窄處約0.5公里,異常出露于上泥盆系火上巖與下白堊系沉積巖的接觸帶上,該異常由凝灰?guī)r引起的可能性較大。鋅、銅、砷等元素組合較好。
C9異常:該異常主要位于雅干幅東北部,沿北西向呈條帶狀展布,由于該異常又由4個(gè)不同幅值的異常組成,因此又將該異常4個(gè)小的異常,異常最大值在900nT以上,為同一性質(zhì)的異常。該異常南北兩側(cè)梯度變化都比較大,推測(cè)該異常附近存在斷層,成礦部位較好。銅、鎳異常組合較好。
C10異常:該異常是本次礦調(diào)中異常規(guī)模最大、形態(tài)最復(fù)雜的一處異常,分為5個(gè)小的異常,都位于近東西向的異常帶上。
C10-1異常規(guī)模較小,近似橢圓形,該處出露巖性主要為橄欖輝長(zhǎng)巖,多種成礦元素在該處組合都較好。C10-2異常有兩個(gè)異常中心,近似南北走向,異常區(qū)出露中粒斜長(zhǎng)花崗巖和橄欖輝長(zhǎng)巖。其中橄欖輝長(zhǎng)巖的磁化率和剩磁都比較高。C10-3和C10-4異常為同一性質(zhì)的異常,都出露在斜長(zhǎng)花崗巖中,異常幅值在500nT以上,但是斜長(zhǎng)花崗巖為弱磁,在該異常南部有銅鐵礦化點(diǎn),因此,異常性質(zhì)需近一步查明。C10-5異常在近東西向異常帶的最東部,位于巴潤(rùn)海爾汗附近,磁測(cè)△T平均在300nT以上,出露巖性主要為花崗閃長(zhǎng)巖。
C11異常:該異常位于阿拉格烏拉幅南部,異常向南延伸沒(méi)有封閉,北東走向,位于平靜的正異常背景中。西側(cè)為負(fù)異常,梯度變化較大,異常有向東傾的趨勢(shì),該異常出露在上二迭系的火山巖中,并且該異常西部存在斷裂構(gòu)造。砷、鉬元素組合較好。
C12異常:該異常與C11異常處在同一個(gè)異常帶上,異常向南延伸沒(méi)有封閉,異常延北東方向展布,近橢圓形,出露在上二迭系的火山巖中,為巖體引起的異常。在該異常中,砷異常較好。
2、推斷斷裂的概述
本次磁測(cè)初步推斷斷裂18處,其中雅干深大斷裂是本區(qū)的主要斷裂。從圈定的異常圖上可以看出,幾乎所有磁測(cè)異常都產(chǎn)生在斷裂帶附近,斷裂帶是本區(qū)的主要控礦構(gòu)造。同時(shí),在推斷的斷裂帶附近,化探異常都有明顯的反映,斷裂帶不僅為熱液上升提供了通道,還為化學(xué)元素的運(yùn)移起到了良好的作用,在斷裂交錯(cuò)部位則是良好的成礦部位。
第三篇:火龍果軟件-海量數(shù)據(jù)處理小結(jié)
火龍果?整理 uml.org.cn
海量的數(shù)據(jù)處理問(wèn)題,對(duì)其進(jìn)行處理是一項(xiàng)艱巨而復(fù)雜的任務(wù)。原因有以下幾個(gè)方面:
一、數(shù)據(jù)量過(guò)大,數(shù)據(jù)中什么情況都可能存在。如果說(shuō)有10條數(shù)據(jù),那么大不了每條去逐一檢查,人為處理,如果有上百條數(shù)據(jù),也可以考慮,如果數(shù)據(jù)上到千萬(wàn)級(jí)別,甚至過(guò)億,那不是手工能解決的了,必須通過(guò)工具或者程序進(jìn)行處理,尤其海量的數(shù)據(jù)中,什么情況都可能存在,例如,數(shù)據(jù)中某處格式出了問(wèn)題,尤其在程序處理時(shí),前面還能正常處理,突然到了某個(gè)地方問(wèn)題出現(xiàn)了,程序終止了。
二、軟硬件要求高,系統(tǒng)資源占用率高。對(duì)海量的數(shù)據(jù)進(jìn)行處理,除了好的方法,最重要的就是合理使用工具,合理分配系統(tǒng)資源。一般情況,如果處理的數(shù)據(jù)過(guò)TB級(jí),小型機(jī)是要考慮的,普通的機(jī)子如果有好的方法可以考慮,不過(guò)也必須加大CPU和內(nèi)存,就象面對(duì)著千軍萬(wàn)馬,光有勇氣沒(méi)有一兵一卒是很難取勝的。
三、要求很高的處理方法和技巧。這也是本文的寫(xiě)作目的所在,好的處理方法是一位工程師長(zhǎng)期工作經(jīng)驗(yàn)的積累,也是個(gè)人的經(jīng)驗(yàn)的總結(jié)。沒(méi)有通用的處理方法,但有通用的原理和規(guī)則。那么處理海量數(shù)據(jù)有哪些經(jīng)驗(yàn)和技巧呢,我把我所知道的羅列一下,以供大家參考:
一、選用優(yōu)秀的數(shù)據(jù)庫(kù)工具現(xiàn)在的數(shù)據(jù)庫(kù)工具廠家比較多,對(duì)海量數(shù)據(jù)的處理對(duì)所使用的數(shù)據(jù)庫(kù)工具要求比較高,一般使用Oracle或者DB2,微軟公司最近發(fā)布的SQL Server 2005性能也不錯(cuò)。另外在BI領(lǐng)域:數(shù)據(jù)庫(kù),數(shù)據(jù)倉(cāng)庫(kù),多維數(shù)據(jù)庫(kù),數(shù)據(jù)挖掘等相關(guān)工具也要進(jìn)行選擇,象好的ETL工具和好的OLAP工具都十分必要,例如Informatic,Eassbase等。筆者在實(shí)際數(shù)據(jù)分析項(xiàng)目中,對(duì)每天6000萬(wàn)條的日志數(shù)據(jù)進(jìn)行處理,使用SQL Server 2000需要花費(fèi)6小時(shí),而使用SQL Server 2005則只需要花費(fèi)3小時(shí)。
二、編寫(xiě)優(yōu)良的程序代碼處理數(shù)據(jù)離不開(kāi)優(yōu)秀的程序代碼,尤其在進(jìn)行復(fù)雜數(shù)據(jù)處理時(shí),必須使用程序。好的程序代碼對(duì)數(shù)據(jù)的處理至關(guān)重要,這不僅僅是數(shù)據(jù)處理準(zhǔn)確度的問(wèn)題,更是數(shù)據(jù)處理效率的問(wèn)題。良好的程序代碼應(yīng)該包含好的算法,包含好的處理流程,包含好的效率,包含好的異常處理機(jī)制等。
三、對(duì)海量數(shù)據(jù)進(jìn)行分區(qū)操作對(duì)海量數(shù)據(jù)進(jìn)行分區(qū)操作十分必要,例如針對(duì)按年份存取的數(shù)據(jù),我們可以按年進(jìn)行分區(qū),不同的數(shù)據(jù)庫(kù)有不同的分區(qū)方式,不過(guò)處理機(jī)制大體相同。例如SQL Server的數(shù)據(jù)庫(kù)分區(qū)是將不同的數(shù)據(jù)存于不同的文件組下,而不同的文件組存于不同的磁盤(pán)分區(qū)下,這樣將數(shù)據(jù)分散開(kāi),減小磁盤(pán)I/O,減小了系統(tǒng)負(fù)荷,而且還可以將日志,索引等放于不同的分區(qū)下。
四、建立廣泛的索引對(duì)海量的數(shù)據(jù)處理,對(duì)大表建立索引是必行的,建立索引要考慮到具體情況,例如針對(duì)大表的分組、排序等字段,都要建立相應(yīng)索引,一般還可以建立復(fù)合索引,對(duì)經(jīng)常插入的表則建立索引時(shí)要小心,筆者在處理數(shù)據(jù)時(shí),曾經(jīng)在一個(gè)ETL流程中,當(dāng)插入表時(shí),首先刪除索引,然后插入完畢,建立索引,并實(shí)施聚合操作,聚合完成后,再次插入前還是刪除索引,所以索引要用到好的時(shí)機(jī),索引的填充因子和聚集、非聚集索引都要考慮。
五、建立緩存機(jī)制當(dāng)數(shù)據(jù)量增加時(shí),一般的處理工具都要考慮到緩存問(wèn)題。緩存大小設(shè)置的好差也關(guān)系到數(shù)據(jù)處理的成敗,例如,筆者在處理2億條數(shù)據(jù)聚合操作時(shí),緩存設(shè)置為100000條/Buffer,這對(duì)于這個(gè)級(jí)別的數(shù)據(jù)量是可行的。
六、加大虛擬內(nèi)存如果系統(tǒng)資源有限,內(nèi)存提示不足,則可以靠增加虛擬內(nèi)存來(lái)解決。筆者在實(shí)際項(xiàng)目中曾經(jīng)遇到針對(duì)18億條的數(shù)據(jù)進(jìn)行處理,內(nèi)存為1GB,1個(gè)P4 2.4G的CPU,對(duì)這么大的數(shù)據(jù)量進(jìn)行聚合操作是有問(wèn)題的,提示內(nèi)存不足,那么采用了加大虛擬內(nèi)存的方法來(lái)解決,在6塊磁盤(pán)分區(qū)上分別建立了6個(gè)4096M的磁盤(pán)分區(qū),用于虛擬內(nèi)存,這樣虛擬的內(nèi)存則增加為 4096*6 + 1024 = 25600 M,解決了數(shù)據(jù)處理中的內(nèi)存不足問(wèn)題。
七、分批處理 海量數(shù)據(jù)處理難因?yàn)閿?shù)據(jù)量大,那么解決海量數(shù)據(jù)處理難的問(wèn)題其中一個(gè)技巧是減少數(shù)據(jù)量??梢詫?duì)海量數(shù)據(jù)分批處理,然后處理后的數(shù)據(jù)再進(jìn)行合并操作,這樣逐個(gè)擊破,有利于小數(shù)據(jù)量的處理,不至于面對(duì)大數(shù)據(jù)量帶來(lái)的問(wèn)題,不過(guò)這種方法也要因時(shí)因勢(shì)進(jìn)行,如果不允許拆分?jǐn)?shù)據(jù),還需要另想辦法。不過(guò)一般的數(shù)據(jù)按天、按月、按年等存儲(chǔ)的,都可以采用先分后合的方法,對(duì)數(shù)據(jù)進(jìn)行分開(kāi)處理。
八、使用臨時(shí)表和中間表數(shù)據(jù)量增加時(shí),處理中要考慮提前匯總。這樣做的目的是化整為零,大表變小表,分塊處理完成后,再利用一定的規(guī)則進(jìn)行合并,處理過(guò)程中的臨時(shí)表的使用和中間結(jié)果的保存都非常重要,如果對(duì)于超海量的數(shù)據(jù),大表處理不了,只能拆分為多個(gè)小表。如果處理過(guò)程中需要多步匯總操作,可按
火龍果?整理 uml.org.cn
匯總步驟一步步來(lái),不要一條語(yǔ)句完成,一口氣吃掉一個(gè)胖子。
九、優(yōu)化查詢(xún)SQL語(yǔ)句在對(duì)海量數(shù)據(jù)進(jìn)行查詢(xún)處理過(guò)程中,查詢(xún)的SQL語(yǔ)句的性能對(duì)查詢(xún)效率的影響是非常大的,編寫(xiě)高效優(yōu)良的SQL腳本和存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)工作人員的職責(zé),也是檢驗(yàn)數(shù)據(jù)庫(kù)工作人員水平的一個(gè)標(biāo)準(zhǔn),在對(duì)SQL語(yǔ)句的編寫(xiě)過(guò)程中,例如減少關(guān)聯(lián),少用或不用游標(biāo),設(shè)計(jì)好高效的數(shù)據(jù)庫(kù)表結(jié)構(gòu)等都十分必要。筆者在工作中試著對(duì)1億行的數(shù)據(jù)使用游標(biāo),運(yùn)行3個(gè)小時(shí)沒(méi)有出結(jié)果,這是一定要改用程序處理了。
十、使用文本格式進(jìn)行處理對(duì)一般的數(shù)據(jù)處理可以使用數(shù)據(jù)庫(kù),如果對(duì)復(fù)雜的數(shù)據(jù)處理,必須借助程序,那么在程序操作數(shù)據(jù)庫(kù)和程序操作文本之間選擇,是一定要選擇程序操作文本的,原因?yàn)椋撼绦虿僮魑谋舅俣瓤?;?duì)文本進(jìn)行處理不容易出錯(cuò);文本的存儲(chǔ)不受限制等。例如一般的海量的網(wǎng)絡(luò)日志都是文本格式或者csv格式(文本格式),對(duì)它進(jìn)行處理牽扯到數(shù)據(jù)清洗,是要利用程序進(jìn)行處理的,而不建議導(dǎo)入數(shù)據(jù)庫(kù)再做清洗。
十一、定制強(qiáng)大的清洗規(guī)則和出錯(cuò)處理機(jī)制海量數(shù)據(jù)中存在著不一致性,極有可能出現(xiàn)某處的瑕疵。例如,同樣的數(shù)據(jù)中的時(shí)間字段,有的可能為非標(biāo)準(zhǔn)的時(shí)間,出現(xiàn)的原因可能為應(yīng)用程序的錯(cuò)誤,系統(tǒng)的錯(cuò)誤等,這是在進(jìn)行數(shù)據(jù)處理時(shí),必須制定強(qiáng)大的數(shù)據(jù)清洗規(guī)則和出錯(cuò)處理機(jī)制。
十二、建立視圖或者物化視圖視圖中的數(shù)據(jù)來(lái)源于基表,對(duì)海量數(shù)據(jù)的處理,可以將數(shù)據(jù)按一定的規(guī)則分散到各個(gè)基表中,查詢(xún)或處理過(guò)程中可以基于視圖進(jìn)行,這樣分散了磁盤(pán)I/O,正如10根繩子吊著一根柱子和一根吊著一根柱子的區(qū)別。
十三、避免使用32位機(jī)子(極端情況)目前的計(jì)算機(jī)很多都是32位的,那么編寫(xiě)的程序?qū)?nèi)存的需要便受限制,而很多的海量數(shù)據(jù)處理是必須大量消耗內(nèi)存的,這便要求更好性能的機(jī)子,其中對(duì)位數(shù)的限制也十分重要。
十四、考慮操作系統(tǒng)問(wèn)題海量數(shù)據(jù)處理過(guò)程中,除了對(duì)數(shù)據(jù)庫(kù),處理程序等要求比較高以外,對(duì)操作系統(tǒng)的要求也放到了重要的位置,一般是必須使用服務(wù)器的,而且對(duì)系統(tǒng)的安全性和穩(wěn)定性等要求也比較高。尤其對(duì)操作系統(tǒng)自身的緩存機(jī)制,臨時(shí)空間的處理等問(wèn)題都需要綜合考慮。
十五、使用數(shù)據(jù)倉(cāng)庫(kù)和多維數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)量加大是一定要考慮OLAP的,傳統(tǒng)的報(bào)表可能5、6個(gè)小時(shí)出來(lái)結(jié)果,而基于Cube的查詢(xún)可能只需要幾分鐘,因此處理海量數(shù)據(jù)的利器是OLAP多維分析,即建立數(shù)據(jù)倉(cāng)庫(kù),建立多維數(shù)據(jù)集,基于多維數(shù)據(jù)集進(jìn)行報(bào)表展現(xiàn)和數(shù)據(jù)挖掘等。
十六、使用采樣數(shù)據(jù),進(jìn)行數(shù)據(jù)挖掘基于海量數(shù)據(jù)的數(shù)據(jù)挖掘正在逐步興起,面對(duì)著超海量的數(shù)據(jù),一般的挖掘軟件或算法往往采用數(shù)據(jù)抽樣的方式進(jìn)行處理,這樣的誤差不會(huì)很高,大大提高了處理效率和處理的成功率。一般采樣時(shí)要注意數(shù)據(jù)的完整性和,防止過(guò)大的偏差。筆者曾經(jīng)對(duì)1億2千萬(wàn)行的表數(shù)據(jù)進(jìn)行采樣,抽取出400萬(wàn)行,經(jīng)測(cè)試軟件測(cè)試處理的誤差為千分之五,客戶(hù)可以接受。還有一些方法,需要在不同的情況和場(chǎng)合下運(yùn)用,例如使用代理鍵等操作,這樣的好處是加快了聚合時(shí)間,因?yàn)閷?duì)數(shù)值型的聚合比對(duì)字符型的聚合快得多。類(lèi)似的情況需要針對(duì)不同的需求進(jìn)行處理。海量數(shù)據(jù)是發(fā)展趨勢(shì),對(duì)數(shù)據(jù)分析和挖掘也越來(lái)越重要,從海量數(shù)據(jù)中提取有用信息重要而緊迫,這便要求處理要準(zhǔn)確,精度要高,而且處理時(shí)間要短,得到有價(jià)值信息要快,所以,對(duì)海量數(shù)據(jù)的研究很有前途,也很值得進(jìn)行廣泛深入的研究。
一般來(lái)說(shuō)第7種方案是最常用的,有的主要就是使用第7種方案,選擇的余地也非常的大,不只是俺月,日,年,也可以按周等等劃分,靈活性較高
而面對(duì)大量數(shù)據(jù)的處理一般都是分批次處理,之前我做一個(gè)文本分類(lèi)器,面對(duì)1g多的索引(索引1g多,但是分類(lèi)時(shí)需要的數(shù)據(jù)就大得多了),40-50分鐘就可以跑完所有分類(lèi):
一是分批操作。
二是給jvm回收內(nèi)存的時(shí)間,比如每次20w的數(shù)據(jù)進(jìn)行分類(lèi),完成之后睡眠一段時(shí)間,每睡眠一端時(shí)間就手動(dòng)gc一次。
火龍果?整理 uml.org.cn
通過(guò)這些方式取得了很明顯得見(jiàn)效。
海量數(shù)據(jù)處理專(zhuān)題
(一)大數(shù)據(jù)量的問(wèn)題是很多面試筆試中經(jīng)常出現(xiàn)的問(wèn)題,比如baidu google 騰訊 這樣的一些涉及到海量數(shù)據(jù)的公司經(jīng)常會(huì)問(wèn)到。
下面的方法是我對(duì)海量數(shù)據(jù)的處理方法進(jìn)行了一個(gè)一般性的總結(jié),當(dāng)然這些方法可能并不能完全覆蓋所有的問(wèn)題,但是這樣的一些方法也基本可以處理絕大多數(shù)遇到的問(wèn)題。下面的一些問(wèn)題基本直接來(lái)源于公司的面試筆試題目,方法不一定最優(yōu),如果你有更好的處理方法,歡迎與我討論。
本貼從解決這類(lèi)問(wèn)題的方法入手,開(kāi)辟一系列專(zhuān)題來(lái)解決海量數(shù)據(jù)問(wèn)題。擬包含 以下幾個(gè)方面。
1.Bloom Filter 2.Hash 3.Bit-Map 4.堆(Heap)5.雙層桶劃分 6.數(shù)據(jù)庫(kù)索引
7.倒排索引(Inverted Index)8.外排序 9.Trie樹(shù) 10.MapReduce
在這些解決方案之上,再借助一定的例子來(lái)剖析海量數(shù)據(jù)處理問(wèn)題的解決方案。歡迎大家關(guān)注。
海量數(shù)據(jù)處理專(zhuān)題
(二)【什么是Bloom Filter】
Bloom Filter是一種空間效率很高的隨機(jī)數(shù)據(jù)結(jié)構(gòu),它利用位數(shù)組很簡(jiǎn)潔地表示一個(gè)集合,并能判斷一個(gè)元素是否屬于這個(gè)集合。Bloom Filter的這種高效是有一定代價(jià)的:在判斷一個(gè)元素是否屬于某個(gè)集合時(shí),有可能會(huì)把不屬于這個(gè)集合的元素誤認(rèn)為屬于這個(gè)集合(false positive)。因此,Bloom Filter不適合那些“零錯(cuò)誤”的應(yīng)用場(chǎng)合。而在能容忍低錯(cuò)誤率的應(yīng)用場(chǎng)合下,Bloom Filter通過(guò)極少的錯(cuò)誤換取了存儲(chǔ)空間的極大節(jié)省。這里有一篇關(guān)于Bloom Filter的詳細(xì)介紹,不太懂的博友可以看看。
【適用范圍】
可以用來(lái)實(shí)現(xiàn)數(shù)據(jù)字典,進(jìn)行數(shù)據(jù)的判重,或者集合求交集
【基本原理及要點(diǎn)】
火龍果?整理 uml.org.cn
對(duì)于原理來(lái)說(shuō)很簡(jiǎn)單,位數(shù)組+k個(gè)獨(dú)立hash函數(shù)。將hash函數(shù)對(duì)應(yīng)的值的位數(shù)組置1,查找時(shí)如果發(fā)現(xiàn)所有hash函數(shù)對(duì)應(yīng)位都是1說(shuō)明存在,很明顯這 個(gè)過(guò)程并不保證查找的結(jié)果是100%正確的。同時(shí)也不支持刪除一個(gè)已經(jīng)插入的關(guān)鍵字,因?yàn)樵撽P(guān)鍵字對(duì)應(yīng)的位會(huì)牽動(dòng)到其他的關(guān)鍵字。所以一個(gè)簡(jiǎn)單的改進(jìn)就是 counting Bloom filter,用一個(gè)counter數(shù)組代替位數(shù)組,就可以支持刪除了。
還有一個(gè)比較重要的問(wèn)題,如 何根據(jù)輸入元素個(gè)數(shù)n,確定位數(shù)組m的大小及hash函數(shù)個(gè)數(shù)。當(dāng)hash函數(shù)個(gè)數(shù)k=(ln2)*(m/n)時(shí)錯(cuò)誤率最小。在錯(cuò)誤率不大于E的情況 下,m至少要等于n*lg(1/E)才能表示任意n個(gè)元素的集合。但m還應(yīng)該更大些,因?yàn)檫€要保證bit數(shù)組里至少一半為0,則m應(yīng) 該>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2為底的對(duì)數(shù))。
舉個(gè)例子我們假設(shè)錯(cuò)誤率為0.01,則此時(shí)m應(yīng)大概是n的13倍。這樣k大概是8個(gè)。
注意這里m與n的單位不同,m是bit為單位,而n則是以元素個(gè)數(shù)為單位(準(zhǔn)確的說(shuō)是不同元素的個(gè)數(shù))。通常單個(gè)元素的長(zhǎng)度都是有很多bit的。所以使用bloom filter內(nèi)存上通常都是節(jié)省的。
【擴(kuò)展】
Bloom filter將集合中的元素映射到位數(shù)組中,用k(k為哈希函數(shù)個(gè)數(shù))個(gè)映射位是否全1表示元素在不在這個(gè)集合中。Counting bloom filter(CBF)將位數(shù)組中的每一位擴(kuò)展為一個(gè)counter,從而支持了元素的刪除操作。Spectral Bloom Filter(SBF)將其與集合元素的出現(xiàn)次數(shù)關(guān)聯(lián)。SBF采用counter中的最小值來(lái)近似表示元素的出現(xiàn)頻率。
【問(wèn)題實(shí)例】
給你A,B兩個(gè)文件,各存放50億條URL,每條URL占用64字節(jié),內(nèi)存限制是4G,讓你找出A,B文件共同的URL。如果是三個(gè)乃至n個(gè)文件呢?
根據(jù)這個(gè)問(wèn)題我們來(lái)計(jì)算下內(nèi)存的占用,4G=2^32大概是40億*8大概是340億,n=50億,如果按出錯(cuò)率0.01算需要的大概是650億個(gè) bit?,F(xiàn)在可用的是340億,相差并不多,這樣可能會(huì)使出錯(cuò)率上升些。另外如果這些urlip是一一對(duì)應(yīng)的,就可以轉(zhuǎn)換成ip,則大大簡(jiǎn)單了。
海量數(shù)據(jù)處理專(zhuān)題
(三)什么是Hash
Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射,pre-image),通過(guò)散列算法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,而不可能從散列值來(lái)唯一的確定輸入值。簡(jiǎn)單的說(shuō)就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。
火龍果?整理 uml.org.cn
HASH主要用于信息安全領(lǐng)域中加密算法,它把一些不同長(zhǎng)度的信息轉(zhuǎn)化成雜亂的128位的編碼,這些編碼值叫做HASH值.也可以說(shuō),hash就是找到一種數(shù)據(jù)內(nèi)容和數(shù)據(jù)存放地址之間的映射關(guān)系。數(shù)組的特點(diǎn)是:尋址容易,插入和刪除困難;而鏈表的特點(diǎn)是:尋址困難,插入和刪除容易。那么我們能不能綜合兩者的特性,做出一種尋址容易,插入刪除也容易的數(shù)據(jù)結(jié)構(gòu)?答案是肯定的,這就是我們要提起的哈希表,哈希表有多種不同的實(shí)現(xiàn)方法,我接下來(lái)解釋的是最常用的一種方法——拉鏈法,我們可以理解為“鏈表的數(shù)組”,如圖:
左邊很明顯是個(gè)數(shù)組,數(shù)組的每個(gè)成員包括一個(gè)指針,指向一個(gè)鏈表的頭,當(dāng)然這個(gè)鏈表可能為空,也可能元素很多。我們根據(jù)元素的一些特征把元素分配到不同的鏈表中去,也是根據(jù)這些特征,找到正確的鏈表,再?gòu)逆湵碇姓页鲞@個(gè)元素。
元素特征轉(zhuǎn)變?yōu)閿?shù)組下標(biāo)的方法就是散列法。散列法當(dāng)然不止一種,下面列出三種比較常用的。1,除法散列法
最直觀的一種,上圖使用的就是這種散列法,公式:
index = value % 16
學(xué)過(guò)匯編的都知道,求模數(shù)其實(shí)是通過(guò)一個(gè)除法運(yùn)算得到的,所以叫“除法散列法”。
2,平方散列法
求index是非常頻繁的操作,而乘法的運(yùn)算要比除法來(lái)得省時(shí)(對(duì)現(xiàn)在的CPU來(lái)說(shuō),估計(jì)我們感覺(jué)不出
火龍果?整理 uml.org.cn
來(lái)),所以我們考慮把除法換成乘法和一個(gè)位移操作。公式:
index =(value * value)>> 28
如果數(shù)值分配比較均勻的話這種方法能得到不錯(cuò)的結(jié)果,但我上面畫(huà)的那個(gè)圖的各個(gè)元素的值算出來(lái)的index都是0——非常失敗。也許你還有個(gè)問(wèn)題,value如果很大,value * value不會(huì)溢出嗎?答案是會(huì)的,但我們這個(gè)乘法不關(guān)心溢出,因?yàn)槲覀兏静皇菫榱双@取相乘結(jié)果,而是為了獲取index。
3,斐波那契(Fibonacci)散列法
平方散列法的缺點(diǎn)是顯而易見(jiàn)的,所以我們能不能找出一個(gè)理想的乘數(shù),而不是拿value本身當(dāng)作乘數(shù)呢?答案是肯定的。
1,對(duì)于16位整數(shù)而言,這個(gè)乘數(shù)是40503 2,對(duì)于32位整數(shù)而言,這個(gè)乘數(shù)是2654435769
3,對(duì)于64位整數(shù)而言,這個(gè)乘數(shù)是***98485
這幾個(gè)“理想乘數(shù)”是如何得出來(lái)的呢?這跟一個(gè)法則有關(guān),叫黃金分割法則,而描述黃金分割法則的最經(jīng)典表達(dá)式無(wú)疑就是著名的斐波那契數(shù)列,如果你還有興趣,就到網(wǎng)上查找一下“斐波那契數(shù)列”等關(guān)鍵字,我數(shù)學(xué)水平有限,不知道怎么描述清楚為什么,另外斐波那契數(shù)列的值居然和太陽(yáng)系八大行星的軌道半徑的比例出奇吻合,很神奇,對(duì)么?
對(duì)我們常見(jiàn)的32位整數(shù)而言,公式:
i ndex =(value * 2654435769)>> 28
如果用這種斐波那契散列法的話,那我上面的圖就變成這樣了:
很明顯,用斐波那契散列法調(diào)整之后要比原來(lái)的取摸散列法好很多。
火龍果?整理 uml.org.cn
【適用范圍】
快速查找,刪除的基本數(shù)據(jù)結(jié)構(gòu),通常需要總數(shù)據(jù)量可以放入內(nèi)存?!净驹砑耙c(diǎn)】
hash函數(shù)選擇,針對(duì)字符串,整數(shù),排列,具體相應(yīng)的hash方法。
碰撞處理,一種是open hashing,也稱(chēng)為拉鏈法;另一種就是closed hashing,也稱(chēng)開(kāi)地址法,opened addressing。
【擴(kuò)展】
d-left hashing中的d是多個(gè)的意思,我們先簡(jiǎn)化這個(gè)問(wèn)題,看一看2-left hashing。2-left hashing指的是將一個(gè)哈希表分成長(zhǎng)度相等的兩半,分別叫做T1和T2,給T1和T2分別配備一個(gè)哈希函數(shù),h1和h2。在存儲(chǔ)一個(gè)新的key時(shí),同 時(shí)用兩個(gè)哈希函數(shù)進(jìn)行計(jì)算,得出兩個(gè)地址h1[key]和h2[key]。這時(shí)需要檢查T(mén)1中的h1[key]位置和T2中的h2[key]位置,哪一個(gè) 位置已經(jīng)存儲(chǔ)的(有碰撞的)key比較多,然后將新key存儲(chǔ)在負(fù)載少的位置。如果兩邊一樣多,比如兩個(gè)位置都為空或者都存儲(chǔ)了一個(gè)key,就把新key 存儲(chǔ)在左邊的T1子表中,2-left也由此而來(lái)。在查找一個(gè)key時(shí),必須進(jìn)行兩次hash,同時(shí)查找兩個(gè)位置。
【問(wèn)題實(shí)例】
1).海量日志數(shù)據(jù),提取出某日訪問(wèn)百度次數(shù)最多的那個(gè)IP。
IP的數(shù)目還是有限的,最多2^32個(gè),所以可以考慮使用hash將ip直接存入內(nèi)存,然后進(jìn)行統(tǒng)計(jì)。
海量數(shù)據(jù)處理專(zhuān)題
(四)【什么是Bit-map】
所謂的Bit-map就是用一個(gè)bit位來(lái)標(biāo)記某個(gè)元素對(duì)應(yīng)的Value,而Key即是該元素。由于采用了Bit為單位來(lái)存儲(chǔ)數(shù)據(jù),因此在存儲(chǔ)空間方面,可以大大節(jié)省。
如果說(shuō)了這么多還沒(méi)明白什么是Bit-map,那么我們來(lái)看一個(gè)具體的例子,假設(shè)我們要對(duì)0-7內(nèi)的5個(gè)元素(4,7,2,5,3)排序(這里假設(shè)這些元素沒(méi)有重復(fù))。那么我們就可以采用Bit-map的方法來(lái)達(dá)到排序的目的。要表示8個(gè)數(shù),我們就只需要8個(gè)Bit(1Bytes),首先我們開(kāi)辟1Byte 的空間,將這些空間的所有Bit位都置為0(如下圖:)
火龍果?整理 uml.org.cn
然后遍歷這5個(gè)元素,首先第一個(gè)元素是4,那么就把4對(duì)應(yīng)的位置為1(可以這樣操作 p+(i/8)|(0x01<<(i%8))當(dāng)然了這里的操作涉及到Big-ending和Little-ending的情況,這里默認(rèn)為Big-ending),因?yàn)槭菑牧汩_(kāi)始的,所以要把第五位置為一(如下圖):
然后再處理第二個(gè)元素7,將第八位置為1,,接著再處理第三個(gè)元素,一直到最后處理完所有的元素,將相應(yīng)的位置為1,這時(shí)候的內(nèi)存的Bit位的狀態(tài)如下:
然后我們現(xiàn)在遍歷一遍Bit區(qū)域,將該位是一的位的編號(hào)輸出(2,3,4,5,7),這樣就達(dá)到了排序的目的。下面的代碼給出了一個(gè)BitMap的用法:排序。//定義每個(gè)Byte中有8個(gè)Bit位 #include <memory.h> #define BYTESIZE 8 void SetBit(char *p, int posi){
}
void BitMapSortDemo(){
//BufferLen這個(gè)值是根據(jù)待排序的數(shù)據(jù)中最大值確定的 //待排序中的最大值是14,因此只需要2個(gè)Bytes(16個(gè)Bit)//為了簡(jiǎn)單起見(jiàn),我們不考慮負(fù)數(shù) int num[] = {3,5,2,10,6,12,8,14,9};*p = *p|(0x01<<(posi%BYTESIZE));//將該Bit位賦值1 return;for(int i=0;i <(posi/BYTESIZE);i++){ } p++;
火龍果?整理 uml.org.cn
} //就可以了。
const int BufferLen = 2;char *pBuffer = new char[BufferLen];//要將所有的Bit位置為0,否則結(jié)果不可預(yù)知。memset(pBuffer,0,BufferLen);for(int i=0;i<9;i++){
} //首先將相應(yīng)Bit位上置為1 SetBit(pBuffer,num[i]);//輸出排序結(jié)果
for(int i=0;i<BufferLen;i++)//每次處理一個(gè)字節(jié)(Byte){
} for(int j=0;j<BYTESIZE;j++)//處理該字節(jié)中的每個(gè)Bit位 {
} pBuffer++;
//判斷該位上是否是1,進(jìn)行輸出,這里的判斷比較笨。//首先得到該第j位的掩碼(0x01<<j),將內(nèi)存區(qū)中的 //位和此掩碼作與操作。最后判斷掩碼是否和處理后的 //結(jié)果相同
if((*pBuffer&(0x01<<j))==(0x01<<j)){ }
printf(“%d ”,i*BYTESIZE + j);int _tmain(int argc, _TCHAR* argv[]){
} 【適用范圍】 BitMapSortDemo();return 0;
火龍果?整理 uml.org.cn
可進(jìn)行數(shù)據(jù)的快速查找,判重,刪除,一般來(lái)說(shuō)數(shù)據(jù)范圍是int的10倍以下 【基本原理及要點(diǎn)】
使用bit數(shù)組來(lái)表示某些元素是否存在,比如8位電話號(hào)碼 【擴(kuò)展】
Bloom filter可以看做是對(duì)bit-map的擴(kuò)展 【問(wèn)題實(shí)例】
1)已知某個(gè)文件內(nèi)包含一些電話號(hào)碼,每個(gè)號(hào)碼為8位數(shù)字,統(tǒng)計(jì)不同號(hào)碼的個(gè)數(shù)。
8位最多99 999 999,大概需要99m個(gè)bit,大概10幾m字節(jié)的內(nèi)存即可。(可以理解為從0-99 999 999的數(shù)字,每個(gè)數(shù)字對(duì)應(yīng)一個(gè)Bit位,所以只需要99M個(gè)Bit==1.2MBytes,這樣,就用了小小的1.2M左右的內(nèi)存表示了所有的8位數(shù)的電話)
2)2.5億個(gè)整數(shù)中找出不重復(fù)的整數(shù)的個(gè)數(shù),內(nèi)存空間不足以容納這2.5億個(gè)整數(shù)。
將bit-map擴(kuò)展一下,用2bit表示一個(gè)數(shù)即可,0表示未出現(xiàn),1表示出現(xiàn)一次,2表示出現(xiàn)2次及以上,在遍歷這些數(shù)的時(shí)候,如果對(duì)應(yīng)位置的值是0,則將其置為1;如果是1,將其置為2;如果是2,則保持不變?;蛘呶覀儾挥?bit來(lái)進(jìn)行表示,我們用兩個(gè)bit-map即可模擬實(shí)現(xiàn)這個(gè) 2bit-map,都是一樣的道理。
海量數(shù)據(jù)處理專(zhuān)題
(五)【什么是堆】
概念:堆是一種特殊的二叉樹(shù),具備以下兩種性質(zhì)
1)每個(gè)節(jié)點(diǎn)的值都大于(或者都小于,稱(chēng)為最小堆)其子節(jié)點(diǎn)的值
2)樹(shù)是完全平衡的,并且最后一層的樹(shù)葉都在最左邊
這樣就定義了一個(gè)最大堆。如下圖用一個(gè)數(shù)組來(lái)表示堆:
火龍果?整理 uml.org.cn
那么下面介紹二叉堆:二叉堆是一種完全二叉樹(shù),其任意子樹(shù)的左右節(jié)點(diǎn)(如果有的話)的鍵值一定比根節(jié)點(diǎn)大,上圖其實(shí)就是一個(gè)二叉堆。
你一定發(fā)覺(jué)了,最小的一個(gè)元素就是數(shù)組第一個(gè)元素,那么二叉堆這種有序隊(duì)列如何入隊(duì)呢?看圖:
火龍果?整理 uml.org.cn
假設(shè)要在這個(gè)二叉堆里入隊(duì)一個(gè)單元,鍵值為2,那只需在數(shù)組末尾加入這個(gè)元素,然后盡可能把這個(gè)元素往上挪,直到挪不動(dòng),經(jīng)過(guò)了這種復(fù)雜度為Ο(logn)的操作,二叉堆還是二叉堆。
那如何出隊(duì)呢?也不難,看圖:
火龍果?整理 uml.org.cn
出隊(duì)一定是出數(shù)組的第一個(gè)元素,這么來(lái)第一個(gè)元素以前的位置就成了空位,我們需要把這個(gè)空位挪至葉子節(jié)點(diǎn),然后把數(shù)組最后一個(gè)元素插入這個(gè)空位,把這個(gè)“空位”盡量往上挪。這種操作的復(fù)雜度也是Ο(logn)。
【適用范圍】
海量數(shù)據(jù)前n大,并且n比較小,堆可以放入內(nèi)存
【基本原理及要點(diǎn)】
最大堆求前n小,最小堆求前n大。方法,比如求前n小,我們比較當(dāng)前元素與最大堆里的最大元素,如果它小于最大元素,則應(yīng)該替換那個(gè)最大元 素。這樣最后得到的n個(gè)元素就是最小的n個(gè)。適合大數(shù)據(jù)量,求前n小,n的大小比較小的情況,這樣可以掃描一遍即可得到所有的前n元素,效率很高。
【擴(kuò)展】
雙堆,一個(gè)最大堆與一個(gè)最小堆結(jié)合,可以用來(lái)維護(hù)中位數(shù)。
【問(wèn)題實(shí)例】
1)100w個(gè)數(shù)中找最大的前100個(gè)數(shù)。
用一個(gè)100個(gè)元素大小的最小堆即可。
海量數(shù)據(jù)處理專(zhuān)題
(六)火龍果?整理 uml.org.cn
【什么是雙層桶】
事實(shí)上,與其說(shuō)雙層桶劃分是一種數(shù)據(jù)結(jié)構(gòu),不如說(shuō)它是一種算法設(shè)計(jì)思想。面對(duì)一堆大量的數(shù)據(jù)我們無(wú)法處理的時(shí)候,我們可以將其分成一個(gè)個(gè)小的單元,然后根據(jù)一定的策略來(lái)處理這些小單元,從而達(dá)到目的。
【適用范圍】
第k大,中位數(shù),不重復(fù)或重復(fù)的數(shù)字
【基本原理及要點(diǎn)】
因?yàn)樵胤秶艽螅荒芾弥苯訉ぶ繁?,所以通過(guò)多次劃分,逐步確定范圍,然后最后在一個(gè)可以接受的范圍內(nèi)進(jìn)行??梢酝ㄟ^(guò)多次縮小,雙層只是一個(gè)例子,分治才是其根本(只是“只分不治”)。
【擴(kuò)展】
當(dāng)有時(shí)候需要用一個(gè)小范圍的數(shù)據(jù)來(lái)構(gòu)造一個(gè)大數(shù)據(jù),也是可以利用這種思想,相比之下不同的,只是其中的逆過(guò)程。
【問(wèn)題實(shí)例】
1).2.5億個(gè)整數(shù)中找出不重復(fù)的整數(shù)的個(gè)數(shù),內(nèi)存空間不足以容納這2.5億個(gè)整數(shù)。
有點(diǎn)像鴿巢原理,整數(shù)個(gè)數(shù)為2^32,也就是,我們可以將這2^32個(gè)數(shù),劃分為2^8個(gè)區(qū)域(比如用單個(gè)文件代表一個(gè)區(qū)域),然后將數(shù)據(jù)分離到不同的區(qū)域,然后不同的區(qū)域在利用bitmap就可以直接解決了。也就是說(shuō)只要有足夠的磁盤(pán)空間,就可以很方便的解決。當(dāng)然這個(gè)題也可以用我們前面講過(guò)的BitMap方法解決,正所謂條條大道通羅馬~~~ 2).5億個(gè)int找它們的中位數(shù)。
這個(gè)例子比上面那個(gè)更明顯。首先我們將int劃分為2^16個(gè)區(qū)域,然后讀取數(shù)據(jù)統(tǒng)計(jì)落到各個(gè)區(qū)域里的數(shù)的個(gè)數(shù),之后我們根據(jù)統(tǒng)計(jì)結(jié)果就可以判斷中位數(shù)落到那個(gè)區(qū)域,同時(shí)知道這個(gè)區(qū)域中的第幾大數(shù)剛好是中位數(shù)。然后第二次掃描我們只統(tǒng)計(jì)落在這個(gè)區(qū)域中的那些數(shù)就可以了。
實(shí)際上,如果不是int是int64,我們可以經(jīng)過(guò)3次這樣的劃分即可降低到可以接受的程度。即可以先將int64分成2^24個(gè)區(qū)域,然后確定區(qū)域的第幾 大數(shù),在將該區(qū)域分成2^20個(gè)子區(qū)域,然后確定是子區(qū)域的第幾大數(shù),然后子區(qū)域里的數(shù)的個(gè)數(shù)只有2^20,就可以直接利用direct addr table進(jìn)行統(tǒng)計(jì)了。
3).現(xiàn)在有一個(gè)0-30000的隨機(jī)數(shù)生成器。請(qǐng)根據(jù)這個(gè)隨機(jī)數(shù)生成器,設(shè)計(jì)一個(gè)抽獎(jiǎng)范圍是0-350000彩票中獎(jiǎng)號(hào)碼列表,其中要包含20000個(gè)中獎(jiǎng)號(hào)碼。
這個(gè)題剛好和上面兩個(gè)思想相反,一個(gè)0到3萬(wàn)的隨機(jī)數(shù)生成器要生成一個(gè)0到35萬(wàn)的隨機(jī)數(shù)。那么我們完全可以將0-35萬(wàn)的區(qū)間分成35/3=12個(gè)區(qū)間,然后每個(gè)區(qū)間的長(zhǎng)度都小于等于3萬(wàn),這樣我們就可以用題目給的隨機(jī)數(shù)生成器來(lái)生成了,然后再加上該區(qū)間的基數(shù)。那么要每個(gè)區(qū)間生成多少個(gè)隨機(jī)數(shù)呢?計(jì)算公式就是:區(qū)間長(zhǎng)度*隨機(jī)數(shù)密度,在本題目中就是30000*(20000/350000)。最后要注意一點(diǎn),該題目是有隱含條件的:彩票,這意味著你生成的隨機(jī)數(shù)里面不能有重復(fù),這也是我為什么用雙層桶劃分思想的另外一個(gè)原因。
第四篇:磁粉探傷小結(jié)
工件磁粉探傷:
原理,當(dāng)工件被磁化后,如果
表面或近表面存在裂紋、冷隔等缺陷,表面或近表面存在裂紋、冷隔等缺陷,便會(huì)在 該處形成一漏磁場(chǎng)。施加磁粉后,該處形成一漏磁場(chǎng)。施加磁粉后,漏磁場(chǎng)將吸 引磁粉,而形成缺陷顯示。引磁粉,而形成缺陷顯示。
磁粉檢測(cè)首先是對(duì)工件加外磁場(chǎng)進(jìn)行磁化,外加磁場(chǎng)的獲得一般有兩種方法,外加磁場(chǎng)的獲得一般有兩種方法,一種是直接 給被檢工件通電流產(chǎn)生磁場(chǎng),另一種是把工件放在螺旋管線圈磁場(chǎng)中,或是放在電磁鐵產(chǎn)生 的磁場(chǎng)中使工件磁化。工件被磁化后,在工件表面上均勻噴灑微顆粒的磁粉(磁粉平均粒度為 磁粉平均粒度為5~ 粒的磁粉 磁粉平均粒度為 ~10μm),一般用,四氧化三鐵或三氧化二鐵作為磁粉。四氧化三鐵或三氧化二鐵作為磁粉。
若工件沒(méi)有缺陷則磁粉在表面均勻分布。如果 存在缺陷,由于缺陷(如裂紋、氣孔、非金屬夾 雜物等)內(nèi)含有空氣或非金屬 內(nèi)含有空氣或非金屬,雜物等 內(nèi)含有空氣或非金屬,其磁導(dǎo)率遠(yuǎn)小于 工件,導(dǎo)致磁阻變化,工件表面或近表面缺陷 處產(chǎn)生漏磁場(chǎng),形成小磁極,處產(chǎn)生漏磁場(chǎng),形成小磁極。磁粉將被小磁極所吸引,磁粉將被小磁極所吸引,缺陷處由于堆積較 多的磁粉而被顯示出來(lái),多的磁粉而被顯示出來(lái),形成肉眼可以看到的缺陷圖象。磁粉檢測(cè)中能否發(fā)現(xiàn)缺陷,首先決定于工件 缺陷處漏磁場(chǎng)強(qiáng)度是否足夠大。要提高磁粉檢 測(cè)靈敏度,就必須提高漏磁場(chǎng)的強(qiáng)度。缺陷處漏磁場(chǎng)強(qiáng)度主要與被檢工件中的磁感 應(yīng)強(qiáng)度B有關(guān) 工件中磁感應(yīng)強(qiáng)度越大,工件中磁感應(yīng)強(qiáng)度越大,則缺陷 處的漏磁場(chǎng)強(qiáng)度越大。
第五篇:磁測(cè)成果報(bào)告首扉頁(yè)格式、字體
地球物理勘查成果報(bào)告,是全部?jī)?nèi)、外業(yè)工作及地質(zhì)成果的集中反映,做好每項(xiàng)工作,才能保證總體工作的質(zhì)量。下面是磁測(cè)報(bào)告首頁(yè)扉頁(yè)的格式及選用字體,提供給大家參考。
××省地質(zhì)礦產(chǎn)勘查項(xiàng)目成果報(bào)告——楷體加粗四號(hào)
××省××縣××礦區(qū)(礦)地面高精度磁測(cè)成果報(bào)告——黑體加粗小一號(hào)
∟仿宋加粗三號(hào)
承擔(dān)單位:×××地質(zhì)勘查公司
二0一一年九月——仿宋常規(guī)小三號(hào)
××省××縣××礦區(qū)(礦)地面高
精度磁測(cè)成果報(bào)告——宋體加粗二號(hào)
項(xiàng)目負(fù)責(zé)人: 編寫(xiě)人: 單位負(fù)責(zé)人: 總工程師:提交單位:提交時(shí)間:實(shí)施單位:
××××××××× ××××××地質(zhì)勘查公司 二0一一年九月 ××地質(zhì)勘查公司
∟仿宋常規(guī)四號(hào)