通過佇列實現批量處理
經常有這樣一種需求
批量非同步寫資料庫.
比如滿50個物件,批量寫入資料庫.
或者每5秒,寫一次.防止業務低峰由於數量不夠,導致不能及時入庫的問題.
原來做的比較呆板.
生產者每5秒,會向佇列中put一種特殊型別的物件.(假如這種物件叫做 pBlock,普通物件叫做oBlock)
消費者從佇列中獲取資訊,滿50個oBlock寫入.如果收到的是pBlock,則無論現在收到多少oBlock,都寫入資料庫.
這種方式呆板,是因為生產者和消費者的程式有耦合.
今天發現有一個新方式,感覺挺新穎.
批量非同步寫資料庫.
比如滿50個物件,批量寫入資料庫.
或者每5秒,寫一次.防止業務低峰由於數量不夠,導致不能及時入庫的問題.
原來做的比較呆板.
生產者每5秒,會向佇列中put一種特殊型別的物件.(假如這種物件叫做 pBlock,普通物件叫做oBlock)
消費者從佇列中獲取資訊,滿50個oBlock寫入.如果收到的是pBlock,則無論現在收到多少oBlock,都寫入資料庫.
這種方式呆板,是因為生產者和消費者的程式有耦合.
今天發現有一個新方式,感覺挺新穎.
- import java.util.ArrayList;
- import java.util.List;
- import java.util.concurrent.BlockingQueue;
- import java.util.concurrent.LinkedBlockingQueue;
- import java.util.concurrent.TimeUnit;
- import com.google.common.collect.Queues;
- public class T {
- public static void main(String[] args) {
- final BlockingQueue<Long> q = new LinkedBlockingQueue<Long>();
- new Thread(new Runnable(){
- public void run() {
- long num=1L;
- while(true)
- {
- try {
- System.out.println(num);
- q.put(num);
- num++;
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }}).start();
- while (true) {
- try {
- List<Long> l = new ArrayList<Long>(10);
- Queues.drain(q, l, 10, 5, TimeUnit.SECONDS);
- System.out.println(l);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2120130/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通過佇列實現棧OR通過棧實現佇列佇列
- Python 通過List 實現佇列的操作Python佇列
- offer通過--7兩個棧實現佇列-2佇列
- offer通過--8兩個棧實現佇列-2佇列
- c# 透過訊息佇列處理高併發請求實列C#佇列
- mac 命令列批量處理照片Mac命令列
- C#通過rabbitmq實現定時任務(延時佇列)C#MQ佇列
- 處理線上RabbitMQ佇列阻塞MQ佇列
- hyperf 實現延時佇列,處理超時未支付訂單佇列
- centos(php7)下gearman實現非同步處理佇列任務CentOSPHP非同步佇列
- 實用!Swoole + Redis 佇列 訂單處理系統Redis佇列
- Android通過startService實現批量下載示例Android
- javascript實現佇列JavaScript佇列
- 常見佇列等待事件處理思路佇列事件
- 025 通過連結串列學Rust之使用棧實現雙端佇列Rust佇列
- Java通過Mybatis實現批量插入資料到Oracle中JavaMyBatisOracle
- 佇列的一種實現:迴圈佇列佇列
- 9. 題目:對佇列實現棧&用棧實現佇列佇列
- 佇列(Queue)-c實現佇列
- 用 Rust 實現佇列Rust佇列
- 用佇列實現棧佇列
- 用棧實現佇列佇列
- 通過HTTP/2實現每天處理400GB圖片的實踐HTTP
- 【通過HTTP/2實現每天處理400GB圖片的實踐HTTP
- Weblogic JMS佇列阻塞問題處理Web佇列
- Python佇列的三種佇列實現方法Python佇列
- 如何用 Golang 的 channel 實現訊息的批量處理Golang
- 鏈式佇列—用連結串列來實現佇列佇列
- Redis實現任務佇列、優先順序佇列Redis佇列
- php訂單延時處理-延時佇列PHP佇列
- Looper中的訊息佇列處理機制OOP佇列
- RabbitMQ實現延遲佇列MQ佇列
- RabbitMQ 實現延遲佇列MQ佇列
- Redis實現訊息佇列Redis佇列
- 兩個棧實現佇列佇列
- 【資料結構】佇列(順序佇列、鏈佇列)的JAVA程式碼實現資料結構佇列Java
- 佇列 優先順序佇列 python 程式碼實現佇列Python
- 批量處理物理備庫出現archive gapHive