數據存儲方法及系統(tǒng)的制作方法【專利摘要】本發(fā)明涉及一種數據存儲方法及系統(tǒng),所述方法包括:為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列;以及將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據。本發(fā)明只需要一個事務就完成了隊列數據的插入,并且沒有額外的維護隊列長度的系統(tǒng)開銷,減少了前端與數據庫端的交互次數,系統(tǒng)架構簡單,便于實施和維護,也降低了更新請求時資源被鎖定的時間和數量,從而使系統(tǒng)始終處于穩(wěn)定、高效的狀態(tài),可以在海量數據、高并發(fā)的情況下保證循環(huán)隊列系統(tǒng)的快速數據請求響應,并且可以充分發(fā)揮循環(huán)隊列應用于各種數據庫如關系型數據庫或非關系型數據庫的優(yōu)勢。【專利說明】數據存儲方法及系統(tǒng)【
技術領域:
】[0001]本發(fā)明涉及一種數據存儲方法及系統(tǒng)?!?br>背景技術:
】[0002]循環(huán)隊列數據存儲指的是將特性對象的數據按照一定的順序依次插入到一個隊列中,隊列的首部和尾部相連,形成一個封閉的環(huán)形數據存儲空間。[0003]在現有技術下,海量隊列數據只存儲最新數據有兩種方法:[0004]第一種方法是前端程序直接插入新數據,另有后端程序清理不符合隊列條件的數據,如超出隊列長度且最早的數據。[0005]第一種方法的優(yōu)點是:在清理程序啟動之前,系統(tǒng)有較高的性能;[0006]第一種方法的缺點在于:[0007]1、隊列長度不固定,會有波動;[0008]2、系統(tǒng)性能波動較大,清理程序啟動后,需要掃描全部海量的數據,在此過程中系統(tǒng)的壓力較大,性能下降;而且,在清理過程會產生大量的鎖操作,這對系統(tǒng)性能影響更大,直接的表現就是造成連接數上升,請求響應延時或超時,并發(fā)量下降。[0009]第二種方法是前端程序在插入新數據之前或之后定位不符合隊列條件的數據,然后將該不符合隊列條件的數據清理掉。[0010]第二種方法的優(yōu)點是:系統(tǒng)的整體性能較為穩(wěn)定,不會出現第一種方法中性能波動較大的情況;[0011]第二種方法的缺點在于:前端的插入請求要經歷插入、定位和刪除不符合隊列條件的數據這三個步驟,這使得簡單的插入請求變成一個大的長事務,高并發(fā)情況下會出現數據庫中出現資源被鎖定的時間增加,使得請求需要的響應時間變長,甚至超時。[0012]另外,實際應用中,不可能將海量數據全部放在內存里來提高響應速度,一般會使用廉價的磁盤存儲這些海量數據,在數據檢索和定位的時候,磁盤輸入輸出設備(磁盤10)會消耗了較多的時間和資源。因此,如何在海量數據情況下保證循環(huán)隊列系統(tǒng)的高并發(fā)量和快速數據請求響應是目前業(yè)界亟待解決的問題。【
發(fā)明內容】[0013]本發(fā)明的目的在于提供一種數據存儲方法及系統(tǒng),只需要一個事務就完成了隊列數據的插入,并且沒有額外的維護隊列長度的系統(tǒng)開銷,減少了前端與數據庫端的交互次數,系統(tǒng)架構簡單,便于實施和維護,也降低了更新請求時資源被鎖定的時間和數量,從而使系統(tǒng)始終處于穩(wěn)定、高效的狀態(tài),可以在海量數據、高并發(fā)的情況下保證循環(huán)隊列系統(tǒng)的快速數據請求響應,并且可以充分發(fā)揮循環(huán)隊列應用于各種數據庫如關系型數據庫或非關系型數據庫的優(yōu)勢。[0014]為解決上述問題,本發(fā)明提供一種數據存儲方法,包括:[0015]為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列;以及[0016]將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據。[0017]進一步的,在上述方法中,為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列的步驟之前還包括,賦予所述對象一預設的對象關鍵字。[0018]進一步的,在上述方法中,為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列的步驟之后還包括:[0019]對所述對象關鍵字進行哈希生成相應的哈希值,根據所述哈希值將不同對象的循環(huán)隊列分布式存儲到不同服務器的不同表里或文件里。[0020]進一步的,在上述方法中,為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列的步驟包括:[0021]預設對象的循環(huán)隊列中隊列數據的存儲個數為N,其中N為自然數;[0022]根據所述隊列數據的存儲個數建立相應長度的循環(huán)隊列;[0023]按加I的方式依次賦予對象的循環(huán)隊列中每個隊列數據的存儲位置一預設的位置號;[0024]將所述對象關鍵字和所述位置號組合生成聯合關鍵字以標識對象的循環(huán)隊列中每個隊列數據的存儲位置。[0025]進一步的,在上述方法中,將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據的步驟包`括:[0026]獲取所述對象的循環(huán)隊列中最近一次存儲的隊列數據的位置號,并判斷是否獲取成功;[0027]若成功,則根據最近一次存儲的隊列數據的位置號、所述隊列數據的存儲個數及取模公式獲取新的隊列數據的存儲位置的聯合關鍵字,以及將所述新的隊列數據存儲入所述聯合關鍵字所對應的存儲位置;[0028]若不成功,則將所述新的隊列數據存儲入所述對象的循環(huán)隊列的第一個隊列數據的存儲位置。[0029]進一步的,在上述方法中,所述取模公式為:[0030]新的隊列數據存儲的位置號=(最近一次存儲的隊列數據的位置號+1)%Ν?[0031]根據本發(fā)明的另一面,提供一種數據存儲系統(tǒng),包括:[0032]隊列模塊,用于為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列;以及[0033]存儲模塊,用于將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據。[0034]進一步的,在上述系統(tǒng)中,還包括一對象關鍵字模塊,用于賦予所述對象一預設的對象關鍵字。[0035]進一步的,在上述系統(tǒng)中,還包括一哈希模塊,用于對所述對象關鍵字進行哈希生成相應的哈希值,根據所述哈希值將不同對象的數據分布式存儲到不同服務器的不同表里或文件里。[0036]進一步的,在上述系統(tǒng)中,所述隊列模塊包括:[0037]存儲個數單元,用于預設對象的循環(huán)隊列中隊列數據的存儲個數為N,其中N為自然數;[0038]隊列單元,用于根據所述隊列數據的存儲個數建立相應長度的循環(huán)隊列;[0039]位置單元,用于按加I的方式依次賦予對象的循環(huán)隊列中每個隊列數據的存儲位置一預設的位置號;[0040]聯系關鍵字單元,用于將所述對象關鍵字和所述位置號組合生成聯合關鍵字以標識對象的循環(huán)隊列中每個隊列數據的存儲位置。[0041]進一步的,在上述系統(tǒng)中,所述存儲t吳塊包括:[0042]判斷單元,用于獲取所述對象的循環(huán)隊列中最近一次存儲的隊列數據的位置號,并判斷是否獲取成功;[0043]第一存儲單元,用于當所述判斷單元判斷為獲取成功時,根據最近一次存儲的隊列數據的位置號、所述隊列數據的存儲個數及取模公式獲取新的隊列數據的存儲位置的聯合關鍵字,以及將所述新的隊列數據存儲入所述聯合關鍵字所對應的存儲位置;[0044]第二存儲單元,用于當所述判斷單元判斷為獲取不成功時,將所述新的隊列數據存儲入所述對象的循環(huán)隊列的第一個隊列數據的存儲位置。[0045]進一步的,在上述系統(tǒng)中,所述第一存儲單元采用的所述取模公式為:[0046]新的隊列數據存儲的位置號=(最近一次存儲的隊列數據的位置號+1)%Ν?[0047]與現有技術相比,本發(fā)明通過為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列,以及將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據,只需要一個事務就完成了隊列數據的插入,并且沒有額外的維護隊列長度的系統(tǒng)開銷,減少了前端與數據庫端的交互次數,系統(tǒng)架構簡單,便于實施和維護,也降低了更新請求時資源被鎖定的時間和數量,從而使系統(tǒng)始終處于穩(wěn)定、高效的狀態(tài),可以在海量數據、高并發(fā)的情況下保證循環(huán)隊列系統(tǒng)的快速數據請求響應。[0048]另外,本發(fā)明通過賦予所述對象一預設的對象關鍵字,按加I的方式依次賦予循環(huán)隊列中每個存儲隊列數據的位置一預設的位置號,可以用對象關鍵字(ObjectKey)和位置號(positionNumber)生成關系型數據庫的聯合關鍵字,來唯一標識每個對象的循環(huán)隊列中的隊列數據,當需要更新隊列數據時,可將所述新的隊列數據存儲入所述對象關鍵字的新的隊列數據存儲的位置號所對應的位置,這樣隊列數據更新時可以有效的利用索引,對檢索記錄進行直接快速定位,不會出現通過范圍掃描數據定位的情況,使前端的數據存儲行為產生最小的系統(tǒng)資源消耗,而且,本發(fā)明可將循環(huán)隊列應用于關系型數據庫中,循環(huán)隊列可以自動維護隊列長度,關系型數據庫可以處理海量的數據,將兩者結合后,充分發(fā)揮了兩者的優(yōu)勢,當然本發(fā)明也可應用于其它各種類型的數據庫中如非關系型數據庫。[0049]此外,本發(fā)明通過對所述對象關鍵字進行哈希生成相應的哈希值,根據所述哈希值將不同對象的循環(huán)隊列分布式存儲到不同服務器的不同表里或文件里,可以提高系統(tǒng)并發(fā)量和性能?!緦@綀D】【附圖說明】[0050]圖1是本發(fā)明實施例一的數據存儲方法的流程圖;[0051]圖2是本發(fā)明實施例二的數據存儲方法的流程圖;[0052]圖3是本發(fā)明實施例二的循環(huán)列表示意圖;[0053]圖4是本發(fā)明實施例三的數據存儲系統(tǒng)的模塊示意圖。【具體實施方式】[0054]為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結合附圖和【具體實施方式】對本發(fā)明作進一步詳細的說明。[0055]實施例一[0056]如圖1所示,本發(fā)明提供一種數據存儲方法,包括:[0057]步驟S11,為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列;[0058]具體的,所述對象(object)是循環(huán)隊列的所有者,例如,在角色動態(tài)系統(tǒng)中,每個角色都是一個對象,隊列數據可以按照產生順序依次存儲入對象的循環(huán)隊列中;[0059]步驟S12,將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據;[0060]具體的,由于循環(huán)隊列的長度固定,所以當循環(huán)隊列未存滿時,新的隊列數據會覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個空白隊列數據,當循環(huán)隊列已經存滿時,新的隊列數據會覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個舊的隊列數據。[0061]本發(fā)明通過為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列,以及將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據,只需要一個事務就完成了隊列數據的插入,并且沒有額外的維護隊列長度的系統(tǒng)開銷,減少了前端與數據庫端的交互次數,系統(tǒng)架構簡單,便于實施和維護,也降低了更新請求時資源被鎖定的時間和數量,從而使系統(tǒng)始終處于穩(wěn)定、高效的狀態(tài),可以在海量數據、高并發(fā)的情況下保證循環(huán)隊列系統(tǒng)的快速數據請求響應。[0062]實施例二[0063]如圖2所示,本發(fā)明提供另一種數據存儲方法,本實施例與實施例一的區(qū)別在于增加了將所述對象關鍵字和所述位置號組合生成聯合關鍵字以標識對象的循環(huán)隊列中每個隊列數據的存儲位置的步驟,并增加了對所述對象關鍵字進行哈希生成相應的哈希值,根據所述哈希值將不同對象的循環(huán)隊列分布式存儲到不同服務器的不同表里或文件里的步驟,所述數據存儲方法具體包括:[0064]步驟S21,賦予對象一預設的對象關鍵字;[0065]具體的,所述對象(object)是循環(huán)隊列的所有者,例如,在角色動態(tài)系統(tǒng)中,每個角色都是一個對象,在眾多的對象中,可以使用對象關鍵字(objectKey)來標識唯一的一個對象;[0066]步驟S22,為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列;[0067]具體的,隊列數據可以按照產生順序依次存儲入對象的循環(huán)隊列中;[0068]優(yōu)選的,步驟S22具體可包括:[0069]步驟S221,預設對象的循環(huán)隊列中隊列數據的存儲個數為N,其中N為自然數;[0070]具體的,所述隊列數據(value)是某對象所產生的將要放到循環(huán)隊列中的數據,所隊列數據的存儲個數為隊列長度(sequenceLength),即某對象所擁有的隊列數據的個數,在如圖3所示的循環(huán)隊列中其存儲個數N為8;[0071]步驟S222,根據所述隊列數據的存儲個數建立相應長度的循環(huán)隊列,例如,圖3所示為長度為8的循環(huán)隊列;[0072]步驟S223,按加I的方式依次賦予對象的循環(huán)隊列中每個隊列數據的存儲位置一預設的位置號;[0073]具體的,每個對象都有一個單獨的循環(huán)隊列,單個對象所產生的隊列數據,在插入隊列之時,都會先賦予一個位置號(positionNumber),后續(xù)步驟可根據該位置號(positionNumber)將新的隊列數據插入到相應循環(huán)隊列中,位置號(positionNumber)可在單個對象的循環(huán)隊列中標識唯一地一個隊列數據,如圖3所示,位置號a的取值范圍為0~7;[0074]步驟S224,將所述對象關鍵字和所述位置號組合生成聯合關鍵字以標識對象的循環(huán)隊列中每個隊列數據的存儲位置;[0075]具體的,在存在多個對象的循環(huán)隊列的情況下,則需要使用對象關鍵字(objectKey)和位置號(positionNumber)聯合在一起后的聯合關鍵字(primaryKey)作為某個對象的循環(huán)隊列中某一隊列數據的唯一標識,例如,可以設置如下關系型數據庫的存儲數據結構:[0076]Structure{[0077]objectKey[0078],positionNumber[0079],valuel[0080][,value2][0081][,value3][0082][…][0083]}[0084]又如,可設置一Mysql數據庫表為如下結構:[0085]CREATETABLE'CharacterDynamics_xx'([0086]'id'bigint(18)unsignedNOTNULLAUT0_INCREMENT,[0087]'CharacterID'bigint(18)unsignedNOTNULLCOMMENT,角色ID,,[0088]'MatrixID'varchar(32)NOTNULLCOMMENT’游戲號-區(qū)號-組號’,[0089]'PositioneNo'smallint(5)unsignedNOTNULLCOMMENT,位置號,,[0090]'FeedTime'int(II)NOTNULLCOMMENT’動態(tài)產生的時間’,[0091]'FeedType'varchar(32)NOTNULLCOMMENT’動態(tài)類型’,[0092]'FeedData'textNOTNULLCOMMENT’動態(tài)數據’,[0093]'tm'timestampNOTNULLDEFAULTCURRENTJIMESTAMPONUPDATECURRENT_TIMESTAMP,[0094]PRIMARYKEY('id'),[0095]UNIQUEKEY'uidx_character_posNo'(CharacterID',MatrixID',PositioneNo')[0096])ENGINE=InnoDBAUT0_INCREMENT=0DEFAULTCHARSET=Iatinl;[0097]其中,'CharacterID'和'MatrixID'相當于上述關系型數據庫的存儲數據結構中的objectKey;[0098]'PositioneNo'相當于positionNumber,其它列相當于valuel,[value2]…;[0099]CharacterID-MatrixID-PositioneNo相當于objectKey-positionNumber;[0100]步驟S23,對所述對象關鍵字進行哈希生成相應的哈希值,根據所述哈希值將不同對象的循環(huán)隊列分布式存儲到不同服務器的不同表里或文件里,即使用哈希(hash)算法對對象關鍵字(objectKey)進行哈希生成相應的哈希值如一個十六進制的哈希值,再依照該哈希值將不同對象的數據分布式存儲到不同服務器的不同表或文件里,例如,可將符合一定條件的哈希值部署到相同的機器上,符合其他條件的部署在其他機器上,通過這種方式實現分布式部署,以提高系統(tǒng)并發(fā)量和性能;[0101]步驟S24,將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據;[0102]具體的,由于循環(huán)隊列的長度固定,所以當循環(huán)隊列未存滿時,新的隊列數據會覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個空白隊列數據,當循環(huán)隊列已經存滿時,新的隊列數據會覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個舊的隊列數據,如圖3所示,在循環(huán)隊列已經存滿的情況下,最近一次存儲的隊列數據為c,目前根據隊列數據產生的順序c為第22個隊列數據,最舊的隊列數據總是位于循環(huán)隊列中緊鄰于c的下一個存儲位置b上,當有新的隊列數據要存儲時下一個存儲位置b上的第15個隊列數據就會被第23個新的隊列數據所覆蓋,第23個新的隊列數據存儲后,下一個存儲位置b修改為圖3中第16個隊列數據的存儲位置,最近一次存儲的隊列數據為c修改為第23個隊列數據的存儲位置;[0103]優(yōu)選的,步驟S24具體可包括:[0104]步驟S241,獲取所述對象的循環(huán)隊列中最近一次存儲的隊列數據的位置號,并判斷是否獲取成功,即取得當前對象的循環(huán)隊列中最近的positionNumber(latest(positionNumber)),若成功,則執(zhí)行步驟S242,若不成功,則執(zhí)行步驟S244;[0105]步驟S242,根據最近一次存儲的隊列數據的位置號、所述隊列數據的存儲個數及取模公式獲取新的隊列數據的存儲位置的聯合關鍵字,即用取模的方式計算出新的隊列數據的positionNumber,使最新的隊列數據覆蓋掉最舊的隊列數據;[0106]優(yōu)選的,所述取模公式為:[0107]新的隊列數據存儲的位置號=(最近一次存儲的隊列數據的位置號+1)%N,即NewpositionNumber=(latest(positionNumber)+1)取模sequenceLength,在如圖3所示的循環(huán)隊列中,NewpositionNumber=(6+1)%8=7,所以新的數據的存儲位置是在位置號(positionNumber)為7的地方存儲;[0108]步驟S243,將所述新的隊列數據存儲入所述聯合關鍵字所對應的存儲位置,即將新的隊列數據更新到隊列系統(tǒng),實現自動插入新數據,淘汰舊數據;[0109]步驟S244,將所述新的隊列數據存儲入所述對象的循環(huán)隊列的第一個隊列數據的存儲位置,例如在如圖3所示的循環(huán)隊列可,如果無法獲得latest(positionNumber),則說明當前對象的隊列長度為O,則直接將O賦予新positionNumber,并將數據插入;[0110]具體的,步驟S24的數據庫的操作偽代碼如下:[0111]1、無論數據庫中是否有這個對象的數據,先執(zhí)行如下更新語句:[0112]Updatetablesetvalue=[newValue][0113]whereobjectKey=[objectKeyValue]andpositionNumberin([0114]selecttopI(positionNumber+1)%sequenceLength[0115]fromtablewhereobjectKey=[objectKeyValue]orderbyiddesclimitI[0116]);[0117]2、如果第一步執(zhí)行成功,且沒有一條記錄受影響,則說明數據庫中沒有這個對象的任何記錄,則再執(zhí)行如下插入語句:[0118]Insertintotablevalues(objectKey,positionNumber,value);[0119]3、如果第一步執(zhí)行成功,且只有一條記錄受影響,則說明數據庫中有這個對象的記錄,并且第一步執(zhí)行所述更新語句成功;[0120]4、其他情況均為異常[0121]本發(fā)明通過為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列,以及將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據,只需要一個事務就完成了隊列數據的插入,并且沒有額外的維護隊列長度的系統(tǒng)開銷,減少了前端與數據庫端的交互次數,系統(tǒng)架構簡單,便于實施和維護,也降低了更新請求時資源被鎖定的時間和數量,從而使系統(tǒng)始終處于穩(wěn)定、高效的狀態(tài),可以在海量數據、高并發(fā)的情況下保證循環(huán)隊列系統(tǒng)的快速數據請求響應。[0122]另外,本發(fā)明通過賦予所述對象一預設的對象關鍵字,按加I的方式依次賦予循環(huán)隊列中每個存儲隊列數據的位置一預設的位置號,可以用對象關鍵字(objectKey)和位置號(positionNumber)生成關系型數據庫的聯合關鍵字,來唯一標識每個對象的循環(huán)隊列中的隊列數據,當需要更新隊列數據時,可將所述新的隊列數據存儲入所述對象關鍵字的新的隊列數據存儲的位置號所對應的位置,這樣隊列數據更新時可以有效的利用索引,對檢索記錄進行直接快速定位,不會出現通過范圍掃描數據定位的情況,使前端的數據存儲行為產生最小的系統(tǒng)資源消耗,而且,本發(fā)明可將循環(huán)隊列應用于關系型數據庫中,循環(huán)隊列可以自動維護隊列長度,關系型數據庫可以處理海量的數據,將兩者結合后,充分發(fā)揮了兩者的優(yōu)勢,當然本發(fā)明也可應用于其它各種類型的數據庫中如非關系型數據庫。[0123]此外,本發(fā)明通過對所述對象關鍵字進行哈希生成相應的哈希值,根據所述哈希值將不同對象的循環(huán)隊列分布式存儲到不同服務器的不同表里或文件里,可以提高系統(tǒng)并發(fā)量和性能。[0124]實施例三[0125]如圖4所示,本發(fā)明還提供另一種數據存儲系統(tǒng),包括隊列模塊I和存儲模塊2。[0126]隊列模塊I用于為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列,具體的,隊列數據可以按照產生順序依次存儲入對象的循環(huán)隊列中。[0127]較佳的,所述隊列模塊I包括存儲個數單元11、隊列單元12、位置單元13和聯系關鍵字單兀14。[0128]存儲個數單元11用于預設對象的循環(huán)隊列中隊列數據的存儲個數為N,其中N為自然數,具體的,所述隊列數據(value)是某對象所產生的將要放到循環(huán)隊列中的數據,所隊列數據的存儲個數為隊列長度(sequenceLength),即某對象所擁有的隊列數據的個數。[0129]隊列單元12用于根據所述隊列數據的存儲個數建立相應長度的循環(huán)隊列。[0130]位置單元13用于按加I的方式依次賦予對象的循環(huán)隊列中每個隊列數據的存儲位置一預設的位置號,具體的,每個對象都有一個單獨的循環(huán)隊列,單個對象所產生的隊列數據,在插入隊列之時,都會先賦予一個位置號(positionNumber),后續(xù)步驟可根據該位置號(positionNumber)將新的隊列數據插入到相應循環(huán)隊列中,位置號(positionNumber)可在單個對象的循環(huán)隊列中標識唯一地一個隊列數據。[0131]聯系關鍵字單元14用于將所述對象關鍵字和所述位置號組合生成聯合關鍵字以標識對象的循環(huán)隊列中每個隊列數據的存儲位置,唯一標識每個對象的循環(huán)隊列中的隊列數據,具體的,在存在多個對象的循環(huán)隊列的情況下,則需要使用對象關鍵字(objectKey)和位置號(positionNumber)聯合在一起后的聯合關鍵字(primaryKey)作為某個對象的循環(huán)隊列中某一隊列數據的唯一標識,當需要更新隊列數據時,可將所述新的隊列數據存儲入所述對象關鍵字的新的隊列數據存儲的位置號所對應的位置,這樣隊列數據更新時可以有效的利用索引,對檢索記錄進行直接快速定位,不會出現通過范圍掃描數據定位的情況,使前端的數據存儲行為產生最小的系統(tǒng)資源消耗,而且,本發(fā)明可將循環(huán)隊列應用于關系型數據庫中,循環(huán)隊列可以自動維護隊列長度,關系型數據庫可以處理海量的數據,將兩者結合后,充分發(fā)揮了兩者的優(yōu)勢,當然本發(fā)明也可應用于其它各種類型的數據庫中如非關系型數據庫。[0132]存儲模塊2用于將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據,具體的,由于循環(huán)隊列的長度固定,所以當循環(huán)隊列未存滿時,新的隊列數據會覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個空白隊列數據,當循環(huán)隊列已經存滿時,新的隊列數據會覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個舊的隊列數據,這樣只需要一個事務就完成了隊列數據的插入,并且沒有額外的維護隊列長度的系統(tǒng)開銷,減少了前端與數據庫端的交互次數,系統(tǒng)架構簡單,便于實施和維護,也降低了更新請求時資源被鎖定的時間和數量,從而使系統(tǒng)始終處于穩(wěn)定、高效的狀態(tài),可以在海量數據、高并發(fā)的情況下保證循環(huán)隊列系統(tǒng)的快速數據請求響應。[0133]較佳的,所述存儲模塊2包括判斷單元21、第一存儲單元22和第二存儲單元23。[0134]判斷單元21用于獲取所述對象的循環(huán)隊列中最近一次存儲的隊列數據的位置號,即取得當前對象的循環(huán)隊列中最近的positionNumber(latest(positionNumber)),并判斷是否獲取成功。[0135]第一存儲單元22用于當所述判斷單元判斷為獲取成功時,根據最近一次存儲的隊列數據的位置號、所述隊列數據的存儲個數及取模公式獲取新的隊列數據的存儲位置的聯合關鍵字,以及將所述新的隊列數據存儲入所述聯合關鍵字所對應的存儲位置,即用取模的方式計算出新的隊列數據的positionNumber,使最新的隊列數據覆蓋掉最舊的隊列數據。[0136]優(yōu)選的,所述第一存儲單元采用的所述取模公式為:[0137]新的隊列數據存儲的位置號=(最近一次存儲的隊列數據的位置號+1)%N[0138]第二存儲單元23用于當所述判斷單元判斷為獲取不成功時,將所述新的隊列數據存儲入所述對象的循環(huán)隊列的第一個隊列數據的存儲位置。[0139]優(yōu)選的,所述數據存儲系統(tǒng)還包括一對象關鍵字模塊3用于賦予所述對象一預設的對象關鍵字,具體的,所述對象(object)是循環(huán)隊列的所有者,例如,在角色動態(tài)系統(tǒng)中,每個角色都是一個對象,在眾多的對象中,可以使用對象關鍵字(objectKey)來標識唯一的一個對象。[0140]優(yōu)選的,所述數據存儲系統(tǒng)還包括一哈希模塊4用于對所述對象關鍵字進行哈希生成相應的哈希值,根據所述哈希值將不同對象的數據分布式存儲到不同服務器的不同表里或文件里,可以提高系統(tǒng)并發(fā)量和性能。[0141]本發(fā)明通過為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列,以及將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據,只需要一個事務就完成了隊列數據的插入,并且沒有額外的維護隊列長度的系統(tǒng)開銷,減少了前端與數據庫端的交互次數,系統(tǒng)架構簡單,便于實施和維護,也降低了更新請求時資源被鎖定的時間和數量,從而使系統(tǒng)始終處于穩(wěn)定、高效的狀態(tài),可以在海量數據、高并發(fā)的情況下保證循環(huán)隊列系統(tǒng)的快速數據請求響應。[0142]另外,本發(fā)明通過賦予所述對象一預設的對象關鍵字,按加I的方式依次賦予循環(huán)隊列中每個存儲隊列數據的位置一預設的位置號,可以用對象關鍵字(objectKey)和位置號(positionNumber)生成關系型數據庫的聯合關鍵字,來唯一標識每個對象的循環(huán)隊列中的隊列數據,當需要更新隊列數據時,可將所述新的隊列數據存儲入所述對象關鍵字的新的隊列數據存儲的位置號所對應的位置,這樣隊列數據更新時可以有效的利用索引,對檢索記錄進行直接快速定位,不會出現通過范圍掃描數據定位的情況,使前端的數據存儲行為產生最小的系統(tǒng)資源消耗,而且,本發(fā)明可將循環(huán)隊列應用于關系型數據庫中,循環(huán)隊列可以自動維護隊列長度,關系型數據庫可以處理海量的數據,將兩者結合后,充分發(fā)揮了兩者的優(yōu)勢,當然本發(fā)明也可應用于其它各種類型的數據庫中如非關系型數據庫。[0143]此外,本發(fā)明通過對所述對象關鍵字進行哈希生成相應的哈希值,根據所述哈希值將不同對象的循環(huán)隊列分布式存儲到不同服務器的不同表里或文件里,可以提高系統(tǒng)并發(fā)量和性能。[0144]本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的系統(tǒng)而言,由于與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。[0145]專業(yè)人員還可以進一步意識到,結合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結合來實現,為了清楚地說明硬件和軟件的可互換性,在上述說明中已經按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術方案的特定應用和設計約束條件。專業(yè)技術人員可以對每個特定的應用來使用不同方法來實現所描述的功能,但是這種實現不應認為超出本發(fā)明的范圍。[0146]顯然,本領域的技術人員可以對發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要求及其等同技術的范圍之內,則本發(fā)明也意圖包括這些改動和變型在內?!緳嗬蟆?.一種數據存儲方法,其特征在于,包括:為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列;以及將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據。2.如權利要求1所述的數據存儲方法,其特征在于,為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列的步驟之前還包括,賦予所述對象一預設的對象關鍵字。3.如權利要求2所述的數據存儲方法,其特征在于,為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列的步驟之后還包括:對所述對象關鍵字進行哈希生成相應的哈希值,根據所述哈希值將不同對象的循環(huán)隊列分布式存儲到不同服務器的不同表里或文件里。4.如權利要求3所述的數據存儲方法,其特征在于,為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列的步驟包括:預設對象的循環(huán)隊列中隊列數據的存儲個數為N,其中N為自然數;根據所述隊列數據的存儲個數建立相應長度的循環(huán)隊列;按加I的方式依次賦予對象的循環(huán)隊列中每個隊列數據的存儲位置一預設的位置號;將所述對象關鍵字和所述位置號組合生成聯合關鍵字以標識對象的循環(huán)隊列中每個隊列數據的存儲位置。5.如權利要求4所述的`數據存儲方法,其特征在于,將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據的步驟包括:獲取所述對象的循環(huán)隊列中最近一次存儲的隊列數據的位置號,并判斷是否獲取成功;若成功,則根據最近一次存儲的隊列數據的位置號、所述隊列數據的存儲個數及取模公式獲取新的隊列數據的存儲位置的聯合關鍵字,以及將所述新的隊列數據存儲入所述聯合關鍵字所對應的存儲位置;若不成功,則將所述新的隊列數據存儲入所述對象的循環(huán)隊列的第一個隊列數據的存儲位置。6.如權利要求5所述的數據存儲方法,其特征在于,所述取模公式為:新的隊列數據存儲的位置號=(最近一次存儲的隊列數據的位置號+1)%Ν?7.一種數據存儲系統(tǒng),其特征在于,包括:隊列模塊,用于為對象提供依序循環(huán)存儲隊列數據的循環(huán)隊列;以及存儲模塊,用于將新的隊列數據覆蓋所述對象的循環(huán)隊列中最近一次存儲的隊列數據之后的一個隊列數據。8.如權利要求7所述的數據存儲系統(tǒng),其特征在于,還包括一對象關鍵字模塊,用于賦予所述對象一預設的對象關鍵字。9.如權利要求8所述的數據存儲系統(tǒng),其特征在于,還包括一哈希模塊,用于對所述對象關鍵字進行哈希生成相應的哈希值,根據所述哈希值將不同對象的數據分布式存儲到不同服務器的不同表里或文件里。10.如權利要求9所述的數據存儲系統(tǒng),其特征在于,所述隊列模塊包括:存儲個數單元,用于預設對象的循環(huán)隊列中隊列數據的存儲個數為N,其中N為自然數;隊列單元,用于根據所述隊列數據的存儲個數建立相應長度的循環(huán)隊列;位置單元,用于按加I的方式依次賦予對象的循環(huán)隊列中每個隊列數據的存儲位置一預設的位置號;聯系關鍵字單元,用于將所述對象關鍵字和所述位置號組合生成聯合關鍵字以標識對象的循環(huán)隊列中每個隊列數據的存儲位置。11.如權利要求10所述的數據存儲系統(tǒng),其特征在于,所述存儲模塊包括:判斷單元,用于獲取所述對象的循環(huán)隊列中最近一次存儲的隊列數據的位置號,并判斷是否獲取成功;第一存儲單元,用于當所述判斷單元判斷為獲取成功時,根據最近一次存儲的隊列數據的位置號、所述隊列數據的存儲個數及取模公式獲取新的隊列數據的存儲位置的聯合關鍵字,以及將所述新的隊列數據存儲入所述聯合關鍵字所對應的存儲位置;第二存儲單元,用于當所述判斷單元判斷為獲取不成功時,將所述新的隊列數據存儲入所述對象的循環(huán)隊列的第一個隊列數據的存儲位置。12.如權利要求11所述的數據存儲系統(tǒng),其特征在于,所述第一存儲單元采用的所述取模公式為:新的隊列數據存儲的位置號=(最近一次存儲的隊列數據的位置號+1)%N0【文檔編號】G06F17/30GK103514177SQ201210206419【公開日】2014年1月15日申請日期:2012年6月20日優(yōu)先權日:2012年6月20日【發(fā)明者】王永庚申請人:盛趣信息技術(上海)有限公司