Prayer
在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
C++博客
::
首頁
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
C#--多進程多線程訪問數(shù)據(jù)庫
Posted on 2008-08-26 15:33
Prayer
閱讀(1850)
評論(0)
編輯
收藏
引用
所屬分類:
數(shù)據(jù)庫,SQL
如何讓多進程多線程訪問數(shù)據(jù)庫,而不會選擇相同的數(shù)據(jù),這在設(shè)計分布式程序的時候經(jīng)常用到,多臺機器的多個進程,每個進程都有多個線程,每個線程要從數(shù)據(jù)庫里取數(shù)據(jù)來處理,要實現(xiàn)不能漏取數(shù)據(jù),也不能重復(fù)取數(shù)據(jù),這里給出答案
創(chuàng)建一個數(shù)據(jù)表,如下,一個自增列,一個表示rss鏈接地址
CREATE
TABLE
[
dbo
]
.
[
Rss_RssSources
]
(
[
SourceId
]
[
int
]
IDENTITY
(
1
,
1
)
NOT
NULL
,
[
Link
]
[
varchar
]
(
1024
)
NOT
NULL
)
ON
[
PRIMARY
]
先放1w條數(shù)據(jù)
declare
@i
int
set
@i
=
1
while
@i
<
10000
begin
select
@i
=
@i
+
1
insert
into
[
Rss_RssSources
]
values
(
newid
())
end
再創(chuàng)建一個鎖表,一個字段表示是否已經(jīng)鎖定的資源,另一個表示已經(jīng)讀取的rss源的最大id
create
table
Rss_RssSourceLock
(
IsLock
bit
,
MaxSourceId
int
)
初始化數(shù)據(jù)
insert
into
Rss_RssSourceLock
values
(
0
,
0
)
下面我們要設(shè)計一個存儲過程,讓這個存儲過程每次返回10個rss源,知道返回所有的rss源,要求無遺漏,無重復(fù)返回。如下
CREATE
PROCEDURE
[
dbo
]
.
[
USP_GetRssSources
]
AS
BEGIN
if
exists
(
select
*
from
Rss_RssSourceLock
with
(READPAST)
where
IsLock
=
0
)
begin
declare
@select_count
int
begin
tran
update
Rss_RssSourceLock
set
IsLock
=
1
if
object_id
(
'
tempdb..#t
'
)
is
not
null
drop
table
#t
select
top
10
a.
*
into
#t
from
[
Rss_RssSources
]
as
a
inner
join
Rss_RssSourceLock
as
b
on
a.SourceId
>
b.MaxSourceId
order
by
a.
[
SourceId
]
select
@select_count
=
count
(
*
)
from
#t
update
Rss_RssSourceLock
set
IsLock
=
0
,MaxSourceId
=
MaxSourceId
+
@select_count
select
*
from
#t
commit
tran
end
END
1、如果鎖表里顯示沒有進程正在讀取rss源(IsLock = 0),那么就返回從最大的rss源id往后的10個rss源,否則返回空。
2、 用with(READPAST)表示忽略鎖住的行,如果另一個進程正在執(zhí)行update Rss_RssSourceLock的語句,并且在事務(wù)提交前,update語句會鎖住這些要更新的行,而Rss_RssSourceLock表就一行數(shù) 據(jù),這時候select Rss_RssSourceLock表并且忽略被鎖的行肯定是沒數(shù)據(jù)的,所以本次存儲過程執(zhí)行會返回空。
3、begin tran和commit tran保證了即使本次存儲過程出錯,也不會讓Rss_RssSourceLock表處于IsLock = 1的臟數(shù)據(jù)狀態(tài),如果處于這種狀態(tài),后面的進程執(zhí)行存儲過程就永遠也返回不了數(shù)據(jù)了。
4、因為有時候一次選取的記錄可能不夠10條,所以這里用了個臨時表來暫存記錄,再算出來選取的條數(shù),最后更新Rss_RssSourceLock表的MaxSourceId字段。但用臨時表肯定會增加數(shù)據(jù)庫的壓力,這里不知道用表變量是不是會改善性能,暫時先這樣了。
5、應(yīng)用里調(diào)用這個存儲過程,如果返回了數(shù)據(jù),就進行處理,如果沒返回數(shù)據(jù),就sleep幾秒才執(zhí)行,直到返回數(shù)據(jù)。
只有注冊用戶
登錄
后才能發(fā)表評論。
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
兩階段提交
主鍵與唯一索引
DB2 Merge語句
LDAP
三十五個非主流開源數(shù)據(jù)庫 MongoDB領(lǐng)銜主演
系統(tǒng)臨時表使用問題
WITH HOLD
事務(wù)--<
>
MINUS EXCEPT
OLAP與OLTP的一些基礎(chǔ)知識
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © Prayer
日歷
<
2008年10月
>
日
一
二
三
四
五
六
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(28)
給我留言
查看公開留言
查看私人留言
隨筆分類
C/C++(131)
CVS(8)
DB2(337)
DB2CLI(12)
DB2k(3)
GLASSFISH(1)
LINUX/UNIX/AIX(316)
makefile(30)
PERL(6)
Shell(233)
SOCKET(68)
TOOLS(5)
TUXEDO(19)
U基礎(chǔ)管理(12)
計算機基礎(chǔ)(4)
金融相關(guān)(66)
面向?qū)ο?10)
日常技巧(99)
數(shù)據(jù)庫,SQL(101)
算法(6)
系統(tǒng)、備份等(28)
組件(2)
隨筆檔案
2019年6月 (2)
2019年4月 (8)
2019年3月 (10)
2019年2月 (9)
2019年1月 (10)
2018年11月 (16)
2012年4月 (2)
2012年3月 (13)
2012年2月 (2)
2012年1月 (1)
2011年12月 (15)
2011年10月 (1)
2010年12月 (1)
2010年11月 (4)
2010年10月 (10)
2010年9月 (18)
2010年8月 (10)
2010年7月 (5)
2010年6月 (3)
2010年5月 (46)
2010年4月 (25)
2010年3月 (56)
2010年2月 (36)
2010年1月 (50)
2009年12月 (30)
2009年11月 (21)
2009年10月 (19)
2009年9月 (44)
2009年8月 (111)
2009年7月 (71)
2009年6月 (37)
2009年5月 (52)
2009年4月 (89)
2009年3月 (59)
2009年2月 (37)
2009年1月 (33)
2008年12月 (60)
2008年11月 (14)
2008年10月 (52)
2008年9月 (64)
2008年8月 (110)
文章分類
系統(tǒng)、備份等
UNIX
AIX官方文檔
AIX命令參考大全中文版
DB2 官方
DB2 培訓(xùn)教程
IBM開發(fā)者文檔庫
linuxsir
ODBC
UNIX愛好者家園
黑客基地
全球最大的黑客門戶網(wǎng)站
開源中國
信用卡
收單業(yè)務(wù)網(wǎng)
搜索
最新評論
1.?re: sockaddr_in 結(jié)構(gòu)體在什么頭文件中聲明
一樓正解
--游客游過
2.?re: update語句的幾種基本用法[未登錄]
12233
--12
3.?re: db2 的事務(wù)時隱式開始的
不更新了嗎
--jason yeung
4.?re: IPC_EXCL 防止key重復(fù)[未登錄]
t
--1
5.?re: DB2 公共表表達式(WITH語句的使用)[未登錄]
評論內(nèi)容較長,點擊標題查看
--kk
閱讀排行榜
1.?linux的system () 函數(shù)詳解(79638)
2.?sockaddr_in 結(jié)構(gòu)體在什么頭文件中聲明(50297)
3.?DB2錯誤信息(按sqlcode排序)(44533)
4.?update語句的幾種基本用法(33714)
5.?useradd命令詳解(實例) (32892)
評論排行榜
1.?設(shè)置OUTLOOK2007新郵件到達提醒和最小化到托盤顯示(8)
2.?0.0.0.0的IP是什么地址(8)
3.?報表工具匯總(7)
4.?sockaddr_in 結(jié)構(gòu)體在什么頭文件中聲明(6)
5.?DB2 中 MQT 的匹配原理及使用技巧(6)
久久亚洲精品无码观看不卡
|
久久天天躁狠狠躁夜夜不卡
|
久久久久亚洲AV成人网人人网站
|
亚洲国产香蕉人人爽成AV片久久
|
国产精品久久久久jk制服
|
精品人妻久久久久久888
|
国产免费久久精品丫丫
|
亚洲综合久久久
|
久久精品九九亚洲精品天堂
|
久久精品无码一区二区三区免费
|
亚洲国产另类久久久精品黑人
|
久久精品中文闷骚内射
|
99久久精品九九亚洲精品
|
久久天天躁狠狠躁夜夜avapp
|
97超级碰碰碰碰久久久久
|
亚洲午夜久久久影院伊人
|
国产精品热久久无码av
|
精品熟女少妇av免费久久
|
综合久久精品色
|
久久AAAA片一区二区
|
久久99精品国产自在现线小黄鸭
|
久久婷婷午色综合夜啪
|
久久久久亚洲AV综合波多野结衣
|
久久精品国产亚洲网站
|
久久久久99精品成人片直播
|
一本久久综合亚洲鲁鲁五月天
|
99久久综合国产精品二区
|
91精品国产91久久久久福利
|
97精品国产97久久久久久免费
|
91久久成人免费
|
国产精品久久久久久福利漫画
|
一本色道久久88—综合亚洲精品
|
欧美一级久久久久久久大
|
国产亚洲色婷婷久久99精品91
|
美女写真久久影院
|
男女久久久国产一区二区三区
|
久久久精品人妻一区二区三区蜜桃
|
久久成人精品
|
国内精品久久久久影院老司
|
久久国产香蕉视频
|
午夜福利91久久福利
|