大資料多執行緒高效批量處理

2021-09-02 21:10:46 字數 2490 閱讀 9154

工作中遇到的場景,這裡寫個例子出來,實際應用比此處更為健壯和完善

應用場景:

對一張表10萬條資料(或100萬或1億+)進行更新操作或寫入操作;

菜鳥是一條一條的執行吧,這顯然不行啊

我在實際專案中是這樣應用的, 批量更新!當然這顯然是不夠的 要執行緒批量更新才對吧!

怎麼做呢?

舉例1:10萬條資料 ,我1000條1000條的處理 就是,10萬/1000 = 100  ,

這裡我就用100個執行緒同時處理,每個執行緒負責1000條資料,這裡有個關鍵點,處理的資料不能重複!

給個**示例吧:

執行緒池中線程數量可以根據 資料量/單個執行緒處理數量 來計算

public

class

dyschedule

public

static

void

dojob

() pool.shutdown();

}public

static

void

main

(string args)

}

以下是每個執行緒要執行的內容

public class

mythread

extends

thread

}

程式執行結果:

執行緒:pool-

1-thread-1

startline = 0

,endline = 1000

執行緒:pool-

1-thread-2

startline = 1000

,endline = 2000

執行緒:pool-

1-thread-5

執行緒:pool-

1-thread-3

startline = 2000

,endline = 3000

startline = 3000

,endline = 4000

執行緒:pool-

1-thread-4

startline = 4000

,endline = 5000

執行緒:pool-

1-thread-6

執行緒:pool-

1-thread-7

startline = 6000

,endline = 7000

startline = 5000

,endline = 6000

執行緒:pool-

1-thread-9

startline = 7000

,endline = 8000

執行緒:pool-

1-thread-8

startline = 8000

,endline = 9000

執行緒:pool-

1-thread-10

startline = 9000

,endline = 10000

執行緒:pool-

1-thread-12

startline = 10000

,endline = 11000

執行緒:pool-

1-thread-11

startline = 11000

,endline = 12000

執行緒:pool-

1-thread-16

startline = 12000

,endline = 13000

執行緒:pool-

1-thread-15

執行緒:pool-

1-thread-19

startline = 14000

,endline = 15000

startline = 13000

,endline = 14000

執行緒:pool-

1-thread-20

startline = 15000

,endline = 16000

....

....

這裡只把每個執行緒要處理的資料行數或分割號列舉處理了,

比如以上

執行緒:pool-1-thread-1

startline = 0,endline = 1000 處理資料庫0-1000行的資料

執行緒:pool-1-thread-2

startline = 1000,endline = 2000  處理1000-2000行的資料

接下來的批量任務內容是不是簡單多了,不多少了,記住這裡關鍵點就是保證資料不重複!,不遺漏!

這樣子的思路幾百萬或者幾千萬級別的批量處理是沒有什麼問題的,

但是 你有幾個億或者幾百億的資料需要批量處理怎麼辦呢?  小夥子 別急,作為一名資深程式設計師當然還是有辦法的

需要吧以上思路或方案設計成分布式,多工,多執行緒的schedule 就可以了,

批量VS多執行緒

在實際的編碼過程中,總會遇到單一處理會有效能風險的問題,於是我們求助於批量或者多執行緒。一 批量處理 一般情況下批量處理就可以規避大部分效能風險的問題。將fetch 改為batchfetch 多數情況都比較簡單,尤其是呼叫其他應用的介面時,將單一介面,換成批量介面即可 而最終主要是修改資料從資料庫中...

多執行緒處理mysql資料

閒來無事研究了下py,發現多執行緒處理起資料來比php不要爽太多,廢話少說上碼 author yao import mydb from time import ctime,sleep def mythread db for i in xrange 10 sql select from y user ...

python多執行緒處理資料

python多執行緒處理資料 從檔案讀取資料,多執行緒處理 usr bin env python encoding utf 8 import threading import time from queue import queue def readfile file object open opt...