資料太多,造成卡死,如何利用多執行緒實作查詢大量資料,求大佬,如果可以附帶代碼講解,非常感謝
uj5u.com熱心網友回復:
采用異步的方式,查詢到時候分頁uj5u.com熱心網友回復:
可以附帶代碼講解一下嗎,大佬uj5u.com熱心網友回復:
sql陳述句你應該會寫吧,優化查詢的SQL陳述句,建立索引,在查詢 時候采用分頁 可以提高查詢效率uj5u.com熱心網友回復:
資料庫么,資料庫幾十萬還是輕輕松松吧uj5u.com熱心網友回復:
如果你還不會寫多執行緒,那應該找一些帖子先入個門。這種帖子很多,不用浪費大家重寫一遍。等你了解完了,有更具體的問題,適合在這里提問。
uj5u.com熱心網友回復:
多執行緒查詢不一定能解決卡死問題,主要應分析卡死的原因是什么,是哪個環節耗時較高。資料庫的瓶頸一般在磁盤,而磁盤是不適合多執行緒并發讀寫的(固態磁盤例外)。一般多執行緒查詢的方法是:將查詢據條件分成多個段(例如按時間段查詢的,將時間段細分成多個),然后開啟多個執行緒分別查詢,最后將結果匯總。如果這些資料分布在不同的資料庫服務器上,多執行緒確實可以提高效率,否則沒什么作用。uj5u.com熱心網友回復:
十幾萬資料,用什么多執行緒,用分頁吧,索引加好,多執行緒讀取以前試過,因為可能一次需要讀取的量比較大(業務比較特殊),所以分塊讀取,結果沒有想的那么好,象6#說的那樣,資料庫瓶頸在IO速度,用多執行緒讀寫一定要限制最大執行緒數在一定數量,否則等著io.timeout的錯誤吧,多執行緒寫也一樣。uj5u.com熱心網友回復:
我先問問1 為什么要查幾十萬條?
2 作用是什么?顯示?傳輸?
uj5u.com熱心網友回復:
多執行緒讀的時候問題更大,容易引起鎖表(讀取的記錄多更是這樣),讓另外使用此表的業務速度很慢,你應該在業務上盡量避免這樣做。uj5u.com熱心網友回復:
設計一個高并發高性能系統,需要整體思維和足夠的實踐經驗。當你滿腦子只有“關系資料庫增刪改查”的時候,提出的問題也是只有這個層面的,這就無法解決問題,因為無法真正提出問題。uj5u.com熱心網友回復:
關系資料要解決的問題天生就是“面向底層存盤、面向結構化索引、對事務嚴格進行加鎖保護”的,它是非常底層的東西。如果滿腦子只有這些,那么不會有騰訊、不會有唉、阿里、不會有百度,等等任何一家公司。任何實用的大系統都只要脫離了初學者的“增刪改查”思維方式之上而設計的面向記憶體中不落地的高性能大并發的資料結構的解決方案。uj5u.com熱心網友回復:
用執行緒池啊關鍵不是多不多執行緒,你要設計良好的架構,如分布式存盤等
uj5u.com熱心網友回復:
幾十萬的資料,隨便處理都不是事,為什么你的就是事,我想知道uj5u.com熱心網友回復:
這與多執行緒無關,也與代碼無關,幾十萬資料都是小資料量了, 關鍵有三點:1是你查詢的sql。可能是寫的不合理造成全資料篩選。2是沒有適當的建立索引,3是分頁查詢。你可以看看你要查詢的欄位可以加上索引試試哈uj5u.com熱心網友回復:
對于幾十萬資料(而不是幾千萬、幾十億資料)的所謂“資料太多,造成卡死”“利用多執行緒實作查詢大量資料”這類問題,我們是針對高并發、大資料運算而考慮其“痛點”的。如果沒經歷過就不知道痛點。例如幾乎任何一個商用功能,如果要發布到服務器,我都愿意它從一開始就是基于 Orleans 的自動的分布式并行服務。uj5u.com熱心網友回復:
其實類似 Orlans 這類的東西就好像一個人初學 vb 來撰寫一個“表單用戶控制元件”一樣簡單,撰寫好了只要拖入不同的表單就能組合為千變萬化的應用。同樣的意思,撰寫好了資料服務然后 Orleans 自動就能在集群上分布管理(通常要求電信級的高性能、高穩定性)。學些這種東西通常只要1、2天,微軟的東西傳統上就是特別簡單特別周到!所不同的就是,這需要先把概念開竅,知道面向集群而不是面向單機,永遠去站在潮流的必經之道上。這可能是最難開竅的。
uj5u.com熱心網友回復:
作為一名 DBA, 想告訴你:實在是想太多了, 不要把一切都往程式那邊靠。如果資料表只有幾十萬, 那你要做的是 增加分頁,優化查詢,增加索引,避免阻塞,避免不合理的業務需求。
這點資料量, 實在是不值一提, 多執行緒幫不上什么忙, 很可能還在添亂。
uj5u.com熱心網友回復:
還是得往SQL上面下手uj5u.com熱心網友回復:
我識訓我的觀點。確實只有幾十萬的資料還卡,那問題要么在資料庫,要么在你訪問資料庫的代碼問題,要么在資料庫的設計問題。要解決那些問題。
而用多執行緒,只是貼了個狗皮膏藥,不一定能解決問題。而且如果你要訪問的資料,都在一個表里,那你都沒法分多執行緒。
uj5u.com熱心網友回復:
兩方面優化:1查詢的資料庫表都有做索引,2界面顯示是要用系結方式加載 不能自己回圈讀取太慢。 監控 https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22879184324.20.2d2d58fb7Ew9Cy&id=620683911377uj5u.com熱心網友回復:
基本可以肯定,多執行緒在這里沒有任何意義.應該做的是:優化SQL陳述句,優化索引,主鍵....uj5u.com熱心網友回復:
幾十萬條資料,這多嗎...就是關系DB,也不多啊,上千萬條才開始吃力.你要是想一下吧幾十萬資料都查出來,絕大多數情況沒有必要,都是需要多少查多少,一般一螢屏可以看到的范圍,也就20條吧.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/28050.html
標籤:C#
