国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

在Oracle數(shù)據(jù)庫中處理數(shù)據(jù)的高并發(fā)響應(yīng)

瀏覽:32日期:2023-11-27 14:04:33

某些系統(tǒng)可能對系統(tǒng)應(yīng)付數(shù)據(jù)高并發(fā)的響應(yīng)要求比較高 (如: 飛行航空訂票系統(tǒng)). 本文采用Oracle的lock table來解決此問題:

Procedure中關(guān)鍵code如下:

---------------------------------------

lock table tb_book_ticket in share mode;

...

insert into tb_book_ticket (id, scheduled_flight, ticket_no, book_time) values (ID.nextval, v_scheduled_flight, v_ticket_no, SYSDATE); -- mark1

... -- mark2

select count(*) into v_book_count from tb_book_ticket where scheduled_flight = v_scheduled_flight; -- mark3

if v_book_count <= v_book_max_count then

v_result := 'book successfully';

commit;

else

v_result := 'book unsuccessfully';

rollback;

end if;

return v_result;

-------------------------------------------------------------

以上有2個地方需注意:

1) 采用 lock table table_name in share mode 方式而非 lock table table_name in exclusive mode 提高并發(fā)性處理, 盡量減少不必要執(zhí)行等待.

2) 按常規(guī)思路, 可能會將 mark1 與 mark3 順序交換, 但此舉不行

-------------------------------------------------------------

select count(*) into v_book_count from tb_book_ticket where scheduled_flight = v_scheduled_flight; -- mark3

... -- mark2

if v_book_count < v_book_max_count then

insert into tb_book_ticket (id, scheduled_flight, ticket_no, book_time) values (ID.nextval, v_scheduled_flight, v_ticket_no, SYSDATE); -- mark1

-- mark4

commit;

end if;

-------------------------------------------------------------

試想若 userA 執(zhí)行到 mark4, 而同時 userB 執(zhí)行到 mark3, 就可能會出現(xiàn)由于 userA 尚未commit 而導(dǎo)致 userB 訂到機票但實際沒有座位的情況。

若確希望使用常規(guī)邏輯來實現(xiàn), 需要用到 Oracle 的表的讀鎖功能 (精細訪問策略), 而此非本文范圍, 且其對于SYS用戶無效。

主站蜘蛛池模板: 淮安市| 东安县| 潼关县| 凉城县| 饶河县| 定南县| 宾川县| 东海县| 锦州市| 嵩明县| 昔阳县| 翼城县| 元阳县| 永嘉县| 漳州市| 龙山县| 定远县| 克什克腾旗| 凭祥市| 萍乡市| 通许县| 柏乡县| 忻城县| 运城市| 扎囊县| 剑阁县| 龙泉市| 双江| 朝阳县| 中阳县| 房产| 三亚市| 桑植县| 舟山市| 宣城市| 泗阳县| 咸宁市| 大关县| 秦皇岛市| 称多县| 兴海县|