起因業務如下,有乙個數碼表,數碼是主鍵,另外還有如匯入時間、數碼層級、產品編號、產品名稱、數碼狀態等相關字段,但只有數碼是主鍵,無其它索引
匯入的過程中需判斷數碼的格式,比如必須全數字或長度小於某個數,還需要判斷數碼是否重複
文字檔案包含的數碼一般為幾十萬行,也有幾百萬行的情況
需解決問題
文字檔案一般為幾十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 你可能沒想到,這條語句執行之間...