本發(fā)明涉及一種導(dǎo)入與存數(shù)據(jù)庫并反饋到前端的方法,具體為一種web端導(dǎo)入excel與存數(shù)據(jù)庫并反饋到前端的方法,屬于數(shù)據(jù)處理方法應(yīng)用技術(shù)領(lǐng)域。
背景技術(shù):
web端導(dǎo)入excel,無論web開發(fā)架構(gòu)是net、java、php,都可以實現(xiàn)客戶端瀏覽excel文件,并上傳到服務(wù)器,服務(wù)器經(jīng)過業(yè)務(wù)邏輯處理,寫入到數(shù)據(jù)庫(oracle、sqlserver、mysql),然后給用戶一個反饋。但是如果excel文件內(nèi)容較多,寫入數(shù)據(jù)庫非常的慢,客戶需要等待幾分鐘、幾十分鐘甚至更長時間來等待處理結(jié)果,現(xiàn)有技術(shù)無法解決這一問題。
現(xiàn)有的解決方案對小文件的處理是可以滿足要求的,但是對于大文件,主要瓶頸在導(dǎo)入數(shù)據(jù)庫的操作上。一般web程序通過接口連接數(shù)據(jù)庫,需要先打開數(shù)據(jù)庫,執(zhí)行寫入操作,然后關(guān)閉數(shù)據(jù)庫,數(shù)據(jù)量大,數(shù)據(jù)庫寫入非常慢,寫數(shù)據(jù)庫成為主要瓶頸,傳統(tǒng)技術(shù)始終為單向模式,即:請求->上傳->處理->寫庫->反饋結(jié)果,必須等待上一環(huán)節(jié)處理完成后,才能進入到下一環(huán)節(jié),對于大文件的寫數(shù)據(jù)庫是一個非常耗時的操作,無法在短時間內(nèi)容響應(yīng)用戶操作,因此,針對上述問題提出一種web端導(dǎo)入excel與存數(shù)據(jù)庫并反饋到前端的方法。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的就在于為了解決上述問題而提供一種web端導(dǎo)入excel與存數(shù)據(jù)庫并反饋到前端的方法。
本發(fā)明通過以下技術(shù)方案來實現(xiàn)上述目的,一種web端導(dǎo)入excel與存數(shù)據(jù)庫并反饋到前端的方法,其方法包括如下步驟:
步驟a、客戶端選擇大文件上傳;
步驟b、服務(wù)端獲取到步驟a上傳的大文件后讀入內(nèi)存,通過在后臺打開一個獨立的線程處理文件導(dǎo)入的問題,在打開獨立線程的同時,給客戶反饋一個結(jié)果,告訴用戶,后臺已經(jīng)處理了上傳的數(shù)據(jù);
步驟c、獨立線程將步驟a上傳的文件導(dǎo)入到數(shù)據(jù)庫;
步驟d、當數(shù)據(jù)沒有完全導(dǎo)入到數(shù)據(jù)庫,遇到用戶查詢時,將導(dǎo)入的結(jié)果放入服務(wù)端一個容器中,前端請求查詢時,同時查詢數(shù)據(jù)庫以及內(nèi)存數(shù)據(jù)庫,合并后返給前端;
步驟e、等獨立線程處理完導(dǎo)入操作后,清空內(nèi)存數(shù)據(jù)庫。
優(yōu)選的,所述步驟b中,獨立線程沒處理完時,而前端客戶已經(jīng)進行其他操作,不必等待全部寫完數(shù)據(jù)庫。
優(yōu)選的,步驟c中快速導(dǎo)入數(shù)據(jù)庫的過程為:
1)oracle數(shù)據(jù)庫按照格式生成數(shù)據(jù)庫控制文件;
2)步驟1)中的數(shù)據(jù)庫控制文件生成后,在服務(wù)端啟動命令執(zhí)行控制文件導(dǎo)入到數(shù)據(jù)庫;
mysql數(shù)據(jù)庫按照格式生成loadfile文件,通過loadfile命令導(dǎo)入,sqlserver通過bulkinsert命令將文本文件導(dǎo)入數(shù)據(jù)庫。
本發(fā)明的有益效果是:本發(fā)明中的快速導(dǎo)入數(shù)據(jù)庫的過程為:oracle數(shù)據(jù)庫按照格式生成數(shù)據(jù)庫控制文件;生成后,在服務(wù)端啟動命令執(zhí)行控制文件導(dǎo)入到數(shù)據(jù)庫;mysql數(shù)據(jù)庫按照格式生成loadfile文件,通過loadfile命令導(dǎo)入,sqlserver通過bulkinsert命令將文本文件導(dǎo)入數(shù)據(jù)庫。這種方式比直接insert效率快很多倍;本發(fā)明采用在web處理中開啟多線程處理寫庫操作,能夠快速給用戶反饋結(jié)果,結(jié)合內(nèi)存數(shù)據(jù)庫解決查詢數(shù)據(jù)不全的問題,大文件寫入操作不再采用web中調(diào)取數(shù)據(jù)庫的接口,不用insert,而是采用系統(tǒng)級接口,直接將文件批量導(dǎo)入數(shù)據(jù)庫,大大提升了寫數(shù)據(jù)庫的速度,大幅提升用戶體驗度,用戶不必等待很長時間既能得到結(jié)果,實際寫數(shù)據(jù)庫時間大幅縮短。
附圖說明
圖1為本發(fā)明的流程圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
實施例一:
如圖1所示,一種web端導(dǎo)入excel與存數(shù)據(jù)庫并反饋到前端的方法,其方法包括如下步驟:
步驟a、客戶端選擇大文件上傳;
步驟b、服務(wù)端獲取到步驟a上傳的大文件后讀入內(nèi)存,通過在后臺打開一個獨立的線程處理文件導(dǎo)入的問題,在打開獨立線程的同時,給客戶反饋一個結(jié)果,告訴用戶,后臺已經(jīng)處理了上傳的數(shù)據(jù);
其中,獨立線程沒處理完時,而前端客戶已經(jīng)進行其他操作,不必等待全部寫完數(shù)據(jù)庫;
步驟c、獨立線程將步驟a上傳的文件導(dǎo)入到數(shù)據(jù)庫;
其中,快速導(dǎo)入數(shù)據(jù)庫的過程為:
1)oracle數(shù)據(jù)庫按照格式生成數(shù)據(jù)庫控制文件;
2)步驟1)中的數(shù)據(jù)庫控制文件生成后,在服務(wù)端啟動命令執(zhí)行控制文件導(dǎo)入到數(shù)據(jù)庫;
mysql數(shù)據(jù)庫按照格式生成loadfile文件,通過loadfile命令導(dǎo)入,sqlserver通過bulkinsert命令將文本文件導(dǎo)入數(shù)據(jù)庫;
步驟d、當數(shù)據(jù)沒有完全導(dǎo)入到數(shù)據(jù)庫,遇到用戶查詢時,將導(dǎo)入的結(jié)果放入服務(wù)端一個容器中,前端請求查詢時,同時查詢數(shù)據(jù)庫以及內(nèi)存數(shù)據(jù)庫,合并后返給前端;
步驟e、等獨立線程處理完導(dǎo)入操作后,清空內(nèi)存數(shù)據(jù)庫。
當用戶查詢內(nèi)存數(shù)據(jù)庫時,前端請求查詢時,同時查詢數(shù)據(jù)庫以及內(nèi)存數(shù)據(jù)庫,合并后返給前端,等獨立線程處理完導(dǎo)入操作后,清空內(nèi)存數(shù)據(jù)庫,其效率比傳統(tǒng)的方式快了20%。
實施例二:
如圖1所示,一種web端導(dǎo)入excel與存數(shù)據(jù)庫并反饋到前端的方法,其方法包括如下步驟:
步驟a、客戶端選擇大文件上傳;
步驟b、服務(wù)端獲取到步驟a上傳的大文件后讀入內(nèi)存,通過在后臺打開一個獨立的線程處理文件導(dǎo)入的問題,在打開獨立線程的同時,給客戶反饋一個結(jié)果,告訴用戶,后臺已經(jīng)處理了上傳的數(shù)據(jù);
其中,獨立線程沒處理完時,而前端客戶已經(jīng)進行其他操作,不必等待全部寫完數(shù)據(jù)庫;
步驟c、獨立線程將步驟a上傳的文件導(dǎo)入到數(shù)據(jù)庫;
其中,快速導(dǎo)入數(shù)據(jù)庫的過程為:
1)oracle數(shù)據(jù)庫按照格式生成數(shù)據(jù)庫控制文件;
2)步驟1)中的數(shù)據(jù)庫控制文件生成后,在服務(wù)端啟動命令執(zhí)行控制文件導(dǎo)入到數(shù)據(jù)庫;
mysql數(shù)據(jù)庫按照格式生成loadfile文件,通過loadfile命令導(dǎo)入,sqlserver通過bulkinsert命令將文本文件導(dǎo)入數(shù)據(jù)庫;
步驟d、當數(shù)據(jù)沒有完全導(dǎo)入到數(shù)據(jù)庫,遇到用戶查詢時,將導(dǎo)入的結(jié)果放入服務(wù)端一個容器中,前端請求查詢時,同時查詢數(shù)據(jù)庫以及內(nèi)存數(shù)據(jù)庫,合并后返給前端;
步驟e、等獨立線程處理完導(dǎo)入操作后,清空內(nèi)存數(shù)據(jù)庫。
當用戶查詢mysql數(shù)據(jù)庫時,前端請求查詢時,同時查詢數(shù)據(jù)庫以及內(nèi)存數(shù)據(jù)庫,合并后返給前端,等獨立線程處理完導(dǎo)入操作后,清空內(nèi)存數(shù)據(jù)庫,其效率比傳統(tǒng)的方式快了10%。
通過實施例一和實施例二其查詢效率比傳統(tǒng)的方式高,能夠直接將文件批量導(dǎo)入數(shù)據(jù)庫,大大提升了寫數(shù)據(jù)庫的速度,大幅提升用戶體驗度,用戶不必等待很長時間既能得到結(jié)果,實際寫數(shù)據(jù)庫時間大幅縮短。
對于本領(lǐng)域技術(shù)人員而言,顯然本發(fā)明不限于上述示范性實施例的細節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本發(fā)明。因此,無論從哪一點來看,均應(yīng)將實施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化囊括在本發(fā)明內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標記視為限制所涉及的權(quán)利要求。
此外,應(yīng)當理解,雖然本說明書按照實施方式加以描述,但并非每個實施方式僅包含一個獨立的技術(shù)方案,說明書的這種敘述方式僅僅是為清楚起見,本領(lǐng)域技術(shù)人員應(yīng)當將說明書作為一個整體,各實施例中的技術(shù)方案也可以經(jīng)適當組合,形成本領(lǐng)域技術(shù)人員可以理解的其他實施方式。