[發(fā)明專(zhuān)利]數(shù)據(jù)更新的加鎖方法和設(shè)備有效
| 申請(qǐng)?zhí)枺?/td> | 201310259869.3 | 申請(qǐng)日: | 2013-06-26 |
| 公開(kāi)(公告)號(hào): | CN104252386B | 公開(kāi)(公告)日: | 2017-11-21 |
| 發(fā)明(設(shè)計(jì))人: | 劉輝 | 申請(qǐng)(專(zhuān)利權(quán))人: | 阿里巴巴集團(tuán)控股有限公司 |
| 主分類(lèi)號(hào): | G06F9/48 | 分類(lèi)號(hào): | G06F9/48;G06F17/30 |
| 代理公司: | 北京國(guó)昊天誠(chéng)知識(shí)產(chǎn)權(quán)代理有限公司11315 | 代理人: | 許志勇 |
| 地址: | 英屬開(kāi)曼群島大開(kāi)*** | 國(guó)省代碼: | 暫無(wú)信息 |
| 權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 數(shù)據(jù) 更新 加鎖 方法 設(shè)備 | ||
技術(shù)領(lǐng)域
本申請(qǐng)涉及數(shù)據(jù)處理領(lǐng)域,更具體地涉及一種針對(duì)多線(xiàn)程的數(shù)據(jù)更新進(jìn)行處理的方法和設(shè)備。
背景技術(shù)
在計(jì)算領(lǐng)域中,InnoDB存儲(chǔ)引擎是MySQL的數(shù)據(jù)庫(kù)引擎之一,是其中使用最頻繁的一種引擎,InnoDB存儲(chǔ)引擎由Innobase Oy公司所開(kāi)發(fā)。InnoDB支持回滾、崩潰恢復(fù)能力、多版本并發(fā)控制、ACID事務(wù),支持行級(jí)鎖定等功能,已經(jīng)成為MySQL的默認(rèn)存儲(chǔ)引擎。InnoDB存儲(chǔ)引擎作為MySQL的一個(gè)可插拔的引擎,其支持事務(wù),并且采用多版本并發(fā)控制的方式來(lái)提高并發(fā)度。MySQL的InnoDB存儲(chǔ)引擎是基于行記錄鎖粒度,在對(duì)單條記錄并發(fā)更新時(shí),并發(fā)的線(xiàn)程變?yōu)榇谢S捎贗nnoDB的鎖設(shè)計(jì)問(wèn)題,導(dǎo)致每個(gè)請(qǐng)求的事務(wù)在InnoDB存儲(chǔ)引擎創(chuàng)建一個(gè)行記錄鎖。當(dāng)有大量并發(fā)的線(xiàn)程更新記錄時(shí),會(huì)導(dǎo)致InnoDB存儲(chǔ)引擎的鎖對(duì)象非常多,巨大的鎖操作的額外開(kāi)銷(xiāo)導(dǎo)致性能下降非常嚴(yán)重。因此,例如,在高并發(fā)的熱點(diǎn)行記錄變更時(shí),MySQL數(shù)據(jù)庫(kù)的InnoDB存儲(chǔ)引擎性能非常差。例如,2K并發(fā)更新16條記錄性能有10k TPS,但是2K并發(fā)更新20條記錄性能只有250的TPS。
對(duì)于這種熱點(diǎn)行記錄并發(fā)更新的場(chǎng)景,通常的做法為:
1.在業(yè)務(wù)方識(shí)別熱點(diǎn)行記錄加以控制,這要求業(yè)務(wù)邏輯中對(duì)更新的行能夠識(shí)別。這種做法對(duì)業(yè)務(wù)的侵入較大,并且不通用。另外,在集群環(huán)境下,即使業(yè)務(wù)方做控制,也有可能在某個(gè)數(shù)據(jù)庫(kù)服務(wù)器上的并發(fā)訪(fǎng)問(wèn)量非常大。
2.在數(shù)據(jù)庫(kù)層識(shí)別熱點(diǎn)行記錄加以控制,這要求數(shù)據(jù)庫(kù)本身能識(shí)別熱點(diǎn)行的功能。類(lèi)似典型的KV(鍵值)存儲(chǔ)系統(tǒng),每個(gè)操作都帶有當(dāng)前行記錄的標(biāo)記。類(lèi)似系統(tǒng)能夠?qū)⒉l(fā)的行記錄訪(fǎng)問(wèn)加以控制,將相同行的記錄放在相同的隊(duì)列中,從而避免熱點(diǎn)行記錄并發(fā)量過(guò)大的問(wèn)題。但是該方法對(duì)于非KV存儲(chǔ)系統(tǒng)而言是無(wú)能為力的。
因此,需要一種針對(duì)多線(xiàn)程的數(shù)據(jù)更新尤其是數(shù)據(jù)并發(fā)更新的加鎖方法和設(shè)備。通過(guò)該加鎖方法和設(shè)備,能夠在InnoDB存儲(chǔ)引擎識(shí)別并發(fā)更新的熱點(diǎn)數(shù)據(jù)并對(duì)其線(xiàn)程進(jìn)行調(diào)度控制從而實(shí)現(xiàn)改善的加鎖過(guò)程,提高InnoDB存儲(chǔ)引擎的性能。
發(fā)明內(nèi)容
因此,本申請(qǐng)的目的在于提供一種針對(duì)多線(xiàn)程的數(shù)據(jù)并發(fā)更新的加鎖技術(shù),以克服上述缺陷。
根據(jù)本申請(qǐng)一個(gè)方面的實(shí)施例,提供一種多線(xiàn)程的數(shù)據(jù)更新的加鎖方法,其特征在于,包括:確定對(duì)InnoDB存儲(chǔ)引擎中要更新的線(xiàn)程進(jìn)行加鎖的請(qǐng)求是否成功;如果所述加鎖請(qǐng)求失敗,則判斷所述等待鎖數(shù)是否超過(guò)預(yù)定閾值;如果所述等待鎖數(shù)沒(méi)有超過(guò)預(yù)定閾值,則創(chuàng)建針對(duì)所述失敗線(xiàn)程的鎖并等待加鎖;如果所述等待鎖數(shù)超過(guò)預(yù)定閾值,則將所述加鎖失敗線(xiàn)程調(diào)度出InnoDB存儲(chǔ)引擎并將其哈希到各個(gè)桶中;將相同桶中的加鎖失敗線(xiàn)程以輪詢(xún)的方式傳送到InnoDB存儲(chǔ)引擎以請(qǐng)求加鎖。
根據(jù)本申請(qǐng)的實(shí)施例,該方法可以進(jìn)一步包括:如果所述加鎖請(qǐng)求成功,則創(chuàng)建針對(duì)成功線(xiàn)程的鎖并執(zhí)行加鎖。
根據(jù)本申請(qǐng)的實(shí)施例,該方法可以進(jìn)一步包括:在執(zhí)行加鎖并對(duì)加鎖的線(xiàn)程執(zhí)行事務(wù)后,釋放鎖。
根據(jù)本申請(qǐng)的實(shí)施例,該方法可以進(jìn)一步包括:通過(guò)基于所述鎖的釋放從而等待加鎖的加鎖失敗線(xiàn)程轉(zhuǎn)換成加鎖狀態(tài),更新等待鎖數(shù)。
根據(jù)本申請(qǐng)的實(shí)施例,在該方法中,創(chuàng)建針對(duì)所述失敗線(xiàn)程的鎖并等待加鎖的步驟還可以包括:基于創(chuàng)建針對(duì)所述失敗線(xiàn)程的鎖并等待加鎖,更新等待鎖數(shù)。
根據(jù)本申請(qǐng)的實(shí)施例,在該方法中,將所述加鎖失敗線(xiàn)程調(diào)度出InnoDB存儲(chǔ)引擎并將其哈希到各個(gè)桶中的步驟進(jìn)一步包括:基于所述失敗線(xiàn)程的鎖信息的哈希值哈希到各個(gè)桶中,其中相同記錄的失敗線(xiàn)程的鎖信息的哈希值相同,從而哈希到相同的桶中。
根據(jù)本申請(qǐng)的實(shí)施例,該方法進(jìn)一步包括:將不同桶中的加鎖失敗線(xiàn)程以并行的方式傳送到InnoDB存儲(chǔ)引擎以請(qǐng)求加鎖。
根據(jù)本申請(qǐng)另一方面的實(shí)施例,提供一種多線(xiàn)程的數(shù)據(jù)更新的加鎖設(shè)備,其特征在于,包括:請(qǐng)求確定模塊,用于確定對(duì)InnoDB存儲(chǔ)引擎中要更新的線(xiàn)程進(jìn)行加鎖的請(qǐng)求是否成功;判斷模塊,用于如果所述加鎖請(qǐng)求失敗,則判斷所述等待鎖數(shù)是否超過(guò)預(yù)定閾值;鎖創(chuàng)建模塊,用于如果所述等待鎖數(shù)沒(méi)有超過(guò)預(yù)定閾值,則創(chuàng)建針對(duì)所述失敗線(xiàn)程的鎖并等待加鎖;調(diào)度模塊,用于如果所述等待鎖數(shù)超過(guò)預(yù)定閾值,則將所述加鎖失敗線(xiàn)程調(diào)度出InnoDB存儲(chǔ)引擎并將其哈希到各個(gè)桶中;傳送模塊,用于將不同桶中的加鎖失敗線(xiàn)程以并行的方式傳送到InnoDB存儲(chǔ)引擎并且將相同桶中的加鎖失敗線(xiàn)程以輪詢(xún)的方式傳送到InnoDB存儲(chǔ)引擎以請(qǐng)求加鎖。
該專(zhuān)利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專(zhuān)利權(quán)人授權(quán)。該專(zhuān)利全部權(quán)利屬于阿里巴巴集團(tuán)控股有限公司,未經(jīng)阿里巴巴集團(tuán)控股有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買(mǎi)此專(zhuān)利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310259869.3/2.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專(zhuān)利網(wǎng)。
- 上一篇:一種鉆孔機(jī)的新型固定裝置
- 下一篇:一種消除退扭的斜拉索張拉裝置
- 同類(lèi)專(zhuān)利
- 專(zhuān)利分類(lèi)
- 數(shù)據(jù)顯示系統(tǒng)、數(shù)據(jù)中繼設(shè)備、數(shù)據(jù)中繼方法、數(shù)據(jù)系統(tǒng)、接收設(shè)備和數(shù)據(jù)讀取方法
- 數(shù)據(jù)記錄方法、數(shù)據(jù)記錄裝置、數(shù)據(jù)記錄媒體、數(shù)據(jù)重播方法和數(shù)據(jù)重播裝置
- 數(shù)據(jù)發(fā)送方法、數(shù)據(jù)發(fā)送系統(tǒng)、數(shù)據(jù)發(fā)送裝置以及數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)顯示系統(tǒng)、數(shù)據(jù)中繼設(shè)備、數(shù)據(jù)中繼方法及數(shù)據(jù)系統(tǒng)
- 數(shù)據(jù)嵌入裝置、數(shù)據(jù)嵌入方法、數(shù)據(jù)提取裝置及數(shù)據(jù)提取方法
- 數(shù)據(jù)管理裝置、數(shù)據(jù)編輯裝置、數(shù)據(jù)閱覽裝置、數(shù)據(jù)管理方法、數(shù)據(jù)編輯方法以及數(shù)據(jù)閱覽方法
- 數(shù)據(jù)發(fā)送和數(shù)據(jù)接收設(shè)備、數(shù)據(jù)發(fā)送和數(shù)據(jù)接收方法
- 數(shù)據(jù)發(fā)送裝置、數(shù)據(jù)接收裝置、數(shù)據(jù)收發(fā)系統(tǒng)、數(shù)據(jù)發(fā)送方法、數(shù)據(jù)接收方法和數(shù)據(jù)收發(fā)方法
- 數(shù)據(jù)發(fā)送方法、數(shù)據(jù)再現(xiàn)方法、數(shù)據(jù)發(fā)送裝置及數(shù)據(jù)再現(xiàn)裝置
- 數(shù)據(jù)發(fā)送方法、數(shù)據(jù)再現(xiàn)方法、數(shù)據(jù)發(fā)送裝置及數(shù)據(jù)再現(xiàn)裝置
- 一種數(shù)據(jù)庫(kù)讀寫(xiě)分離的方法和裝置
- 一種手機(jī)動(dòng)漫人物及背景創(chuàng)作方法
- 一種通訊綜合測(cè)試終端的測(cè)試方法
- 一種服裝用人體測(cè)量基準(zhǔn)點(diǎn)的獲取方法
- 系統(tǒng)升級(jí)方法及裝置
- 用于虛擬和接口方法調(diào)用的裝置和方法
- 線(xiàn)程狀態(tài)監(jiān)控方法、裝置、計(jì)算機(jī)設(shè)備和存儲(chǔ)介質(zhì)
- 一種JAVA智能卡及其虛擬機(jī)組件優(yōu)化方法
- 檢測(cè)程序中方法耗時(shí)的方法、裝置及存儲(chǔ)介質(zhì)
- 函數(shù)的執(zhí)行方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)





