System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內(nèi)的位置。 參數(shù)名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術(shù)實(shí)現(xiàn)步驟摘要】
本申請涉及數(shù)據(jù)庫,具體涉及一種基于隊(duì)列的數(shù)據(jù)異步寫入方法以及數(shù)據(jù)庫。
技術(shù)介紹
1、在數(shù)據(jù)庫操作中,數(shù)據(jù)寫入過程涉及多個(gè)關(guān)鍵步驟,包括sql解析、生成執(zhí)行計(jì)劃、數(shù)據(jù)日志寫入磁盤(也被稱為刷盤)以及確認(rèn)數(shù)據(jù)寫入成功。當(dāng)一條sql包含多條數(shù)據(jù)時(shí),數(shù)據(jù)庫存儲(chǔ)引擎通常會(huì)先解析sql并生成執(zhí)行計(jì)劃,然后以批量追加寫入的方式將數(shù)據(jù)寫入磁盤日志文件,確保所有內(nèi)存中的數(shù)據(jù)成功寫入后,才返回sql執(zhí)行成功。
2、在數(shù)據(jù)寫入磁盤時(shí),無論是一次寫入4k大小的數(shù)據(jù)還是16m大小的數(shù)據(jù),由于涉及單次io操作,耗時(shí)差別不大。然而,若將16m的數(shù)據(jù)分割成4096個(gè)4k的數(shù)據(jù),由于數(shù)據(jù)條數(shù)的增加,需要進(jìn)行大量的io操作,寫入耗時(shí)將顯著增加。目前,為了保持?jǐn)?shù)據(jù)一致性,sql解析和數(shù)據(jù)刷盤被設(shè)置為串行操作,如此在sql保護(hù)多條數(shù)據(jù)的情形下,服務(wù)器需要耗時(shí)較長才能完成刷盤,效率比較低。
3、例如,在利用etl(extract-transform-load,將數(shù)據(jù)從源端經(jīng)過抽取、轉(zhuǎn)換、加載至目的端)工具的大數(shù)據(jù)量寫入場景下,sql數(shù)量會(huì)比較多,每條sql包含幾千條數(shù)據(jù)量,當(dāng)前的這種串行化的數(shù)據(jù)寫入方式,會(huì)影響數(shù)據(jù)寫入效率,減慢數(shù)據(jù)寫入速度,在非常看重?cái)?shù)據(jù)傳輸速度的etl場景中,這種情況是不被允許的。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本申請公開一種基于隊(duì)列的數(shù)據(jù)異步寫入方法,應(yīng)用于數(shù)據(jù)庫的客戶端,所述客戶端對應(yīng)于所述數(shù)據(jù)庫的服務(wù)端,所述隊(duì)列與所述服務(wù)端通信連接。所述方法包括:接收針對待寫入數(shù)據(jù)的寫入請求
2、在一些實(shí)施例中,響應(yīng)于完成全部寫入語句的發(fā)送并接收到所述第一響應(yīng),所述方法還包括:將寫入方式設(shè)置為同步,恢復(fù)自動(dòng)刷盤,以使所述服務(wù)端響應(yīng)于恢復(fù)自動(dòng)刷盤,周期性輪詢所述隊(duì)列并將所述隊(duì)列中的數(shù)據(jù)全部寫入磁盤,以完成所述待寫入數(shù)據(jù)被全部寫入。
3、在一些實(shí)施例中,所述服務(wù)端響應(yīng)于完成所述待寫入數(shù)據(jù)的全部寫入,向所述客戶端返回全部寫入成功的第二響應(yīng);所述方法還包括:響應(yīng)于接受到所述第二響應(yīng),確定所述待寫入數(shù)據(jù)全部完成寫入,以提示完成所述寫入請求。
4、在一些實(shí)施例中,所述服務(wù)端響應(yīng)于任意待寫入數(shù)據(jù)的寫入失敗,向所述客戶端返回寫入失敗的第三響應(yīng);所述方法還包括:響應(yīng)于接受到所述第三響應(yīng),確定所述寫入請求執(zhí)行失敗,重新執(zhí)行所述寫入請求直至成功或者達(dá)到預(yù)設(shè)執(zhí)行次數(shù)。
5、在一些實(shí)施例中,所述客戶端記錄了與所述寫入請求對應(yīng)的全部寫入語句與待寫入數(shù)據(jù)的第一對應(yīng)關(guān)系,所述服務(wù)端記錄了接受到的寫入語句和解析出的待寫入數(shù)據(jù)的第二對應(yīng)關(guān)系,在所述服務(wù)端提供的環(huán)境變量機(jī)制中添加用于提示執(zhí)行失敗sql的失敗sql變量,所述服務(wù)端響應(yīng)于任意待寫入數(shù)據(jù)的寫入失敗,向所述客戶端返回寫入失敗的第三響應(yīng);所述方法還包括:響應(yīng)于接受到所述第三響應(yīng),向所述服務(wù)端發(fā)送獲取執(zhí)行失敗sql的請求,以使所述服務(wù)端根據(jù)寫入失敗的目標(biāo)數(shù)據(jù)查詢所述第二對應(yīng)關(guān)系確定第一失敗sql,并將所述第一失敗sql寫入所述失敗sql變量,返回所述客戶端;獲取所述環(huán)境變量機(jī)制中的所述失敗sql變量記錄的所述第一失敗sql,查詢所述第一對應(yīng)關(guān)系確定對應(yīng)的重寫數(shù)據(jù);基于所述重寫數(shù)據(jù)生成第一重寫sql,將所述第一重寫sql發(fā)送至所述服務(wù)端執(zhí)行所述重寫數(shù)據(jù)的重寫直至重寫成功或者達(dá)到預(yù)設(shè)執(zhí)行次數(shù)。
6、在一些實(shí)施例中,所述客戶端中預(yù)先部署了sql解析單元,所述服務(wù)端中預(yù)先部署了sql生成單元,在所述服務(wù)端提供的環(huán)境變量機(jī)制中添加用于提示執(zhí)行失敗sql的失敗sql變量,所述服務(wù)端響應(yīng)于任意待寫入數(shù)據(jù)的寫入失敗,向所述客戶端返回寫入失敗的第三響應(yīng);所述方法還包括:響應(yīng)于接受到所述第三響應(yīng),向所述服務(wù)端發(fā)送獲取執(zhí)行失敗sql的請求,以使所述服務(wù)端調(diào)用所述sql生成單元根據(jù)寫入失敗的目標(biāo)數(shù)據(jù)生成第二失敗sql,并將所述第二失敗sql寫入所述失敗sql變量,返回所述客戶端;獲取所述環(huán)境變量機(jī)制中的所述失敗sql變量記錄的所述第二失敗sql,調(diào)用所述sql解析單元解析出失敗數(shù)據(jù);針對接收到的全部失敗數(shù)據(jù)生成第二重寫sql,將所述第二重寫sql發(fā)送至所述服務(wù)端執(zhí)行所述重寫數(shù)據(jù)的重寫直至重寫成功或者達(dá)到預(yù)設(shè)執(zhí)行次數(shù)。
7、在一些實(shí)施例中,在所述服務(wù)端提供的環(huán)境變量機(jī)制中添加用于控制是否自動(dòng)刷盤的環(huán)境變量;所述將寫入方式設(shè)置為異步,關(guān)閉自動(dòng)刷盤,包括:調(diào)用所述服務(wù)端提供的環(huán)境變量機(jī)制,將所述環(huán)境變量機(jī)制中的與數(shù)據(jù)刷盤模式對應(yīng)的所述環(huán)境變量設(shè)置為第一標(biāo)識(shí),以將寫入方式設(shè)置為異步,關(guān)閉自動(dòng)刷盤;所述將寫入方式設(shè)置為同步,恢復(fù)自動(dòng)刷盤,包括:將所述環(huán)境變量設(shè)置為第二標(biāo)識(shí),以將寫入方式設(shè)置為同步,開啟自動(dòng)刷盤。
8、在一些實(shí)施例中,所述服務(wù)端執(zhí)行所述異步寫入磁盤,包括:監(jiān)聽所述隊(duì)列;響應(yīng)于監(jiān)聽到所述隊(duì)列中存在任意數(shù)據(jù)或者存在的數(shù)據(jù)量達(dá)到預(yù)設(shè)閾值,調(diào)用執(zhí)行器將所述隊(duì)列中的數(shù)據(jù)寫入磁盤。
9、本申請還提出一種基于隊(duì)列的數(shù)據(jù)異步寫入方法,應(yīng)用于數(shù)據(jù)庫的服務(wù)端,所述服務(wù)端對應(yīng)于所述數(shù)據(jù)庫的客戶端,所述隊(duì)列與所述服務(wù)端通信連接;所述客戶端接收針對待寫入數(shù)據(jù)的寫入請求;其中,通過至少一條寫入語句完成所述待寫入數(shù)據(jù)的寫入;所述客戶端響應(yīng)于所述寫入請求,將寫入方式設(shè)置為異步,關(guān)閉自動(dòng)刷盤,并且將所述至少一條寫入語句中的預(yù)設(shè)數(shù)量的寫入語句發(fā)送至所述服務(wù)端;所述方法包括:解析所述預(yù)設(shè)數(shù)量的寫入語句;將對應(yīng)的目標(biāo)待寫入數(shù)據(jù)寫入所述隊(duì)列執(zhí)行異步寫入磁盤;向所述客戶端返回臨時(shí)執(zhí)行成功的第一響應(yīng),以使所述客戶端響應(yīng)于接收到所述第一響應(yīng),從剩余的寫入語句中獲取所述預(yù)設(shè)數(shù)量的寫入語句發(fā)送至所述服務(wù)端執(zhí)行所述解析與所述異步寫入磁盤的操作,直到完成全部寫入語句的發(fā)送和全部待寫入數(shù)據(jù)的異步寫入。
10、本申請還提出一種數(shù)據(jù)庫,所述數(shù)據(jù)庫包括客戶端和服務(wù)端,所述服務(wù)端與隊(duì)列通信連接;所述客戶端,接收針對待寫入數(shù)據(jù)的寫入請求;其中,通過至少一條寫入語句完成所述待寫入數(shù)據(jù)的寫入;響應(yīng)于所述寫入請求,將寫入方式設(shè)置為異步,關(guān)閉自動(dòng)刷盤,并且將所述至少一條寫入語句中的預(yù)設(shè)數(shù)量的寫入語句發(fā)送至所述服務(wù)端;所述服務(wù)端,解析所述預(yù)設(shè)數(shù)量的寫入語句,將對應(yīng)的目標(biāo)待寫入數(shù)據(jù)寫入所述隊(duì)列執(zhí)行異步寫入磁盤,并向所述客戶端返回臨時(shí)執(zhí)行成功的第一響應(yīng),以使所述客戶端響應(yīng)于接收到所述第一響應(yīng),從剩余的寫入語句中獲取所述預(yù)設(shè)數(shù)量的寫入語句發(fā)送至所述服務(wù)端執(zhí)行所述解析與所述異步寫入磁盤的操作,直到完成全部寫入語句的發(fā)送本文檔來自技高網(wǎng)...
【技術(shù)保護(hù)點(diǎn)】
1.一種基于隊(duì)列的數(shù)據(jù)異步寫入方法,應(yīng)用于數(shù)據(jù)庫的客戶端,所述客戶端對應(yīng)于所述數(shù)據(jù)庫的服務(wù)端,其特征在于,所述隊(duì)列與所述服務(wù)端通信連接;所述方法包括:
2.根據(jù)權(quán)利要求1所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,響應(yīng)于完成全部寫入語句的發(fā)送并接收到所述第一響應(yīng),所述方法還包括:
3.根據(jù)權(quán)利要求2所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,所述服務(wù)端響應(yīng)于完成所述待寫入數(shù)據(jù)的全部寫入,向所述客戶端返回全部寫入成功的第二響應(yīng);
4.根據(jù)權(quán)利要求2所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,所述服務(wù)端響應(yīng)于任意待寫入數(shù)據(jù)的寫入失敗,向所述客戶端返回寫入失敗的第三響應(yīng);
5.根據(jù)權(quán)利要求2所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,所述客戶端記錄了與所述寫入請求對應(yīng)的全部寫入語句與待寫入數(shù)據(jù)的第一對應(yīng)關(guān)系,所述服務(wù)端記錄了接受到的寫入語句和解析出的待寫入數(shù)據(jù)的第二對應(yīng)關(guān)系,在所述服務(wù)端提供的環(huán)境變量機(jī)制中添加用于提示執(zhí)行失敗SQL的失敗SQL變量,
6.根據(jù)權(quán)利要求2所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,所述
7.根據(jù)權(quán)利要求2所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,在所述服務(wù)端提供的環(huán)境變量機(jī)制中添加用于控制是否自動(dòng)刷盤的環(huán)境變量;所述將寫入方式設(shè)置為異步,關(guān)閉自動(dòng)刷盤,包括:
8.根據(jù)權(quán)利要求1所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,所述服務(wù)端執(zhí)行所述異步寫入磁盤,包括:
9.一種基于隊(duì)列的數(shù)據(jù)異步寫入方法,應(yīng)用于數(shù)據(jù)庫的服務(wù)端,所述服務(wù)端對應(yīng)于所述數(shù)據(jù)庫的客戶端,其特征在于,所述隊(duì)列與所述服務(wù)端通信連接;所述客戶端接收針對待寫入數(shù)據(jù)的寫入請求;其中,通過至少一條寫入語句完成所述待寫入數(shù)據(jù)的寫入;所述客戶端響應(yīng)于所述寫入請求,將寫入方式設(shè)置為異步,關(guān)閉自動(dòng)刷盤,并且將所述至少一條寫入語句中的預(yù)設(shè)數(shù)量的寫入語句發(fā)送至所述服務(wù)端;
10.一種數(shù)據(jù)庫,所述數(shù)據(jù)庫包括客戶端和服務(wù)端,其特征在于,所述服務(wù)端與隊(duì)列通信連接;
...【技術(shù)特征摘要】
1.一種基于隊(duì)列的數(shù)據(jù)異步寫入方法,應(yīng)用于數(shù)據(jù)庫的客戶端,所述客戶端對應(yīng)于所述數(shù)據(jù)庫的服務(wù)端,其特征在于,所述隊(duì)列與所述服務(wù)端通信連接;所述方法包括:
2.根據(jù)權(quán)利要求1所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,響應(yīng)于完成全部寫入語句的發(fā)送并接收到所述第一響應(yīng),所述方法還包括:
3.根據(jù)權(quán)利要求2所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,所述服務(wù)端響應(yīng)于完成所述待寫入數(shù)據(jù)的全部寫入,向所述客戶端返回全部寫入成功的第二響應(yīng);
4.根據(jù)權(quán)利要求2所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,所述服務(wù)端響應(yīng)于任意待寫入數(shù)據(jù)的寫入失敗,向所述客戶端返回寫入失敗的第三響應(yīng);
5.根據(jù)權(quán)利要求2所述的基于隊(duì)列的數(shù)據(jù)異步寫入方法,其特征在于,所述客戶端記錄了與所述寫入請求對應(yīng)的全部寫入語句與待寫入數(shù)據(jù)的第一對應(yīng)關(guān)系,所述服務(wù)端記錄了接受到的寫入語句和解析出的待寫入數(shù)據(jù)的第二對應(yīng)關(guān)系,在所述服務(wù)端提供的環(huán)境變量機(jī)制中添加用于提示執(zhí)行失敗sql的失敗sql變量,
6.根據(jù)權(quán)利要求2所述的基于隊(duì)列的數(shù)...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:劉維霞,
申請(專利權(quán))人:靈岫科技深圳有限公司,
類型:發(fā)明
國別省市:
還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會(huì)獲得科技券。