国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種時(shí)序數(shù)據(jù)庫的數(shù)據(jù)刪除方法及系統(tǒng)與流程

      文檔序號:12719821閱讀:620來源:國知局
      一種時(shí)序數(shù)據(jù)庫的數(shù)據(jù)刪除方法及系統(tǒng)與流程

      本發(fā)明涉及數(shù)據(jù)庫領(lǐng)域,更具體的說,涉及一種時(shí)序數(shù)據(jù)庫的數(shù)據(jù)刪除方法及系統(tǒng)。



      背景技術(shù):

      隨著云計(jì)算技術(shù)的發(fā)展,用戶對計(jì)算資源使用的便捷性要求越來越高,與此同時(shí)就更希望能實(shí)時(shí)的對用戶數(shù)據(jù)進(jìn)行分析,于是專門針對這種時(shí)間維度追加的結(jié)構(gòu)化數(shù)據(jù)庫,即時(shí)序數(shù)據(jù)庫應(yīng)運(yùn)而生。

      時(shí)序數(shù)據(jù)庫因?yàn)閿?shù)據(jù)以時(shí)間維度追加,故而可以根據(jù)這個(gè)特性壓縮存儲(chǔ),但是一旦用戶想要?jiǎng)h除就需要對這些數(shù)據(jù)解壓縮,同時(shí)為了確保數(shù)據(jù)的一致性及安全,在進(jìn)行實(shí)際刪除的過程會(huì)阻止數(shù)據(jù)的寫入和查詢。刪除數(shù)據(jù)是一個(gè)很普遍的需求,用戶在寫錯(cuò)或者不用某些數(shù)據(jù)時(shí),為了節(jié)省資源,就會(huì)刪除。但是現(xiàn)有的刪除會(huì)阻塞用戶的正常請求,導(dǎo)致服務(wù)不可用。同時(shí)有些服務(wù)會(huì)因?yàn)橛袛?shù)據(jù)在寫入導(dǎo)致刪除任務(wù)特別慢。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明所要解決的技術(shù)問題是提供一種執(zhí)行刪除任務(wù)同時(shí)保證數(shù)據(jù)一致、保證用戶數(shù)據(jù)不丟失的時(shí)序數(shù)據(jù)庫的數(shù)據(jù)刪除方法及系統(tǒng)。

      本發(fā)明的目的是通過以下技術(shù)方案來實(shí)現(xiàn)的:

      一種時(shí)序數(shù)據(jù)庫的數(shù)據(jù)刪除方法,包括步驟:

      將多個(gè)時(shí)序數(shù)據(jù)庫構(gòu)建為一個(gè)組;

      將所有的組統(tǒng)一管理;

      以組為單元進(jìn)行刪除。

      進(jìn)一步的,將多個(gè)時(shí)序數(shù)據(jù)庫構(gòu)建為一個(gè)組包括:

      同組的時(shí)序數(shù)據(jù)庫實(shí)例部署在不同的服務(wù)器上、同組的時(shí)序數(shù)據(jù)庫實(shí)例網(wǎng)絡(luò)訪問速度相當(dāng)、同組的時(shí)序數(shù)據(jù)庫實(shí)例磁盤存儲(chǔ)空間相當(dāng)和同組的時(shí)序數(shù)據(jù)庫實(shí)例各自保存一份完整的用戶數(shù)據(jù)中的至少一項(xiàng)。

      有利于數(shù)據(jù)的安全和調(diào)用,有利于資源的合理分配和充分應(yīng)用,提高整體的反應(yīng)速度。

      進(jìn)一步的,以組為單元進(jìn)行刪除包括:

      拆分刪除涉及的組;

      查看刪除涉及的一個(gè)組的所有實(shí)例的讀寫狀態(tài);

      根據(jù)實(shí)例的讀寫狀態(tài)對一個(gè)組的每個(gè)實(shí)例執(zhí)行刪除任務(wù)。

      開始刪除后,第一步就是將用戶數(shù)據(jù)分解為涉及的組,對于每個(gè)組,查看是否所有實(shí)例都在可讀可寫狀態(tài),若否,則等待一段時(shí)間再次嘗試,若是,則開始依次對每個(gè)實(shí)例執(zhí)行刪除任務(wù)。減小工作量,不需要對整個(gè)數(shù)據(jù)進(jìn)行處理,僅對需要?jiǎng)h除的組進(jìn)行處理。

      進(jìn)一步的,刪除任務(wù)包括:

      找到尚未執(zhí)行刪除任務(wù)的實(shí)例;

      記錄起始的數(shù)據(jù)標(biāo)記;

      刪除數(shù)據(jù)開始,并將實(shí)例變?yōu)椴豢勺x不可寫狀態(tài);

      刪除數(shù)據(jù)完畢,并記錄下結(jié)束的數(shù)據(jù)標(biāo)記,同時(shí)將實(shí)例變?yōu)榭蓪懖豢勺x狀態(tài);

      恢復(fù)從起始的數(shù)據(jù)標(biāo)記到結(jié)束的數(shù)據(jù)標(biāo)記期間的所有請求數(shù)據(jù),同時(shí)接收寫入請求;

      當(dāng)數(shù)據(jù)恢復(fù)完畢后,將實(shí)例變?yōu)榭勺x可寫狀態(tài)。

      找到尚未執(zhí)行刪除任務(wù)的實(shí)例,然后記錄下起始的數(shù)據(jù)標(biāo)記startOffset,然后開始執(zhí)行刪除,直到刪除完畢,記錄下結(jié)束的數(shù)據(jù)標(biāo)記endOffset,然后開始恢復(fù)從startOffset到endOffset這期間的所有用戶請求數(shù)據(jù),同時(shí)正常接收用戶的寫入請求,但是不支持用戶的查詢。當(dāng)數(shù)據(jù)恢復(fù)完畢后,實(shí)例變?yōu)榭勺x可寫,繼續(xù)下一個(gè)實(shí)例的刪除。當(dāng)所有的實(shí)例都刪除完畢時(shí),就結(jié)束刪除任務(wù)。

      進(jìn)一步的,拆分刪除涉及的組包括多個(gè)組,并發(fā)式的同時(shí)對該多個(gè)組執(zhí)行刪除任務(wù)。

      并發(fā)式的處理速度更快效率更高。

      進(jìn)一步的,根據(jù)實(shí)例的讀寫狀態(tài)對一個(gè)組的每個(gè)實(shí)例執(zhí)行刪除任務(wù)包括:

      同組所有實(shí)例都是可讀可寫狀態(tài)才開始刪除任務(wù)。

      防止誤操作,保證了一致性。

      進(jìn)一步的,根據(jù)實(shí)例的讀寫狀態(tài)對一個(gè)組的每個(gè)實(shí)例執(zhí)行刪除任務(wù)包括:

      同組的所有實(shí)例中,同一時(shí)刻只允許一個(gè)實(shí)例執(zhí)行刪除任務(wù)。

      防止誤操作,保證了一致性。

      進(jìn)一步的,根據(jù)實(shí)例的讀寫狀態(tài)對一個(gè)組的每個(gè)實(shí)例執(zhí)行刪除任務(wù)包括:

      該組包括可讀可寫的實(shí)例。

      可以正常的寫入到同組的其他可讀可寫的實(shí)例;也可以正常的從同組的任意一個(gè)可讀可寫的實(shí)例查詢數(shù)據(jù)。

      進(jìn)一步的,當(dāng)數(shù)據(jù)恢復(fù)完畢后,將實(shí)例變?yōu)榭勺x可寫狀態(tài)還包括:

      設(shè)置一個(gè)外部的消息隊(duì)列,存儲(chǔ)處于刪除狀態(tài)時(shí)的用戶請求。

      用戶的數(shù)據(jù)寫入到所有可讀可寫實(shí)例成功后,還要再寫入一個(gè)外部的消息隊(duì)列,這些都成功后才反饋給用戶成功。當(dāng)正在刪除的實(shí)例刪除完畢后,標(biāo)記為可寫不可讀,此時(shí)不立即開始下一個(gè)實(shí)例的刪除,而是通過之前記錄在外部消息隊(duì)列的記錄,將這段時(shí)間的用戶請求,補(bǔ)寫到這個(gè)剛剛完成刪除任務(wù)的實(shí)例,當(dāng)補(bǔ)寫完成后,這個(gè)實(shí)例恢復(fù)可讀可寫狀態(tài),此時(shí)開始下一個(gè)實(shí)例的刪除;當(dāng)同組的所有實(shí)例都完成刪除任務(wù)后,該組的刪除任務(wù)正式完成。

      進(jìn)一步的,該方法還包括:

      以組為單元進(jìn)行數(shù)據(jù)寫入和查詢。

      正常情況下的以組為單元的數(shù)據(jù)寫入和查詢;狀態(tài)處于刪除狀態(tài)時(shí)的以組為單元的數(shù)據(jù)寫入和查詢,數(shù)據(jù)一致性較好。

      進(jìn)一步的,將所有的組統(tǒng)一管理包括:

      不同的用戶對應(yīng)不同的組或共享同一個(gè)組、一個(gè)用戶對應(yīng)一個(gè)或多個(gè)組、每個(gè)組之間的刪除互不影響中的至少一項(xiàng)。

      不同的用戶可以用不同的組也可以共享同一個(gè)組;一個(gè)用戶可以有一個(gè)或多個(gè)組;每個(gè)組之間的刪除互不影響。不同的用戶可以用不同的組也可以共享同一個(gè)組;一個(gè)用戶可以有一個(gè)或多個(gè)組;每個(gè)組之間的刪除互不影響。管理數(shù)據(jù)更加方便。

      進(jìn)一步的,以組為單元進(jìn)行數(shù)據(jù)寫入和查詢包括:根據(jù)時(shí)序數(shù)據(jù)庫狀態(tài)將同組的所有實(shí)例都寫入成功才反饋成功和/或任選一個(gè)實(shí)例進(jìn)行查詢獲得數(shù)據(jù)即反饋。

      本發(fā)明的另一優(yōu)選方案,一種時(shí)序數(shù)據(jù)庫的刪除系統(tǒng),包括:

      組調(diào)度模塊,用于將多個(gè)不同的時(shí)序數(shù)據(jù)庫實(shí)例組合成多個(gè)組并統(tǒng)一管理;

      刪除任務(wù)執(zhí)行模塊,用于以組為單元進(jìn)行刪除。

      進(jìn)一步的,該系統(tǒng)還包括:

      多個(gè)服務(wù)器,用于提供取網(wǎng)絡(luò)傳輸速率相當(dāng)、磁盤剩余空間相當(dāng)?shù)臅r(shí)序數(shù)據(jù)庫實(shí)例組成一個(gè)組。

      進(jìn)一步的,該系統(tǒng)還包括:

      元數(shù)據(jù)管理模塊,用于記錄用戶數(shù)據(jù)與時(shí)序數(shù)據(jù)庫實(shí)例的對應(yīng)關(guān)系,并且記錄時(shí)序數(shù)據(jù)庫的狀態(tài),同時(shí)對要?jiǎng)h除的數(shù)據(jù)進(jìn)行標(biāo)記,保證無法對已經(jīng)刪除的數(shù)據(jù)進(jìn)行再操作;根據(jù)寫入請求獲得請求對應(yīng)的時(shí)序數(shù)據(jù)庫實(shí)例信息,然后寫入狀態(tài)為可寫的時(shí)序數(shù)據(jù)庫實(shí)例中;根據(jù)查詢請求從狀態(tài)為可讀的時(shí)序數(shù)據(jù)庫實(shí)例中獲取數(shù)據(jù)。

      進(jìn)一步的,該系統(tǒng)還包括:

      用戶請求處理模塊,用于通過查看元數(shù)據(jù)管理模塊,獲取用戶數(shù)據(jù)與時(shí)序數(shù)據(jù)庫對應(yīng)關(guān)系,并到對應(yīng)組寫入或查詢數(shù)據(jù)。

      進(jìn)一步的,該系統(tǒng)還包括:

      消息隊(duì)列模塊,用于存儲(chǔ)處于刪除狀態(tài)的用戶請求。

      進(jìn)一步的,該系統(tǒng)還包括:

      數(shù)據(jù)恢復(fù)模塊,用于恢復(fù)處于刪除狀態(tài)的時(shí)序數(shù)據(jù)庫實(shí)例所錯(cuò)過的寫入數(shù)據(jù)。

      本發(fā)明由于多個(gè)時(shí)序數(shù)據(jù)庫構(gòu)建為一個(gè)組;將所有的組統(tǒng)一管理;以組為單元進(jìn)行刪除。需要對時(shí)序數(shù)據(jù)庫進(jìn)行刪除時(shí),以組為單元進(jìn)行刪除,因?yàn)橐粋€(gè)組由多個(gè)時(shí)序數(shù)據(jù)庫構(gòu)建而成,同組的實(shí)例有的在執(zhí)行刪除,有的實(shí)例為正常的實(shí)例,用戶此時(shí)查詢正在執(zhí)行刪除任務(wù)的組時(shí)可以通過其他未執(zhí)行刪除的實(shí)例獲取正常的結(jié)果,可以使得現(xiàn)有的時(shí)序數(shù)據(jù)庫可以正常而快速的執(zhí)行刪除任務(wù),當(dāng)用戶的刪除數(shù)據(jù)量特別大時(shí),也不會(huì)影響用戶的正常查詢數(shù)據(jù)的請求,并且保證了用戶在整個(gè)過程獲取的數(shù)據(jù)都是正確且一致的,一個(gè)組一個(gè)組的進(jìn)行刪除,互不影響,不會(huì)影響其他組的正常寫入和查詢,在保證服務(wù)可用、保證數(shù)據(jù)一致、保證用戶數(shù)據(jù)安全不丟失的情況下,完成用戶的刪除部分指定數(shù)據(jù)的任務(wù),同時(shí)做到了不同用戶互相隔離,互不影響。

      附圖說明

      圖1是本發(fā)明實(shí)施例的一種時(shí)序數(shù)據(jù)庫的數(shù)據(jù)刪除方法示意圖;

      圖2是本發(fā)明實(shí)施例的刪除過程流程圖;

      圖3是本發(fā)明實(shí)施例的刪除狀態(tài)轉(zhuǎn)換圖;

      圖4是本發(fā)明實(shí)施例的刪除過程的數(shù)據(jù)流圖。

      具體實(shí)施方式

      在更加詳細(xì)地討論示例性實(shí)施例之前應(yīng)當(dāng)提到的是,一些示例性實(shí)施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項(xiàng)操作描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時(shí)實(shí)施。此外,各項(xiàng)操作的順序可以被重新安排。當(dāng)其操作完成時(shí)所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應(yīng)于方法、函數(shù)、規(guī)程、子例程、子程序等等。

      在上下文中所稱“計(jì)算機(jī)設(shè)備”,也稱為“電腦”,是指可以通過運(yùn)行預(yù)定程序或指令來執(zhí)行數(shù)值計(jì)算和/或邏輯計(jì)算等預(yù)定處理過程的智能電子設(shè)備,其可以包括處理器與存儲(chǔ)器,由處理器執(zhí)行在存儲(chǔ)器中預(yù)存的存續(xù)指令來執(zhí)行預(yù)定處理過程,或是由ASIC、FPGA、DSP等硬件執(zhí)行預(yù)定處理過程,或是由上述二者組合來實(shí)現(xiàn)。計(jì)算機(jī)設(shè)備包括但不限于服務(wù)器、個(gè)人電腦、筆記本電腦、平板電腦、智能手機(jī)等。

      所述計(jì)算機(jī)設(shè)備包括用戶設(shè)備與網(wǎng)絡(luò)設(shè)備。其中,所述用戶設(shè)備或客戶端包括但不限于電腦、智能手機(jī)、PDA等;所述網(wǎng)絡(luò)設(shè)備包括但不限于單個(gè)網(wǎng)絡(luò)服務(wù)器、多個(gè)網(wǎng)絡(luò)服務(wù)器組成的服務(wù)器組或基于云計(jì)算(Cloud Computing)的由大量計(jì)算機(jī)或網(wǎng)絡(luò)服務(wù)器構(gòu)成的云,其中,云計(jì)算是分布式計(jì)算的一種,由一群松散耦合的計(jì)算機(jī)集組成的一個(gè)超級虛擬計(jì)算機(jī)。其中,所述計(jì)算機(jī)設(shè)備可單獨(dú)運(yùn)行來實(shí)現(xiàn)本發(fā)明,也可接入網(wǎng)絡(luò)并通過與網(wǎng)絡(luò)中的其他計(jì)算機(jī)設(shè)備的交互操作來實(shí)現(xiàn)本發(fā)明。其中,所述計(jì)算機(jī)設(shè)備所處的網(wǎng)絡(luò)包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、VPN網(wǎng)絡(luò)等

      需要說明的是,所述用戶設(shè)備、客戶端、網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)等僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的計(jì)算機(jī)設(shè)備或網(wǎng)絡(luò)如可適用于本發(fā)明,也應(yīng)包含在本發(fā)明保護(hù)范圍以內(nèi),并以引用方式包含于此。

      后面所討論的方法(其中一些通過流程圖示出)可以通過硬件、軟件、固件、中間件、微代碼、硬件描述語言或者其任意組合來實(shí)施。當(dāng)用軟件、固件、中間件或微代碼來實(shí)施時(shí),用以實(shí)施必要任務(wù)的程序代碼或代碼段可以被存儲(chǔ)在機(jī)器或計(jì)算機(jī)可讀介質(zhì)(比如存儲(chǔ)介質(zhì))中。(一個(gè)或多個(gè))處理器可以實(shí)施必要的任務(wù)。

      這里所公開的具體結(jié)構(gòu)和功能細(xì)節(jié)僅僅是代表性的,并且是用于描述本發(fā)明的示例性實(shí)施例的目的。但是本發(fā)明可以通過許多替換形式來具體實(shí)現(xiàn),并且不應(yīng)當(dāng)被解釋成僅僅受限于這里所闡述的實(shí)施例。

      應(yīng)當(dāng)理解的是,雖然在這里可能使用了術(shù)語“第一”、“第二”等等來描述各個(gè)單元,但是這些單元不應(yīng)當(dāng)受這些術(shù)語限制。使用這些術(shù)語僅僅是為了將一個(gè)單元與另一個(gè)單元進(jìn)行區(qū)分。舉例來說,在不背離示例性實(shí)施例的范圍的情況下,第一單元可以被稱為第二單元,并且類似地第二單元可以被稱為第一單元。這里所使用的術(shù)語“和/或”包括其中一個(gè)或更多所列出的相關(guān)聯(lián)項(xiàng)目的任意和所有組合。

      應(yīng)當(dāng)理解的是,當(dāng)一個(gè)單元被稱為“連接”或“耦合”到另一單元時(shí),其可以直接連接或耦合到所述另一單元,或者可以存在中間單元。與此相對,當(dāng)一個(gè)單元被稱為“直接連接”或“直接耦合”到另一單元時(shí),則不存在中間單元。應(yīng)當(dāng)按照類似的方式來解釋被用于描述單元之間的關(guān)系的其他詞語(例如“處于...之間”相比于“直接處于...之間”,“與...鄰近”相比于“與...直接鄰近”等等)。

      這里所使用的術(shù)語僅僅是為了描述具體實(shí)施例而不意圖限制示例性實(shí)施例。除非上下文明確地另有所指,否則這里所使用的單數(shù)形式“一個(gè)”、“一項(xiàng)”還意圖包括復(fù)數(shù)。還應(yīng)當(dāng)理解的是,這里所使用的術(shù)語“包括”和/或“包含”規(guī)定所陳述的特征、整數(shù)、步驟、操作、單元和/或組件的存在,而不排除存在或添加一個(gè)或更多其他特征、整數(shù)、步驟、操作、單元、組件和/或其組合。

      還應(yīng)當(dāng)提到的是,在一些替換實(shí)現(xiàn)方式中,所提到的功能/動(dòng)作可以按照不同于附圖中標(biāo)示的順序發(fā)生。舉例來說,取決于所涉及的功能/動(dòng)作,相繼示出的兩幅圖實(shí)際上可以基本上同時(shí)執(zhí)行或者有時(shí)可以按照相反的順序來執(zhí)行。

      下面結(jié)合附圖和較佳的實(shí)施例對本發(fā)明作進(jìn)一步說明。

      如圖1所示,一種時(shí)序數(shù)據(jù)庫的數(shù)據(jù)刪除方法,包括步驟:

      S1:將多個(gè)時(shí)序數(shù)據(jù)庫構(gòu)建為一個(gè)組;

      S2:將所有的組統(tǒng)一管理;

      S3:以組為單元進(jìn)行刪除。

      由于多個(gè)時(shí)序數(shù)據(jù)庫構(gòu)建為一個(gè)組;將所有的組統(tǒng)一管理;以組為單元進(jìn)行刪除。需要對時(shí)序數(shù)據(jù)庫進(jìn)行刪除時(shí),以組為單元進(jìn)行刪除,因?yàn)橐粋€(gè)組由多個(gè)時(shí)序數(shù)據(jù)庫構(gòu)建而成,同組的實(shí)例有的在執(zhí)行刪除,有的實(shí)例為正常的實(shí)例,用戶此時(shí)查詢正在執(zhí)行刪除任務(wù)的組時(shí)可以通過其他未執(zhí)行刪除的實(shí)例獲取正常的結(jié)果,可以使得現(xiàn)有的時(shí)序數(shù)據(jù)庫可以正常而快速的執(zhí)行刪除任務(wù),當(dāng)用戶的刪除數(shù)據(jù)量特別大時(shí),也不會(huì)影響用戶的正常查詢數(shù)據(jù)的請求,并且保證了用戶在整個(gè)過程獲取的數(shù)據(jù)都是正確且一致的,一個(gè)組一個(gè)組的進(jìn)行刪除,互不影響,不會(huì)影響其他組的正常寫入和查詢,在保證服務(wù)可用、保證數(shù)據(jù)一致、保證用戶數(shù)據(jù)安全不丟失的情況下,完成用戶的刪除部分指定數(shù)據(jù)的任務(wù),同時(shí)做到了不同用戶互相隔離,互不影響。

      其中,將多個(gè)時(shí)序數(shù)據(jù)庫構(gòu)建為一個(gè)組包括:

      同組的時(shí)序數(shù)據(jù)庫實(shí)例部署在不同的服務(wù)器上、同組的時(shí)序數(shù)據(jù)庫實(shí)例網(wǎng)絡(luò)訪問速度相當(dāng)、同組的時(shí)序數(shù)據(jù)庫實(shí)例磁盤存儲(chǔ)空間相當(dāng)和同組的時(shí)序數(shù)據(jù)庫實(shí)例各自保存一份完整的用戶數(shù)據(jù)中的至少一項(xiàng)。將同組的多個(gè)時(shí)序數(shù)據(jù)庫實(shí)例部署在不同的服務(wù)器上;為同組的實(shí)例選擇網(wǎng)絡(luò)訪問速度相當(dāng)?shù)膶?shí)例構(gòu)建為同一個(gè)組;為同組的實(shí)例選擇磁盤存儲(chǔ)空間相當(dāng)?shù)膶?shí)例構(gòu)建為同一個(gè)組;同組的時(shí)序數(shù)據(jù)庫實(shí)例各自保存一份完整的用戶數(shù)據(jù)。有利于數(shù)據(jù)的安全和調(diào)用,有利于資源的合理分配和充分應(yīng)用,提高整體的反應(yīng)速度。

      其中,以組為單元進(jìn)行刪除包括:

      拆分刪除涉及的組;

      查看刪除涉及的一個(gè)組的所有實(shí)例的讀寫狀態(tài);

      根據(jù)實(shí)例的讀寫狀態(tài)對一個(gè)組的每個(gè)實(shí)例執(zhí)行刪除任務(wù)。

      開始刪除后,第一步就是將用戶數(shù)據(jù)分解為涉及的組,對于每個(gè)組,查看是否所有實(shí)例都在可讀可寫狀態(tài),若否,則等待一段時(shí)間再次嘗試,若是,則開始依次對每個(gè)實(shí)例執(zhí)行刪除任務(wù)。減小工作量,不需要對整個(gè)數(shù)據(jù)進(jìn)行處理,僅對需要?jiǎng)h除的組進(jìn)行處理。

      其中,刪除任務(wù)包括:

      找到尚未執(zhí)行刪除任務(wù)的實(shí)例;

      記錄起始的數(shù)據(jù)標(biāo)記startOffset;

      刪除數(shù)據(jù)開始,并將實(shí)例變?yōu)椴豢勺x不可寫狀態(tài);

      刪除數(shù)據(jù)完畢,并記錄下結(jié)束的數(shù)據(jù)標(biāo)記endOffset,同時(shí)將實(shí)例變?yōu)榭蓪懖豢勺x狀態(tài);

      恢復(fù)從startOffset到endOffset期間的所有請求數(shù)據(jù),同時(shí)接收寫入請求;

      當(dāng)數(shù)據(jù)恢復(fù)完畢后,將實(shí)例變?yōu)榭勺x可寫狀態(tài)。

      找到尚未執(zhí)行刪除任務(wù)的實(shí)例,然后記錄下起始的數(shù)據(jù)標(biāo)記startOffset,然后開始執(zhí)行刪除,直到刪除完畢,記錄下結(jié)束的數(shù)據(jù)標(biāo)記endOffset,然后開始恢復(fù)從startOffset到endOffset這期間的所有用戶請求數(shù)據(jù),同時(shí)正常接收用戶的寫入請求,但是不支持用戶的查詢。當(dāng)數(shù)據(jù)恢復(fù)完畢后,實(shí)例變?yōu)榭勺x可寫,繼續(xù)下一個(gè)實(shí)例的刪除。當(dāng)所有的實(shí)例都刪除完畢時(shí),就結(jié)束刪除任務(wù)。

      其中,拆分刪除涉及的組包括多個(gè)組,并發(fā)式的同時(shí)對該多個(gè)組執(zhí)行刪除任務(wù)。并發(fā)式的處理速度更快效率更高。

      其中,根據(jù)實(shí)例的讀寫狀態(tài)對一個(gè)組的每個(gè)實(shí)例執(zhí)行刪除任務(wù)包括:同組所有實(shí)例都是可讀可寫狀態(tài)才開始刪除任務(wù)。防止誤操作,保證了一致性。

      其中,根據(jù)實(shí)例的讀寫狀態(tài)對一個(gè)組的每個(gè)實(shí)例執(zhí)行刪除任務(wù)包括:同組的所有實(shí)例中,同一時(shí)刻只允許一個(gè)實(shí)例執(zhí)行刪除任務(wù)。防止誤操作,保證了一致性。

      其中,根據(jù)實(shí)例的讀寫狀態(tài)對一個(gè)組的每個(gè)實(shí)例執(zhí)行刪除任務(wù)包括:該組包括可讀可寫的實(shí)例。可以正常的寫入到同組的其他可讀可寫的實(shí)例;也可以正常的從同組的任意一個(gè)可讀可寫的實(shí)例查詢數(shù)據(jù)。

      其中,當(dāng)數(shù)據(jù)恢復(fù)完畢后,將實(shí)例變?yōu)榭勺x可寫狀態(tài)還包括:設(shè)置一個(gè)外部的消息隊(duì)列,存儲(chǔ)處于刪除狀態(tài)時(shí)的用戶請求。

      用戶的數(shù)據(jù)寫入到所有可讀可寫實(shí)例成功后,還要再寫入一個(gè)外部的消息隊(duì)列,這些都成功后才反饋給用戶成功。當(dāng)正在刪除的實(shí)例刪除完畢后,標(biāo)記為可寫不可讀,此時(shí)不立即開始下一個(gè)實(shí)例的刪除,而是通過之前記錄在外部消息隊(duì)列的記錄,將這段時(shí)間的用戶請求,補(bǔ)寫到這個(gè)剛剛完成刪除任務(wù)的實(shí)例,當(dāng)補(bǔ)寫完成后,這個(gè)實(shí)例恢復(fù)可讀可寫狀態(tài),此時(shí)開始下一個(gè)實(shí)例的刪除;當(dāng)同組的所有實(shí)例都完成刪除任務(wù)后,該組的刪除任務(wù)正式完成。

      其中,該方法還包括:以組為單元進(jìn)行數(shù)據(jù)寫入和查詢。正常情況下的以組為單元的數(shù)據(jù)寫入和查詢;狀態(tài)處于刪除狀態(tài)時(shí)的以組為單元的數(shù)據(jù)寫入和查詢,數(shù)據(jù)一致性較好。

      其中,將所有的組統(tǒng)一管理包括:

      不同的用戶對應(yīng)不同的組或共享同一個(gè)組、一個(gè)用戶對應(yīng)一個(gè)或多個(gè)組、每個(gè)組之間的刪除互不影響中的至少一項(xiàng)。管理數(shù)據(jù)更加方便。

      其中,以組為單元進(jìn)行數(shù)據(jù)寫入和查詢包括:根據(jù)時(shí)序數(shù)據(jù)庫狀態(tài)將同組的所有實(shí)例都寫入成功才反饋成功和/或任選一個(gè)實(shí)例進(jìn)行查詢獲得數(shù)據(jù)即反饋。

      其中,該方法還包括組狀態(tài)處于刪除狀態(tài)時(shí)的以組為單元的數(shù)據(jù)寫入和查詢,具體包括:

      記錄用戶發(fā)起刪除請求時(shí)涉及的組,并發(fā)式的同時(shí)對多個(gè)組開始執(zhí)行刪除;

      對于同組的實(shí)例,必須確保所有實(shí)例都是正常(正常的標(biāo)記為:可讀可寫)的才能開始刪除;

      同組的所有實(shí)例中,同一時(shí)刻只允許有一個(gè)在刪除,開始刪除的實(shí)例被標(biāo)記為不可讀不可寫;

      用戶可以正常的寫入到同組的其他可讀可寫的實(shí)例;

      用戶可以正常的從同組的任意一個(gè)可讀可寫的實(shí)例查詢數(shù)據(jù);

      用戶的數(shù)據(jù)寫入到所有可讀可寫實(shí)例成功后,還要再寫入一個(gè)外部的消息隊(duì)列,這些都成功后才反饋給用戶成功;

      用戶的數(shù)據(jù)不寫入到不可寫狀態(tài)的實(shí)例;

      用戶的數(shù)據(jù)不能從不可讀狀態(tài)的實(shí)例查詢;

      當(dāng)正在刪除的實(shí)例刪除完畢后,標(biāo)記為可寫不可讀,此時(shí)不立即開始下一個(gè)實(shí)例的刪除,而是通過之前記錄在外部消息隊(duì)列的記錄,將這段時(shí)間的用戶請求,補(bǔ)寫到這個(gè)剛剛完成刪除任務(wù)的實(shí)例,當(dāng)補(bǔ)寫完成后,這個(gè)實(shí)例恢復(fù)可讀可寫狀態(tài),此時(shí)開始下一個(gè)實(shí)例的刪除;

      當(dāng)同組的所有實(shí)例都完成刪除任務(wù)后,該組的刪除任務(wù)正式完成。

      本實(shí)施例的有益效果:

      通過本實(shí)施例的時(shí)序數(shù)據(jù)庫刪除方法,可以使得現(xiàn)有的時(shí)序數(shù)據(jù)庫可以正常而快速的執(zhí)行刪除任務(wù),當(dāng)用戶的刪除數(shù)據(jù)量特別大時(shí),也不會(huì)影響用戶的正常寫入和查詢數(shù)據(jù)的請求,并且保證了用戶在整個(gè)過程獲取的數(shù)據(jù)都是正確且一致的;

      因?yàn)槊總€(gè)用戶的寫入和查詢都是以組為單元執(zhí)行,同組的實(shí)例最多有一個(gè)在執(zhí)行刪除,而其他實(shí)例均為正常的實(shí)例,用戶此時(shí)查詢正在執(zhí)行刪除任務(wù)的組時(shí)可以獲取正常的結(jié)果;

      通過在元數(shù)據(jù)中記錄用戶對數(shù)據(jù)的刪除標(biāo)記,即便實(shí)際數(shù)據(jù)刪除需要很長的時(shí)間,用戶也不會(huì)可以再次讀取或者寫入已經(jīng)刪除的數(shù)據(jù)表,以此保證了一致性;

      因?yàn)榻o不同用戶分配了不同的實(shí)例組,用戶之間互不影響。

      本實(shí)施例提出了集群化實(shí)例的方法來處理刪除的需求,以達(dá)到服務(wù)高可用且刪除任務(wù)可以正常完成的目標(biāo)。

      具體的,一種構(gòu)建實(shí)例集群去完成刪除任務(wù)的方法,以influxdb這款開源時(shí)序數(shù)據(jù)庫軟件為例,一個(gè)具體但非限制性的實(shí)施方案,可以分為如下幾個(gè)步驟:

      包括:將多個(gè)時(shí)序數(shù)據(jù)庫構(gòu)建為一個(gè)組,將所有的組統(tǒng)一管理起來為用戶分配資源,以組為單元處理用戶的數(shù)據(jù)寫入和查詢請求,以組為單元處理用戶的刪除請求。

      首先需要將多個(gè)influxdb部署在多個(gè)不同的服務(wù)器上,然后獲取不同服務(wù)器上influxdb的IP、端口、磁盤剩余空間、網(wǎng)絡(luò)訪問延遲這些信息,將數(shù)值上最相近的幾個(gè)構(gòu)建為一個(gè)組,用戶寫入的數(shù)據(jù),同組的每個(gè)實(shí)例都保存完整的一份。

      根據(jù)狀態(tài)的不同,給influxdb實(shí)例做一些狀態(tài)標(biāo)記,正常情況下是可讀可寫,當(dāng)influxdb實(shí)例開始執(zhí)行刪除時(shí),變?yōu)椴豢勺x不可寫,當(dāng)influxdb刪除完畢后,變?yōu)榭蓪懖豢勺x,然后開始恢復(fù)刪除時(shí)間段里面的數(shù)據(jù),同時(shí)在此時(shí)也會(huì)正常接收用戶的寫點(diǎn),最終恢復(fù)完畢后,變?yōu)榭勺x可寫。

      用戶的數(shù)據(jù)不寫入到不可寫狀態(tài)的實(shí)例;用戶的數(shù)據(jù)不能從不可讀狀態(tài)的實(shí)例查詢。

      正常情況下的以組為單元的數(shù)據(jù)寫入和查詢,同組的所有實(shí)例都寫入成功才反饋給用戶成功,用戶查詢時(shí)則任選一個(gè)進(jìn)行查詢獲得數(shù)據(jù)即可反饋給用戶。

      組狀態(tài)處于刪除狀態(tài)時(shí)的數(shù)據(jù)寫入和查詢,則首先需要拆分用戶刪除涉及的組,然后并行的對多個(gè)組去執(zhí)行,用戶查詢時(shí)則挑選可讀狀態(tài)的influxdb實(shí)例。

      用戶的數(shù)據(jù)寫入到所有可讀可寫實(shí)例成功后,還要再寫入一個(gè)外部的消息隊(duì)列,這些都成功后才反饋給用戶成功。

      當(dāng)正在刪除的實(shí)例刪除完畢后,標(biāo)記為可寫不可讀,此時(shí)不立即開始下一個(gè)實(shí)例的刪除,而是通過之前記錄在外部消息隊(duì)列的記錄,將這段時(shí)間的用戶請求,補(bǔ)寫到這個(gè)剛剛完成刪除任務(wù)的實(shí)例,當(dāng)補(bǔ)寫完成后,這個(gè)實(shí)例恢復(fù)可讀可寫狀態(tài),此時(shí)開始下一個(gè)實(shí)例的刪除;當(dāng)同組的所有實(shí)例都完成刪除任務(wù)后,該組的刪除任務(wù)正式完成。

      如圖2所示,表述了整個(gè)刪除過程的流程。開始刪除后,第一步就是將用戶數(shù)據(jù)分解為涉及的組,對于每個(gè)組,查看是否所有實(shí)例都在可讀可寫狀態(tài),若否,則等待一段時(shí)間再次嘗試,若是,則開始依次對每個(gè)實(shí)例執(zhí)行刪除。找到尚未執(zhí)行刪除任務(wù)的實(shí)例,然后記錄下起始的數(shù)據(jù)標(biāo)記startOffset,然后開始執(zhí)行刪除,直到刪除完畢,記錄下結(jié)束的數(shù)據(jù)標(biāo)記endOffset,然后開始恢復(fù)從startOffset到endOffset這期間的所有用戶請求數(shù)據(jù),同時(shí)正常接收用戶的寫入請求,但是不支持用戶的查詢。當(dāng)數(shù)據(jù)恢復(fù)完畢后,實(shí)例變?yōu)榭勺x可寫,繼續(xù)下一個(gè)實(shí)例的刪除。當(dāng)所有的實(shí)例都刪除完畢時(shí),就結(jié)束刪除任務(wù)。

      如圖3所示,表述了刪除時(shí)單個(gè)實(shí)例讀寫狀態(tài)的變化,初始時(shí)狀態(tài)為可讀可寫,刪除開始時(shí)狀態(tài)變?yōu)椴豢勺x不可寫,此時(shí)標(biāo)記startOffset,刪除完畢后,狀態(tài)變?yōu)榭蓪懖豢勺x,標(biāo)記endOffset,然后開始補(bǔ)寫數(shù)據(jù),補(bǔ)寫完畢后,重新變?yōu)榭勺x可寫。

      如圖4所示,用戶的請求到達(dá)時(shí),先經(jīng)過用戶請求處理模塊,該模塊負(fù)責(zé)接收用戶的http請求,然后通過元數(shù)據(jù)管理模塊,根據(jù)元數(shù)據(jù)處理用戶請求是否合法。

      對應(yīng)的實(shí)際數(shù)據(jù)在刪除過程中,元數(shù)據(jù)模塊會(huì)標(biāo)記用戶數(shù)據(jù)已經(jīng)刪除,通過元數(shù)據(jù)管理模塊后,在組調(diào)度模塊查找分配給對應(yīng)用戶的組。

      若請求是正常的讀寫請求,且發(fā)往的是正常的實(shí)例組,則不需要經(jīng)過特殊處理,按照正常的寫入和查詢進(jìn)行操作即可。

      當(dāng)用戶的正常讀寫請求,發(fā)往的是在執(zhí)行刪除任務(wù)的實(shí)例組時(shí),除了按照influxdb讀寫狀態(tài)進(jìn)行正常的讀寫以外,還要額外的寫入一個(gè)消息隊(duì)列進(jìn)行標(biāo)記和記錄。

      當(dāng)刪除完畢后,數(shù)據(jù)恢復(fù)模塊根據(jù)消息隊(duì)列模塊中的記錄,對實(shí)例組中錯(cuò)過的消息進(jìn)行恢復(fù)。

      當(dāng)用戶請求為刪除請求時(shí),則發(fā)往刪除任務(wù)的執(zhí)行模塊,根據(jù)刪除涉及的實(shí)例組進(jìn)行拆分,然后對于每個(gè)組,執(zhí)行圖2的過程。

      本發(fā)明的另一優(yōu)選實(shí)施例,一種時(shí)序數(shù)據(jù)庫的刪除系統(tǒng),包括:

      組調(diào)度模塊,用于將多個(gè)不同的時(shí)序數(shù)據(jù)庫實(shí)例組合成多個(gè)組并統(tǒng)一管理;用于將不同的時(shí)序數(shù)據(jù)庫實(shí)例組合成多個(gè)組并分配給用戶;

      刪除任務(wù)執(zhí)行模塊,用于以組為單元進(jìn)行刪除。用于實(shí)際接收并執(zhí)行用戶的刪除任務(wù);

      該系統(tǒng)還包括:

      多個(gè)服務(wù)器,用于提供取網(wǎng)絡(luò)傳輸速率相當(dāng)、磁盤剩余空間相當(dāng)?shù)臅r(shí)序數(shù)據(jù)庫實(shí)例組成一個(gè)組。

      該系統(tǒng)還包括:

      元數(shù)據(jù)管理模塊,用于記錄用戶數(shù)據(jù)與時(shí)序數(shù)據(jù)庫實(shí)例的對應(yīng)關(guān)系,并且記錄時(shí)序數(shù)據(jù)庫的狀態(tài),同時(shí)對要?jiǎng)h除的數(shù)據(jù)進(jìn)行標(biāo)記,保證無法對已經(jīng)刪除的數(shù)據(jù)進(jìn)行再操作;根據(jù)寫入請求獲得請求對應(yīng)的時(shí)序數(shù)據(jù)庫實(shí)例信息,然后寫入狀態(tài)為可寫的時(shí)序數(shù)據(jù)庫實(shí)例中;根據(jù)查詢請求從狀態(tài)為可讀的時(shí)序數(shù)據(jù)庫實(shí)例中獲取數(shù)據(jù)。

      該系統(tǒng)還包括:

      用戶請求處理模塊,用于通過查看元數(shù)據(jù)管理模塊,獲取用戶數(shù)據(jù)與時(shí)序數(shù)據(jù)庫對應(yīng)關(guān)系,并到對應(yīng)組寫入或查詢數(shù)據(jù)。

      該系統(tǒng)還包括:

      消息隊(duì)列模塊,用于存儲(chǔ)處于刪除狀態(tài)的用戶請求。

      該系統(tǒng)還包括:

      數(shù)據(jù)恢復(fù)模塊,用于恢復(fù)處于刪除狀態(tài)的時(shí)序數(shù)據(jù)庫實(shí)例所錯(cuò)過的寫入數(shù)據(jù)。

      本發(fā)明的再一優(yōu)選實(shí)施例,一種時(shí)序數(shù)據(jù)庫的刪除系統(tǒng),包括:

      組調(diào)度模塊,用于將不同的時(shí)序數(shù)據(jù)庫實(shí)例組合成多個(gè)組并分配給用戶,該模塊用于從多個(gè)不同的服務(wù)器上選取網(wǎng)絡(luò)傳輸速率相當(dāng)、磁盤剩余空間相當(dāng)?shù)臅r(shí)序數(shù)據(jù)庫實(shí)例,組成一個(gè)組。根據(jù)用戶的申請,為用戶分配一個(gè)組;

      元數(shù)據(jù)管理模塊,用于記錄用戶數(shù)據(jù)與時(shí)序數(shù)據(jù)庫實(shí)例的對應(yīng)關(guān)系,并且記錄時(shí)序數(shù)據(jù)庫的狀態(tài),同時(shí)對用戶要?jiǎng)h除的數(shù)據(jù)進(jìn)行標(biāo)記,保證用戶無法對已經(jīng)刪除的數(shù)據(jù)進(jìn)行再操作,當(dāng)用戶寫入請求到達(dá)時(shí),首先從元數(shù)據(jù)管理模塊獲得請求對應(yīng)的時(shí)序數(shù)據(jù)庫實(shí)例信息,然后寫入狀態(tài)為可寫的時(shí)序數(shù)據(jù)庫實(shí)例中;當(dāng)用戶的查詢請求到達(dá)時(shí),從狀態(tài)為可讀的時(shí)序數(shù)據(jù)庫實(shí)例中獲取數(shù)據(jù);

      用戶請求處理模塊,用于通過查看元數(shù)據(jù)管理模塊,獲取用戶數(shù)據(jù)與時(shí)序數(shù)據(jù)庫對應(yīng)關(guān)系,并到對應(yīng)組寫入或查詢數(shù)據(jù);

      刪除任務(wù)執(zhí)行模塊,用于實(shí)際接收并執(zhí)行用戶的刪除任務(wù),在執(zhí)行任務(wù)之前,從元數(shù)據(jù)管理模塊查看用戶要?jiǎng)h除的數(shù)據(jù)涉及的實(shí)例組,然后再把刪除任務(wù)分解到各個(gè)組分別并行的執(zhí)行;當(dāng)組中所有實(shí)例的狀態(tài)均為可讀可寫時(shí)才開始執(zhí)行刪除任務(wù),當(dāng)刪除任務(wù)執(zhí)行完成之前,會(huì)不斷的間歇性檢查組的狀態(tài),直到所有實(shí)例均被刪除完畢;當(dāng)刪除任務(wù)開始執(zhí)行后,分別對每個(gè)實(shí)例依次執(zhí)行刪除,每個(gè)實(shí)例刪除完畢后,變?yōu)榭蓪懖豢勺x狀態(tài),此時(shí)不立即開始下一個(gè)實(shí)例的刪除,而是調(diào)用數(shù)據(jù)恢復(fù)模塊進(jìn)行數(shù)據(jù)恢復(fù),知道數(shù)據(jù)恢復(fù)完成,實(shí)例狀態(tài)變?yōu)榭勺x可寫,此時(shí)開始同組的下一個(gè)實(shí)例的刪除,當(dāng)所有實(shí)例刪除完畢時(shí),整個(gè)組才算徹底刪除完畢,當(dāng)所有組均刪除完畢時(shí),刪除任務(wù)才算執(zhí)行完畢;

      消息隊(duì)列模塊,用于存儲(chǔ)處于刪除狀態(tài)的用戶請求,例如可以使用開源的消息隊(duì)列模塊kafka完成;

      數(shù)據(jù)恢復(fù)模塊,用于恢復(fù)處于刪除狀態(tài)的時(shí)序數(shù)據(jù)庫實(shí)例所錯(cuò)過的用戶寫入數(shù)據(jù);當(dāng)某個(gè)實(shí)例開始執(zhí)行刪除任務(wù),狀態(tài)變?yōu)椴豢蓪憰r(shí),標(biāo)記一個(gè)起始的消息位置startOffset,表示用戶從該消息位置開始的數(shù)據(jù)都錯(cuò)過了,當(dāng)實(shí)例執(zhí)行刪除完畢,狀態(tài)變?yōu)榭蓪懖豢勺x時(shí),標(biāo)記一個(gè)結(jié)束的消息位置endOffset,表示用戶從該位置結(jié)束的消息錯(cuò)過了,之后的實(shí)例則可以正常結(jié)束處理;當(dāng)endOffset標(biāo)記完畢后,數(shù)據(jù)恢復(fù)模塊開始從消息隊(duì)列中獲取[startOffset,endOffset)這個(gè)區(qū)間的數(shù)據(jù),并把這個(gè)區(qū)間的數(shù)據(jù)處理至?xí)r序數(shù)據(jù)庫實(shí)例中,處理完畢后,時(shí)序數(shù)據(jù)庫實(shí)例標(biāo)記為可讀可寫。

      以上內(nèi)容是結(jié)合具體的優(yōu)選實(shí)施方式對本發(fā)明所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說明。對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
      1