• 
    <ul id="o6k0g"></ul>
    <ul id="o6k0g"></ul>

    數據存儲方法及數據存儲系統技術方案

    技術編號:8271286 閱讀:152 留言:0更新日期:2013-01-31 03:28
    本發明專利技術公開了一種數據存儲方法及數據存儲系統。該方法包括:接收數據更新命令,為數據更新命令分配游標;將接收的數據更新命令以及分配的游標寫入不斷添加模式AOF文件,并將AOF文件寫入磁盤;根據數據更新命令更新數據,在更新數據成功后,按照預先設置的時間周期,將數據寫入磁盤中的數據文件,將為數據更新命令分配的游標寫入磁盤中的游標文件;重啟服務,加載磁盤數據文件中的數據,獲取游標文件中順序位最高的游標,從存儲的AOF文件中,加載該游標對應的數據更新命令之后的數據更新命令。應用本發明專利技術,可以降低數據恢復所需的時間、避免數據丟失。

    【技術實現步驟摘要】
    本專利技術涉及數據存儲技術,尤其涉及一種數據存儲方法及數據存儲系統
    技術介紹
    目前,內存數據持久化存儲主要采用純內存存儲引擎,主要包括持久化消息隊列(mcq, MemcacheQ)、遠程字典服務器(Redis, Remote Dictionary Server)以及關系型數據庫管理系統(Mysql)等,Memcached暫時沒有自帶的數據落地方法,Redis則自帶有不斷添加模式(A0F, Append Only Mode)文件和快照(snapshot)兩種方式,Mysql的內存表則通過主動調用轉儲(dump)命令來將數據全部導出,然后寫入磁盤。現有支持數據落地的內存存儲引擎,Redis的AOF文件實現了增量備份(binlog),即對新增加的數據更新命令進行備份,通過將數據更新命令追加寫入到磁盤,這樣,可保證 用戶的數據更新命令能夠被及時寫入到磁盤,服務異常退出后,可以根據AOF文件中存儲的數據更新命令來恢復數據,但該方法隨著數據更新命令的不斷增多,使得AOF文件的數據量越來越大,數據恢復所需的時間會越來越長。為了降低數據恢復所需的時間,Redis引入了 AOF文件重寫機制,其功能就是重新生成一份AOF文件,新的AOF文件中一條記錄的數據更新命令只會有一次,而現有常規的AOF文件,記錄了對同一數據的多次更新命令,這樣,可以減小AOF文件的大小,但該方法在重寫AOF文件時,由于Redis在重寫AOF文件時會占用大量的CPU和內存資源,導致負載過高,出現短暫的服務暫停現象,因而,在重寫時,導致數據丟失問題,不能保障數據的安全性;而且,AOF文件的重寫,也將影響Redis的數據處理性能,降低了數據更新命令的寫入速度。對于Redis的snapshot模式,是定期dump模式,即定期將內存數據批量寫入磁盤,與Mysql的內存表的dump命令性質相同,如果發生服務重啟或中斷等異常,在兩次snapshot期間發生的數據更新,由于未能及時寫入磁盤,將會全部丟失;而且,隨著更新的數據不斷增多,從磁盤恢復數據所需的時間會越來越長。由上述可見,現有的數據存儲方法,無論是采用AOF文件存儲方式還是snapshot存儲方式,或是Mysql的dump存儲方式,在恢復數據時,都存在數據恢復所需的時間較長、數據丟失的技術問題。
    技術實現思路
    本專利技術的實施例提供一種數據存儲方法,降低數據恢復所需的時間、避免數據丟失。本專利技術的實施例還提供一種數據存儲系統,降低數據恢復所需的時間、避免數據丟失。為達到上述目的,本專利技術實施例提供的一種數據存儲方法,包括接收數據更新命令,為數據更新命令分配游標;將接收的數據更新命令以及分配的游標寫入不斷添加模式AOF文件,并將AOF文件寫入磁盤;根據數據更新命令更新數據,在更新數據成功后,按照預先設置的時間周期,將數據寫入磁盤中的數據文件,將為數據更新命令分配的游標寫入磁盤中的游標文件;重啟服務,加載磁盤數據文件中的數據,獲取游標文件中順序位最高的游標,從存儲的AOF文件中,加載該游標對應的數據更新命令之后的數據更新命令。其中,所述為數據更新命令分配游標包括判斷當前接收的數據更新命令是否為接收的第一條數據更新命令,如果是,為接收的數據更新命令分配游標序列號,并記錄分配的游標序列號信息;如果不是,將記錄的游標序列號進行累加,為接收數據更新命令設置累加的游標序列號,記錄累加的游標序列號 信息。其中,所述為數據更新命令分配游標包括判斷AOF文件中是否存在寫入的數據更新命令,如果不存在,為接收的數據更新命令分配游標序列號;如果存在,獲取AOF文件中當前已寫入的數據更新命令的游標序列號信息,對獲取的游標序列號進行累加,為接收的數據更新命令設置累加的游標序列號。其中,所述將為數據更新命令分配的游標寫入磁盤中的游標文件包括獲取預先設置的時間周期內,更新數據成功對應的數據更新命令,將為所述更新數據成功對應的數據更新命令分配的游標寫入磁盤中的游標文件。其中,所述將為數據更新命令分配的游標寫入磁盤中的游標文件進一步包括讀取游標文件中最新存儲的游標序列號;判斷為數據更新命令分配的游標序列號是否大于游標文件中最新存儲的游標序列號,如果是,將為數據更新命令分配的游標寫入磁盤中的游標文件;否則,不作處理。其中,所述將數據寫入磁盤中的數據文件之后,進一步包括刪除數據文件中除最近更新數據外的其他數據。其中,所述將為數據更新命令分配的游標寫入磁盤中的游標文件之后,進一步包括存儲游標文件中最大的游標序列號,刪除游標文件中除最大游標序列號外的其他游標序列號。其中,所述加載磁盤數據文件中的數據,獲取游標文件中順序位最高的游標,從存儲的AOF文件中,加載該游標對應的數據更新命令之后的數據更新命令包括讀取數據文件,獲取數據文件中最近更新的數據;從游標文件中,獲取游標文件中順序位最大的游標序列號;根據該最大的游標序列號,查詢存儲的AOF文件,根據AOF文件中的映射關系,獲取最大的游標序列號對應的數據更新命令;對獲取的數據文件中最近更新的數據,依序執行最大的游標序列號對應的數據更新命令之后的數據更新命令。一種數據存儲系統,該數據存儲系統包括游標分配器、不斷添加模式AOF文件存儲器、數據文件存儲器、游標文件存儲器以及數據恢復器,其中,游標分配器,用于接收數據更新命令,為數據更新命令分配游標;AOF文件存儲器,用于將接收的數據更新命令以及分配的游標寫入AOF文件,存儲寫入的AOF文件;數據文件存儲器,用于根據數據更新命令更新數據,在更新數據成功后,按照預先設置的時間周期,存儲寫入的數據文件,向游標文件存儲器輸出觸發信息;游標文件存儲器,用于接收觸發信息,存儲將為數據更新命令分配的游標信息;數據恢復器,用于重啟服務,加載磁盤中數據文件存儲器中的數據,獲取游標文件存儲器中順序位最高的游標,從AOF文件存儲器存儲的AOF文件中,加載該游標對應的數據更新命令之后的數據更新命令。所述AOF文件存儲器、數據文件存儲器以及游標文件存儲器分別為一個或多個。所述游標分配器包括接收模塊、判斷模塊、分配模塊以及累加模塊,其中,接收模塊,用于接收數據更新命令,輸出至判斷模塊;判斷模塊,用于判斷當前接收的數據更新命令是否為接收的第一條數據更新命令,如果是,輸出至分配模塊,如果不是,輸出至累加模塊;分配模塊,用于為接收的數據更新命令分配游標序列號,并記錄分配的游標序列號信息;累加模塊,用于將記錄的游標序列號進行累加,為接收數據更新命令設置累加的游標序列號,記錄累加的游標序列號信息。所述游標分配器包括接收模塊、判斷模塊、分配模塊、獲取模塊以及累加模塊,其中,接收模塊,用于接收數據更新命令,輸出至判斷模塊;判斷模塊,用于判斷AOF文件中是否存在寫入的數據更新命令,如果不存在,通知分配模塊,如果存在,通知獲取模塊;分配模塊,用于接收通知,為接收的數據更新命令分配游標序列號;獲取模塊,用于接收通知,獲取AOF文件中當前已寫入的數據更新命令的游標序列號信息;累加模塊,用于對獲取的游標序列號進行累加,為接收的數據更新命令設置累加的游標序列號。所述數據恢復器包括重啟模塊、數據文件讀取模塊、游標文件讀取模塊、查詢模塊以及更新模塊,其中,重啟模塊,用于重啟服務;數據文件讀取模塊,用于讀取數據文件存儲器中存本文檔來自技高網
    ...

    【技術保護點】
    一種數據存儲方法,該方法包括:接收數據更新命令,為數據更新命令分配游標;將接收的數據更新命令以及分配的游標寫入不斷添加模式AOF文件,并將AOF文件寫入磁盤;根據數據更新命令更新數據,在更新數據成功后,按照預先設置的時間周期,將數據寫入磁盤中的數據文件,將為數據更新命令分配的游標寫入磁盤中的游標文件;重啟服務,加載磁盤數據文件中的數據,獲取游標文件中順序位最高的游標,從存儲的AOF文件中,加載該游標對應的數據更新命令之后的數據更新命令。

    【技術特征摘要】
    1.一種數據存儲方法,該方法包括 接收數據更新命令,為數據更新命令分配游標; 將接收的數據更新命令以及分配的游標寫入不斷添加模式AOF文件,并將AOF文件寫入磁盤; 根據數據更新命令更新數據,在更新數據成功后,按照預先設置的時間周期,將數據寫入磁盤中的數據文件,將為數據更新命令分配的游標寫入磁盤中的游標文件; 重啟服務,加載磁盤數據文件中的數據,獲取游標文件中順序位最高的游標,從存儲的AOF文件中,加載該游標對應的數據更新命令之后的數據更新命令。2.根據權利要求I所述的方法,其中,所述為數據更新命令分配游標包括 判斷當前接收的數據更新命令是否為接收的第一條數據更新命令,如果是,為接收的數據更新命令分配游標序列號,并記錄分配的游標序列號信息;如果不是,將記錄的游標序列號進行累加,為接收數據更新命令設置累加的游標序列號,記錄累加的游標序列號信息。3.根據權利要求I所述的方法,其中,所述為數據更新命令分配游標包括 判斷AOF文件中是否存在寫入的數據更新命令,如果不存在,為接收的數據更新命令分配游標序列號;如果存在,獲取AOF文件中當前已寫入的數據更新命令的游標序列號信息,對獲取的游標序列號進行累加,為接收的數據更新命令設置累加的游標序列號。4.根據權利要求I至3任一項所述的方法,其中,所述將為數據更新命令分配的游標寫入磁盤中的游標文件包括 獲取預先設置的時間周期內,更新數據成功對應的數據更新命令,將為所述更新數據成功對應的數據更新命令分配的游標寫入磁盤中的游標文件。5.根據權利要求4所述的方法,其中,所述將為數據更新命令分配的游標寫入磁盤中的游標文件進一步包括 讀取游標文件中最新存儲的游標序列號; 判斷為數據更新命令分配的游標序列號是否大于游標文件中最新存儲的游標序列號,如果是,將為數據更新命令分配的游標寫入磁盤中的游標文件;否則,不作處理。6.根據權利要求I至3任一項所述的方法,其中,所述將數據寫入磁盤中的數據文件之后,進一步包括 刪除數據文件中除最近更新數據外的其他數據。7.根據權利要求I至3任一項所述的方法,其中,所述將為數據更新命令分配的游標寫入磁盤中的游標文件之后,進一步包括 存儲游標文件中最大的游標序列號,刪除游標文件中除最大游標序列號外的其他游標序列號。8.根據權利要求I至3任一項所述的方法,其中,所述加載磁盤數據文件中的數據,獲取游標文件中順序位最高的游標,從存儲的AOF文件中,加載該游標對應的數據更新命令之后的數據更新命令包括 讀取數據文件,獲取數據文件中最近更新的數據; 從游標文件中,獲取游標文件中順序位最大的游標序列號; 根據該最大的游標序列號,查詢存儲的AOF文件,根據AOF文件中的映射關系,獲取最大的游標序列號對應的數據更新命令;對獲取的數據文件中最近更新的數據,依序執行最大的游標序列號對應的數據更新命令之后的數據更新命令。9.一種數據存儲系統,其特征在于,該數據...

    【專利技術屬性】
    技術研發人員:湯曉剛
    申請(專利權)人:新浪網技術中國有限公司
    類型:發明
    國別省市:

    網友詢問留言 已有0條評論
    • 還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。

    1
    主站蜘蛛池模板: 国产成人综合日韩精品无码不卡| 无码被窝影院午夜看片爽爽jk| 久久国产亚洲精品无码| 亚洲AV永久无码精品一百度影院| 亚洲AV无码欧洲AV无码网站| 无码av人妻一区二区三区四区| 天码av无码一区二区三区四区 | 亚洲成A∨人片天堂网无码| 国产亚洲精品无码专区| 亚洲爆乳无码专区www| 亚洲AV无码精品无码麻豆| 亚洲精品无码99在线观看| 久久99精品久久久久久hb无码| HEYZO无码综合国产精品| 特级毛片内射www无码| 亚洲av无码国产精品夜色午夜 | 亚洲av无码专区在线电影| 中文字幕乱码人妻无码久久| 无码一区二区三区免费视频| 无码一区二区三区免费| 久久亚洲精品无码播放| 成人毛片无码一区二区| 亚洲中文字幕无码久久| 久久亚洲精品无码av| 亚洲AV无码一区二区三区在线| 无码成A毛片免费| 久久久久亚洲av无码专区| 午夜人性色福利无码视频在线观看| 日韩精品无码Av一区二区| 精品久久久久久久无码久中文字幕 | 无码丰满熟妇浪潮一区二区AV | 免费无码又爽又刺激高潮| 久久亚洲AV成人无码国产电影| 亚洲人AV在线无码影院观看| 伊人久久精品无码麻豆一区| 亚洲Av永久无码精品黑人| 无码免费午夜福利片在线| 无码丰满熟妇浪潮一区二区AV| 国产午夜鲁丝片AV无码| 日韩人妻无码一区二区三区久久99 | 久久久国产精品无码免费专区|