亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發(fā)消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術(shù)支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

多線程下不重復(fù)讀取SQL Server的數(shù)據(jù)

添加時間:2014-2-28 16:46:17  添加: 思海網(wǎng)絡(luò) 

  在進行一些如發(fā)送短信、郵件的業(yè)務(wù)時,我們經(jīng)常會使用一個表來存儲待發(fā)送的數(shù)據(jù),由后臺多個線程不斷的從表中讀取待發(fā)送的數(shù)據(jù)進行發(fā)送,發(fā)送完成后再將數(shù)據(jù)轉(zhuǎn)移到歷史表中,這樣保證待發(fā)送表的數(shù)據(jù)一般情況下不會太多。如待發(fā)送表結(jié)構(gòu)為:

  Create Table SMS(ID int not null identity(1,1),Content varchar(1024),Status int not null,CreateTime datetime);

  Status 取值:0未讀取 1已讀取

  這樣設(shè)計的好處是,不會因為后端有時發(fā)送過慢導(dǎo)致前端接收發(fā)送消息的請求出現(xiàn)問題,如發(fā)送短信的業(yè)務(wù),有時由于運營商的網(wǎng)關(guān)原因發(fā)送太慢,這樣前端可以先將用戶的發(fā)送請求全部放在待發(fā)送表中,由后端進行慢慢發(fā)送。

  在后端發(fā)送進程一般使用

  Select top 100 * From SMS Where Status=0;這樣的SQL取出未被讀取的數(shù)據(jù)。

  為了提高后端發(fā)送能力,需要部署多個進程同時從待發(fā)送表中取出數(shù)據(jù)進行發(fā)送,這樣有時就會造成同一個記錄被多個進程同時取出來,并發(fā)送的情況。

  今天查了一下SQL Server 的MSDN,發(fā)現(xiàn)可以通過先更新同時通過deleted表(就像是在觸發(fā)器中使用一樣)取出的方式,來保證每條記錄只會被讀取一次。

declare @Rowid table(rowid int);
BEGIN
 set rowcount 100; --一次讀取的行數(shù)
 --先將要讀取的記錄狀態(tài)更新
 update Sms set [status]= 1  output deleted.ID into @Rowid Where [status] = 0;
 --讀取剛更新狀態(tài)的記錄
 select  * from Sms where ID in (select Rowid from @Rowid);

END

關(guān)鍵字:SQL Server、記錄、多線程

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報有獎  警警  手機打開網(wǎng)站