趙珊
摘要:伴隨著云計(jì)算、物聯(lián)網(wǎng)等新興技術(shù)的不斷發(fā)展,數(shù)據(jù)量呈現(xiàn)幾何式的增長(zhǎng),海量龐大的數(shù)據(jù)出現(xiàn)標(biāo)志著大數(shù)據(jù)時(shí)代的來(lái)臨。從海量的數(shù)據(jù)資源中提取有價(jià)值的信息并反饋給用戶是數(shù)據(jù)處理面臨的主要研究方向。本文主要探討Java這門經(jīng)典的編程語(yǔ)言在當(dāng)前的數(shù)據(jù)環(huán)境下,如何實(shí)現(xiàn)對(duì)大數(shù)據(jù)的加工及優(yōu)化處理,來(lái)實(shí)現(xiàn)數(shù)字資產(chǎn)的保值增值。
關(guān)鍵詞:Java 大數(shù)據(jù) 處理技術(shù)
中圖分類號(hào):TP315.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2016)09-0239-01
1 Java處理數(shù)據(jù)時(shí)的交互方式
大數(shù)據(jù)本身就是傳統(tǒng)意義上的數(shù)據(jù)的幾何級(jí)表現(xiàn)形式。大數(shù)據(jù)技術(shù)意義在于對(duì)這些有價(jià)值的數(shù)據(jù)進(jìn)行專業(yè)化處理,通過(guò)“加工”實(shí)現(xiàn)數(shù)據(jù)的“增值”。大數(shù)據(jù)處理的一個(gè)關(guān)鍵環(huán)節(jié)就是數(shù)據(jù)處理引擎如何與大數(shù)據(jù)有一個(gè)良好的連接通道。目前比較主流的數(shù)據(jù)處理引擎開(kāi)發(fā)語(yǔ)言有Java,C#,C++等。
Java作為主流開(kāi)發(fā)語(yǔ)言的連接數(shù)據(jù)庫(kù)方式采用JDBC,通過(guò)建立一個(gè)數(shù)據(jù)庫(kù)連接池以及一套連接使用、分配、管理策略,連接可以得到高效、安全的復(fù)用,避免了數(shù)據(jù)庫(kù)連接頻繁建立、關(guān)閉的開(kāi)銷。另外,由于對(duì)JDBC中的原始連接進(jìn)行了封裝,隔離了應(yīng)用本身的處理邏輯和具體數(shù)據(jù)庫(kù)訪問(wèn)邏輯,使應(yīng)用本身的復(fù)用成為可能,提高了開(kāi)發(fā)效率。
從傳統(tǒng)技術(shù)發(fā)展來(lái)看,一般新技術(shù)通常不會(huì)跨越太大。特別是軟件開(kāi)發(fā)技術(shù),為了不過(guò)度超前采用一種妥協(xié)的技術(shù)發(fā)展方式向下兼容。新技術(shù)大多是從傳統(tǒng)方式拓展延伸過(guò)來(lái),而不是跨越式的從新研發(fā)一套全新的技術(shù),大數(shù)據(jù)處理也遵循著這樣的一個(gè)原則。
2 大數(shù)據(jù)量下的內(nèi)存管理
JVM(Java Virtual Machine,Java虛擬機(jī))是Java的核心和基礎(chǔ),在Java編譯器和OS平臺(tái)之間的虛擬處理器。它是一種基于操作系統(tǒng)和硬件平臺(tái)并利用軟件方法來(lái)實(shí)現(xiàn)的抽象的計(jì)算機(jī),主要功能是管理分配內(nèi)存和執(zhí)行垃圾回收。JVM內(nèi)存結(jié)構(gòu)由堆、棧、本地方法棧、方法區(qū)等部分組成。
當(dāng)Java一次性從數(shù)據(jù)庫(kù)加載過(guò)多的數(shù)據(jù)時(shí),由于查詢結(jié)果的記錄首先要讀入JVM內(nèi)存,大量的數(shù)據(jù)占用了內(nèi)存空間,此時(shí)再為實(shí)例化對(duì)象申請(qǐng)空間時(shí),便出現(xiàn)內(nèi)存溢出的問(wèn)題,即使調(diào)整內(nèi)存大小,啟動(dòng)程序的時(shí)候加上-Xmx1024m,將JVM可以使用調(diào)至1G內(nèi)存,很多時(shí)候也不能滿足調(diào)用數(shù)據(jù)量的要求。
3 大數(shù)據(jù)量處理時(shí)的優(yōu)化方案
通過(guò)對(duì)JVM使用內(nèi)存的分析,結(jié)合數(shù)據(jù)調(diào)用處理的研究與實(shí)踐,得出的解決方案如下:
(1)客戶端讀取數(shù)據(jù)時(shí),不再一次性讀入JVM內(nèi)存中,采用分批查出所有數(shù)據(jù),每次查詢得到的部分記錄使用恒定內(nèi)存讀入的方法,避免內(nèi)存溢出問(wèn)題。
(2)將查詢出的數(shù)據(jù)在JVM內(nèi)存中經(jīng)過(guò)簡(jiǎn)單加工寫入查詢結(jié)果文件,對(duì)生成的記過(guò)文件進(jìn)行壓縮,目的是減小文件大小,節(jié)省帶寬,加快文件傳輸速度,然后按一定規(guī)則存入本地硬盤。
(3)獲取數(shù)據(jù)時(shí),通過(guò)批次讀取將壓縮文件直接發(fā)給客戶端,在客戶端解開(kāi)壓縮文件獲得查詢結(jié)果。
4 結(jié)語(yǔ)
本文通過(guò)Java語(yǔ)言數(shù)據(jù)處理時(shí)的原理分析,提出了大數(shù)據(jù)量數(shù)據(jù)加載的解決方案,實(shí)現(xiàn)了在不增加硬件開(kāi)銷的前提下,由于數(shù)據(jù)量大導(dǎo)致的內(nèi)存溢出問(wèn)題,保證了數(shù)據(jù)查詢時(shí)系統(tǒng)的高效與穩(wěn)定性。
參考文獻(xiàn)
[1]宋東海,賁可榮,張志祥,等.一種基于類的JAVA多線程程序數(shù)據(jù)競(jìng)爭(zhēng)靜態(tài)檢測(cè)算法[J].《計(jì)算機(jī)工程與科學(xué)》,2014.02.
數(shù)字技術(shù)與應(yīng)用2016年9期