簡單優化實現大資料量的重複判斷和匯入

2021-09-06 10:28:15 字數 1713 閱讀 1258

起因業務如下,有乙個數碼表,數碼是主鍵,另外還有如匯入時間、數碼層級、產品編號、產品名稱、數碼狀態等相關字段,但只有數碼是主鍵,無其它索引

匯入的過程中需判斷數碼的格式,比如必須全數字或長度小於某個數,還需要判斷數碼是否重複

文字檔案包含的數碼一般為幾十萬行,也有幾百萬行的情況

需解決問題

文字檔案一般為幾十m到幾百m,必須修改asp.net的預設配置才能上傳

由於資料量比較大,判斷數碼是否存在及寫入數碼都需要花費大量的時間和資源

步驟一開始想通過asp.net非同步上傳方式,雖然經測試功能可以實現,但是過程不可控,比如asp.ne對多執行緒的調配及使用,使用執行緒會不會出問題,因為沒有時間進行充分驗證,決定放棄。

換個思路,由於資料量比較大,處理乙個文字檔案有時需要幾十分鐘甚至以小時計算,使用者對實時性要求不高。所以決定,asp.net前端只負責檔案上傳,檔案的處理由winform程式開多執行緒執行

winform處理的過程中需要兩個問題,一是判斷數碼是否存在、二是將數碼資訊寫入數碼表。目前兩個問題都是按照分批執行進行,比如有10萬數碼需要判斷是否存在,則每次使用in查詢700個數碼(數碼是主鍵,使用in查詢會走索引,但是in每次查詢的數量有限制),寫入數碼一般每次寫入5w條,如果有100w數碼,只用寫入20次

結論以上方法只是稍微提高了些效率,但是沒有從根本上改變效能。那位有好的建議,歡迎指教!

解決上傳檔案限制的方法(修改配置檔案)

i. configuration節點下

<?xml:namespace prefix = "o" ns = "urn:schemas-microsoft-com:office:office" />

<

system.webserver

>

<

security

>

<

requestfiltering

>

<

requestlimits

maxallowedcontentlength="

2097151000

"/>

requestfiltering

>

security

>

system.webserver

>

ii. 

system.web下修改節點

為<

maxrequestlength="

2097151

"executiontimeout="

3600

"usefullyqualifiedredirecturl="

true

"/>

批量操作

intpagecount =

700;

intyeshu = listcode.count / pagecount;  //頁數

intyushu = listcode.count % pagecount;  //餘數

for(inti =

1; i <

= yeshu; i++)

if(yushu >

0)

來自為知筆記(wiz)

大資料量分頁優化

用limit offset 時並不是先跳過再查詢 而是 先查詢,再跳過 limit 100w,10 先把100w取出來,然後跳過前100w行,所以大資料分頁用limit很慢 select id,name from lx com 5000000,10 先查詢出來5000000 select id,na...

航測大資料量處理 大資料量處理及優化措施

1 首先考慮垂直拆分庫,不同的表拆分到不同的庫中,例如使用者庫 產品庫 支付庫 2 然後考慮水平拆分庫,將乙個表的資料放到多張表中,例如按照使用者 時間 訂單號 3 插入資料的時候不建立索引 4 待資料已經插入完成後,建立索引 5 正確的指定索引字段 6 使用批量插入資料庫的方式代替單條資料的插入 ...

Mysql大資料量分頁優化

假設有乙個千萬量級的表,取1到10條資料 select from table limit 0,10 select from table limit 1000,10 這兩條語句查詢時間應該在毫秒級完成 select from table limit 3000000,10 你可能沒想到,這條語句執行之間...