關於cachedrowset在實際專案中的應用

2021-07-27 22:42:19 字數 1170 閱讀 9516

由於專案需求原因,需要實現乙個功能就是,抽取大量的資料庫資料然後寫入文字並打包上傳。看似乙個很簡單的東西,在大資料量的環境下就顯得不是那麼簡單了。首先有60張左右的表需要進行資料的處理。各個公司情況不同,表的總資料量可能是幾千萬到幾十億不等。所以,耗時非常嚴重。

由於只是單純的進行資料的提取加工寫入文字打包等操作,不涉及表與表之間的業務邏輯。那麼,大家下意識的的想到的就是多執行緒了。同樣,我們也是用多執行緒進行第一步的資料處理。在這第一步就遇到了乙個小坑,沒有用執行緒池進行處理。並且業務邏輯方面也要做到主線程在等待所有子執行緒處理完畢之後在進行處理。執行緒有個方法就是join()方法,單純的以為將所有的執行緒的join()方法連到一起就可以做到主線程等待所有子執行緒處理完畢之後再進行處理。巴特,還是太年輕在測試的時候就發現,這種方法做不到我們要求的效果。在經過查詢蒐集資料之後發現executorservice pool=executors.newfixedthreadpool(threadnumber);乙個固定執行緒池數量的執行緒池可以實現我們的要求。//關閉執行緒池

pool.shutdown();

try

catch (interruptedexception e)

將表之間進行拆分之後,第二步就是將每張表的資料進行查詢並進行處理之後再寫入檔案。但是單張表的資料也太大了,開始我們迴圈rs.next();。將沒次查詢到的資料寫入txt並記錄資料的大小,重而拆分寫多個不同的檔案。但是這個還是太慢了,因為所有的資料處理都是序列的太慢了。

隨後我們又做了,將所有資料封裝了乙個list並將返回的list拆分成十個小list寫成多執行緒的方式進行處理,巴特,還是太年輕了。多執行緒中開多執行緒,導致程式中有幾百個程序在跑,並且將記憶體中的放入了幾十億的資料。很抱歉,在某家公司進行測試的時候,64g的記憶體處理一般就記憶體溢位了……。所以該方案也不行。

接下來,我們就在想有沒有更高效的方法,不必將每張表的所以資料都複製進內存在進行處理。而是將按多少條進行查詢處理。乙個是手工分頁查詢進行處理。乙個是加序列進行處理。還有就是cachedrowset的方法。

cachedrowset

通過這次問題的分析以及初步解決。感覺自己知道的東西還是有限。無論是自己的眼界和見解都還沒用達到乙個程式設計師應有的水平,對於不常用的東西還是知識儲備不足。哦對了,cachedrowset的statement要是可滾動的。歡迎各位可以有更好的方案,同時也隨便告訴下我這個無知的萌新。

關於CheckStyle在eclipse出現的問題

今天在公司換了乙個checkstyle xml檔案。那麼我嘗試直接import進去新的檔案。在我check code的時候就爆了下面的錯誤 o failed during checkstyle configuration property fileextensions in module check...

關於 delphi中with在Python中的討論

下面這段是我昨天在python乙個討論群裡對delphi中with在python中的討論,希望能對大家有所啟發,同時我也將這個討論記錄下來,有時間多體會體會。不要小看這段,最後 seewind 說的話很經典。江南 23 46 27 其實 我覺得是想找 python中類似 delphi 的 with ...

關於elasticsearch在系統架構中的位置

最近由於專案的原因,開始接觸到es。在使用和學習的過程中,不斷的產生著各種疑問讓我略顯迷茫。所以開始撰寫這篇部落格來記錄和推進自己對elasticsearch的學習。就現在而言,題目可能起的有點過於大。對於還並不算合格的程式設計師的我來說,談架構還為時尚早。但我希望在這篇文章終結的時候,自己能夠成長...