本發(fā)明涉及一種大數(shù)據(jù)隨機存取系統(tǒng)和方法,尤其涉及一種基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取系統(tǒng)和方法。
背景技術:
隨機數(shù)算法在當今世界有著非常廣泛的應用,例如金融、機械制造、IT網(wǎng)絡等等。這也促使人們對隨機數(shù)算法進行更加深入的研究,目前甚至有提供隨機數(shù)服務的真隨機數(shù)網(wǎng)站,利用大氣噪聲或者某種不可預測的大范圍的隨機源產(chǎn)生隨機數(shù)。
在實際應用中,應該采用什么樣的隨機數(shù)算法需要根據(jù)系統(tǒng)的不同要求進行選擇。對于比較簡單的需求,比如網(wǎng)站的隨機驗證碼,使用操作系統(tǒng)自帶的偽隨機算法就可以滿足要求。對于銀行密碼或數(shù)據(jù)加密,隨機數(shù)的要求很嚴格甚至非常苛刻,一旦出問題有可能導致很大的損失。
同時,大數(shù)據(jù)分區(qū)對隨機數(shù)算法的要求是很高的,它直接影響著數(shù)據(jù)存儲的分散是否一致。一個好的隨機算法可以減少數(shù)據(jù)的偏離,從而提高查詢速度。
隨著技術的進步,采用隨機性非常高的偽隨機算法與一系列復雜的內部邏輯機制相結合的方法產(chǎn)生隨機數(shù),可以滿足要求。如此,雖然增加了程序的復雜度,但是不需要增加額外的硬件支持,而且在數(shù)千甚至上萬年內可以保證隨機數(shù)的不重復性。
因此,本領域需要開發(fā)一種采用偽隨機算法與內部邏輯機制相結合的系統(tǒng)和方法,以產(chǎn)生數(shù)據(jù)偏離少且安全保密程度高的隨機數(shù)。
技術實現(xiàn)要素:
為解決上述現(xiàn)有技術中的問題,本發(fā)明提供了一種基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取系統(tǒng)和方法。
為實現(xiàn)上述目的,本發(fā)明的一種基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取方法的具體技術方案如下:
一種基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取方法,包括以下步驟:步驟一,在UsbKey密鑰的支持下,利用梅森素數(shù)旋轉隨機算法生成隨機數(shù)和數(shù)據(jù)切片,并把隨機數(shù)和數(shù)據(jù)切片加密存儲到數(shù)據(jù)庫;步驟二,在UsbKey密鑰的支持下,根據(jù)上次關閉參數(shù)或者默認啟動參數(shù),加載數(shù)據(jù)庫中存儲的隨機數(shù)和數(shù)據(jù)切片以組合生成隨機序列,將生成的隨機序列分發(fā)給n個隨機隊列,從數(shù)據(jù)切片中利用約瑟夫環(huán)算法把需要裝載的隨機序列解密并裝載到隨機隊列中,以增加裝載隨機度;步驟三,根據(jù)加載的數(shù)據(jù)切片信息監(jiān)控是否需要加載新的數(shù)據(jù)切片信息,當隨機隊列中的數(shù)據(jù)不足時,觸發(fā)繼續(xù)加載數(shù)據(jù)并分發(fā)給隨機隊列;步驟四,根據(jù)獲取數(shù)據(jù)請求中的約瑟夫環(huán)參數(shù)索引,在Usbkey中獲取相應的約瑟夫參數(shù),從隨機隊列獲取數(shù)據(jù)。
根據(jù)本發(fā)明的另一方面,還提供了一種基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取系統(tǒng),所述系統(tǒng)包括以下功能模塊:隨機數(shù)產(chǎn)生單元,可在UsbKey密鑰的支持下,利用梅森素數(shù)旋轉隨機算法生成隨機數(shù)和數(shù)據(jù)切片,并把隨機數(shù)和數(shù)據(jù)切片加密存儲到數(shù)據(jù)庫中;隨機序列裝載分發(fā)單元,可在UsbKey密鑰的支持下,根據(jù)上次關閉參數(shù)或者默認啟動參數(shù),加載數(shù)據(jù)庫中存儲的隨機數(shù)和數(shù)據(jù)切片以組合生成隨機序列,然后將生成的隨機序列分發(fā)給n個隨機隊列,從數(shù)據(jù)切片中利用約瑟夫環(huán)算法把需要裝載的隨機序列解密并裝載到隨機隊列中,以增加裝載隨機度;監(jiān)控單元,根據(jù)加載的數(shù)據(jù)切片信息決定是否加載新的數(shù)據(jù)切片信息,當隨機隊列中的數(shù)據(jù)不足時,觸發(fā)繼續(xù)加載數(shù)據(jù)并分發(fā)給隨機隊列,以監(jiān)控隨機隊列中的數(shù)據(jù);數(shù)據(jù)獲取單元,根據(jù)獲取數(shù)據(jù)請求中的約瑟夫環(huán)參數(shù)索引,在Usbkey中獲取相應的約瑟夫參數(shù),從隨機隊列獲取數(shù)據(jù)。
在本發(fā)明的基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取系統(tǒng)和方法中,通過將梅森素數(shù)旋轉隨機算法(MT偽隨機算法)與約瑟夫環(huán)的內部邏輯結合,產(chǎn)生所需隨機數(shù),在保證隨機數(shù)的隨機性的同時,滿足數(shù)據(jù)的安全保密,即使系統(tǒng)設計人員也無法獲得實際應用中系統(tǒng)產(chǎn)生的隨機數(shù)信息。
附圖說明
圖1為本發(fā)明的基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取系統(tǒng)的結構示意圖;
圖2為本發(fā)明的基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取系統(tǒng)的工作流程示意圖;
圖3示出了本發(fā)明的基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取方法中的隨機序列生成流程;
圖4示出了本發(fā)明的基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取方法中的隨機序列裝載流程;
圖5示出了本發(fā)明的基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取方法中的監(jiān)控流程;
圖6示出了本發(fā)明的基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取方法中的獲取數(shù)據(jù)流程。
具體實施方式
為了更好地了解本發(fā)明的目的、結構及功能,下面結合附圖,對本發(fā)明的基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取系統(tǒng)和方法做進一步詳細描述。
如圖1-2所示,本發(fā)明的基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取系統(tǒng)包括以下功能模塊:
隨機數(shù)產(chǎn)生單元,可在UsbKey(身份認證)密鑰的支持下,利用梅森素數(shù)旋轉隨機算法(MT算法)生成隨機數(shù)和數(shù)據(jù)切片,并把隨機數(shù)和數(shù)據(jù)切片加密存儲到文件系統(tǒng)(如數(shù)據(jù)庫)中。
隨機序列裝載分發(fā)單元,可在UsbKey密鑰的支持下,根據(jù)上次關閉參數(shù)或者默認啟動參數(shù),加載數(shù)據(jù)庫中存儲的隨機數(shù)和數(shù)據(jù)切片以組合生成隨機序列,然后將生成的隨機序列分發(fā)給n個隨機隊列,從數(shù)據(jù)切片中利用約瑟夫環(huán)算法把需要裝載的隨機序列解密并裝載到隨機隊列中,以增加裝載隨機度。
監(jiān)控單元,根據(jù)加載的數(shù)據(jù)切片信息決定是否加載新的數(shù)據(jù)切片信息,當隨機隊列中的數(shù)據(jù)不足時,觸發(fā)繼續(xù)加載數(shù)據(jù)并分發(fā)給隨機隊列,以監(jiān)控隨機隊列中的數(shù)據(jù)。
數(shù)據(jù)獲取單元,根據(jù)獲取數(shù)據(jù)請求中的約瑟夫環(huán)參數(shù)索引,在Usbkey中獲取相應的約瑟夫參數(shù),從隨機隊列獲取數(shù)據(jù)。
隨機序列裝載分發(fā)單元包括隨機序列裝載器,隊列分發(fā)器以及隨機隊列。其中,隨機序列裝載器可在Usbkey的密鑰支持下,綜合隨機數(shù)、數(shù)據(jù)切片以及系統(tǒng)上次關閉參數(shù),從數(shù)據(jù)切片中把需要裝載的隨機序列解密并裝載到數(shù)據(jù)庫中。隊列分發(fā)器負責把隨機序列裝載器裝載的隨機序列分發(fā)到相應的n個隨機隊列中,盡可能的達到最大隨機性。隨機隊列存儲隨機序列的數(shù)據(jù),這相當于緩存的作用,可以提高取數(shù)據(jù)速率。隨機隊列中一旦數(shù)據(jù)較少,會由監(jiān)控單元或者數(shù)據(jù)獲取單元向隨機序列裝載器發(fā)起裝載隨機隊列的操作。
下面分別詳細描述以上組成系統(tǒng)的各功能單元。
進一步,隨機數(shù)產(chǎn)生單元中采用Mersenne Twister random number Algorithm(梅森素數(shù)旋轉隨機算法,MT19937)。MT算法是一個偽隨機數(shù)發(fā)生算法,基于有限二進制字段上的矩陣線性遞歸,可以快速產(chǎn)生高質量的偽隨機數(shù),修正了古典隨機數(shù)發(fā)生算法的很多缺陷。這個算法通常使用兩個相近的變體,變體不同之處在于使用了不同的梅森素數(shù),一個更新的和更常用的是MT19937,32位字長,還有一個變體是64位版的MT19937-64。對于一個k位的長度,梅森旋轉算法會在[0,2k-1]的區(qū)間之間生成離散型均勻分布的隨機數(shù)。
一般采用梅森旋轉算法的一變體MT19937進行隨機算,可以產(chǎn)生32位整數(shù)序列,具有以下的優(yōu)點:
1)有219937-1的非常長的周期,足夠保證我們5000億不重復的要求;
2)在1≤k≤623的維度之間都可以均等分布;
3)除了在統(tǒng)計學意義上的不正確的隨機數(shù)生成器以外,在所有偽隨機數(shù)生成器法中是最快的。
隨機數(shù)產(chǎn)生的同時會記錄下使用該算法生成的隨機數(shù)的數(shù)量,下次生成隨機數(shù)據(jù)時,首先跳過已生成的數(shù)據(jù)量,這樣就可以保證偽隨機數(shù)的不重復性,而隨機的種子是不變的。
為了保證數(shù)據(jù)的安全,降低在數(shù)據(jù)產(chǎn)生、存儲過程中的風險,我們使用數(shù)據(jù)切片技術存儲記錄信息,MT算法產(chǎn)生完整數(shù)據(jù)存儲在內存中,任何人無法知道具體的內容,但是一旦存儲之后,就有泄漏的風險,所以我們除了數(shù)據(jù)打散切片之外,還要對切片的文件統(tǒng)一加密。
其中,記錄數(shù)據(jù)的產(chǎn)生,是以a張數(shù)據(jù)為一組,也就是數(shù)據(jù)切片文件也以a為單元,首先把每條數(shù)據(jù)隨機切成n份,組成n個文件,然后對這n個文件進行加密,然后把這n個文件分別寫入文件系統(tǒng)中,寫入文件系統(tǒng)之前的步驟都是在內存中進行,可以保證數(shù)據(jù)生成者沒有機會查看到文件內容。在把a個記錄打散為n個文件的同時,會生成相應的切片信息,在寫入文件系統(tǒng)以后,這些信息保存到數(shù)據(jù)庫中。操作期間要保證usbkey有效,能夠正常取到加密密鑰。期間任何環(huán)節(jié)出現(xiàn)任何問題,本次隨機記錄生成失敗,失敗后會回滾所做操作,保證數(shù)據(jù)的完整性。
由此,隨機數(shù)產(chǎn)生單元負責使用MT算法生成隨機數(shù),并把數(shù)據(jù)切片存儲到文件系統(tǒng),相關的信息及切片信息保存如數(shù)據(jù)庫中。生成隨機數(shù)的操作是由人工執(zhí)行并不是自動的,并且需要UsbKey的密鑰支持。
進一步,隨機序列裝載器在每次系統(tǒng)啟動、隨機隊列數(shù)據(jù)不足的時候運行。啟動的時候會加載上次關閉保存的記錄信息(數(shù)據(jù)不足不用加載,因為已經(jīng)加載過了),根據(jù)這些信息判斷需要加載哪一批數(shù)據(jù)切片文件,并判斷出本批數(shù)據(jù)切片文件已經(jīng)銷售到了哪一張,然后從本張開始,利用隊列分發(fā)器把隨機序列隨機裝載到隨機隊列中,直到隨機隊列裝載滿為止。
隨機序列裝載器加載的數(shù)據(jù)切片文件組成隨機序列是常駐內存的,除非本次序列獲取完畢。一旦監(jiān)控單元發(fā)現(xiàn)隨機隊列數(shù)據(jù)不足,就會觸發(fā)隨機序列裝載器執(zhí)行裝載操作。隨機序列裝載器首先會檢查目前維護的隨機序列是否能滿足隨機隊列的數(shù)據(jù)要求,如果不能滿足就會裝載后續(xù)的數(shù)據(jù)切片文件補充隨機序列,檢查完畢,調用隊列分發(fā)器把隨機隊列充滿。
進一步,隊列分發(fā)器用于補充隨機隊列數(shù)據(jù),在系統(tǒng)啟動或者監(jiān)控單元發(fā)現(xiàn)隨機隊列不足的情況下會執(zhí)行。系統(tǒng)啟動時隨機隊列剛剛生成,還沒有數(shù)據(jù),所以隊列分發(fā)器把從隨機序列裝載器獲取到的數(shù)據(jù)隨機放到某一個隨機隊列中,此處的隨機算法可以使用系統(tǒng)自帶的隨機函數(shù)也可以使用MT算法,直到所有的n個隨機隊列充滿為止。
進一步,隨機隊列是為了保證取記錄信息的速率而創(chuàng)建的,相當于一個快速緩存,另外一個目的是為了增加取數(shù)據(jù)的隨機性,隨機隊列有n個,每次取數(shù)據(jù)的時候,根據(jù)約瑟夫環(huán)算法從某一個隨機隊列中跳過k個數(shù)據(jù)來獲得請求的記錄,增加取數(shù)據(jù)的隨機度。隨機隊列的長度需要根據(jù)實際銷售情況調整,銷售量大隊列長度相應調大,銷售量小可以適當縮小。
進一步,當監(jiān)控單元發(fā)現(xiàn)某個隨機隊列數(shù)據(jù)不足b%(10%-20%)的時候,就會觸發(fā)隨機序列裝載器,隨機序列裝載器檢查完自身數(shù)據(jù)之后,就會調用隊列分發(fā)器分發(fā)數(shù)據(jù)到隨機隊列,直到隨機隊列充滿為止。監(jiān)控單元在系統(tǒng)啟動后就會不停的循環(huán)執(zhí)行,是一個定時任務。它會監(jiān)控隨機隊列中的數(shù)據(jù)量,一旦低于規(guī)定的值,就會調用隨機序列裝載器裝載數(shù)據(jù)。
監(jiān)控單元監(jiān)控隨機隊列中的數(shù)據(jù),一旦隨機隊列中的數(shù)據(jù)不足,會請求數(shù)據(jù)裝載器加載數(shù)據(jù),從而分發(fā)給隨機隊列,數(shù)據(jù)裝載器根據(jù)目前加載的數(shù)據(jù)切片信息決定是否加載新的數(shù)據(jù)切片信息。
另外,監(jiān)控單元還會檢查數(shù)據(jù)獲取單元的銷售日志的數(shù)量,一旦數(shù)據(jù)量達到規(guī)定值或者超過規(guī)定的最長時限就會把日志記錄入庫保存,避免因頻繁更新造成的性能下降。監(jiān)控單元保證了不會因為缺少數(shù)據(jù)而導致的失敗,同時也因為不用實時更新數(shù)據(jù)庫而提高了取數(shù)據(jù)的速率。
進一步,數(shù)據(jù)獲取單元采用約瑟夫環(huán)獲取數(shù)據(jù),約瑟夫環(huán)是一個數(shù)學的應用問題,其數(shù)學推導公式為:f[1]=1,f[n]=(f[n-1]+k)%n(n>1)。
數(shù)據(jù)獲取單元在獲取數(shù)據(jù)的時候會用到約瑟夫環(huán),我們隨機規(guī)定系列的n、k、m值存放在usbkey中,獲取數(shù)據(jù)的請求帶有使用第幾個n、k、m值的索引,這個索引值是隨機的,根據(jù)這個索引從usbkey里面去的這組n、k、m值,從而在隨機隊列中取得要獲取的記錄數(shù)。約瑟夫環(huán)可以使取得的數(shù)據(jù)隨機性更好,由于有usbkey加密保存參數(shù),可以保證即使知道了隨機隊列中的數(shù)據(jù),也不能計算出本次請求到底會返回哪個記錄。
這里的獲取數(shù)據(jù),就是指獲取一個隨機序號,獲取數(shù)據(jù)由數(shù)據(jù)獲取單元執(zhí)行,只有接收到請求才會獲取數(shù)據(jù)。獲取數(shù)據(jù)需要帶有約瑟夫環(huán)參數(shù)的索引,這個索引是又請求隨機產(chǎn)生的一個正整數(shù),在從usbkey中獲取約瑟夫環(huán)參數(shù)的時候,根據(jù)定義的參數(shù)組的多少取余,然后取得約瑟夫環(huán)參數(shù),取得參數(shù)后數(shù)據(jù)獲取單元根據(jù)公式計算出應該從那個隨機隊列第幾個數(shù)據(jù)取得返回的數(shù)據(jù)。取得數(shù)據(jù)后,數(shù)據(jù)獲取單元記錄獲取記錄,然后把數(shù)據(jù)返回給請求。
數(shù)據(jù)獲取單元在返回數(shù)據(jù)給相應請求之后,應該檢查一下各隨機隊列的數(shù)據(jù)情況,一旦發(fā)現(xiàn)有隨機隊列數(shù)據(jù)不足(小于隊列長度的10%-20%)應該通知監(jiān)控單元,監(jiān)控單元會調用隨機序列裝載器裝載數(shù)據(jù),不會由于數(shù)據(jù)不足而導致獲取失敗的問題。
進一步,在系統(tǒng)中,Usbkey是安全關鍵,用來存儲切片數(shù)據(jù)的密鑰和數(shù)據(jù)獲取單元使用的約瑟夫環(huán)參數(shù),一旦出現(xiàn)泄漏就會有嚴重的問題。系統(tǒng)使用目前比較先進的usbkey技術來加密保存我們的數(shù)據(jù),并嚴格控制usbkey的使用權限,來最大限度的保證數(shù)據(jù)的安全。
由此,本發(fā)明的基于約瑟夫環(huán)的隨機獲取數(shù)據(jù)的系統(tǒng),不單純是產(chǎn)生隨機序列的過程,它在獲取隨機序列的流程上,增加了獲取數(shù)據(jù)的隨機性和安全性。使用usbkey加密方法,可以保證操作者無法控制隨機數(shù)的取得,即使usbkey泄漏了,由于每次取得的ID還有相當?shù)碾S機性,也能保證無法任意獲取想要的數(shù)據(jù)。
另外,本發(fā)明將數(shù)據(jù)切片技術、加密技術與數(shù)據(jù)庫相結合,保證了數(shù)據(jù)的安全,其產(chǎn)生過程涉及人員很少,而且保密性能非常好,整個過程生產(chǎn)人員都無法獲取任何的記錄信息。
本發(fā)明的系統(tǒng)雖然安全和隨機性能考慮的很周到,但是增加了系統(tǒng)的復雜性,勢必會影響取數(shù)據(jù)的速度,而且由于大批數(shù)據(jù)駐留內存,還有冗余的情況,所以對系統(tǒng)的開銷也較大。然而,由于目前的服務器性能已經(jīng)有很大的進步,開銷方面不用有過多考慮。至于取數(shù)據(jù)的速度,可以通過調整各部分的參數(shù),提高代碼編寫質量來控制。
另一方面,本發(fā)明還公開了利用上述基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取系統(tǒng)進行隨機存取的方法,具體如下。
本發(fā)明的基于約瑟夫環(huán)的大數(shù)據(jù)隨機存取方法包括以下步驟:
步驟一,在UsbKey(身份認證)密鑰的支持下,利用梅森素數(shù)旋轉隨機算法(MT算法)生成隨機數(shù)和數(shù)據(jù)切片,并把隨機數(shù)和數(shù)據(jù)切片加密存儲到文件系統(tǒng)(如數(shù)據(jù)庫)中。
步驟二,在UsbKey密鑰的支持下,根據(jù)上次關閉參數(shù)或者默認啟動參數(shù),加載數(shù)據(jù)庫中存儲的隨機數(shù)和數(shù)據(jù)切片以組合生成隨機序列,然后將生成的隨機序列分發(fā)給n個隨機隊列,從數(shù)據(jù)切片中利用約瑟夫環(huán)算法把需要裝載的隨機序列解密并裝載到隨機隊列中,以增加裝載隨機度。
步驟三,根據(jù)加載的數(shù)據(jù)切片信息決定是否加載新的數(shù)據(jù)切片信息,當隨機隊列中的數(shù)據(jù)不足時,觸發(fā)繼續(xù)加載數(shù)據(jù)并分發(fā)給隨機隊列,以監(jiān)控隨機隊列中的數(shù)據(jù)。
步驟四,根據(jù)獲取數(shù)據(jù)請求中的約瑟夫環(huán)參數(shù)索引,在Usbkey中獲取相應的約瑟夫參數(shù),從隨機隊列獲取數(shù)據(jù)。
進一步,如圖3所示,在步驟二中,隨機序列的生成流程如下:
1)啟動數(shù)據(jù)生成客戶端,檢查usbkey是否正常,輸入生成數(shù)據(jù)的批次、數(shù)量等參數(shù);
2)生成記錄隨機序列;
3)把生成的記錄序列切片,分成n份,放入n個文件,并使用從usbkey獲得的密鑰把這n個文件加密完成;
4)數(shù)據(jù)切片存入具體文件,與數(shù)據(jù)切片相關的信息存入數(shù)據(jù)庫中。
隨機數(shù)據(jù)生成流程是生成記錄數(shù)據(jù)ID的流程,數(shù)據(jù)生成流程是由隨機數(shù)生成器負責的,它除了負責隨機數(shù)的產(chǎn)生,同時也負責數(shù)據(jù)的切片加密存儲,數(shù)據(jù)信息的入庫操作。這些操作需要Usbkey的支持(密鑰是否正常),如果系統(tǒng)沒有插入Usbkey就無法獲取密鑰。
進一步,如圖4所示,在步驟二中,隨機序列裝載的流程如下:
1)檢查必須的usbkey是否正常,如不正常直接失敗退出;
2)獲取上次系統(tǒng)退出時的參數(shù),如果是第一次啟動,使用默認的配置參數(shù);
3)使用usbkey中獲取的密鑰解密切片文件;
4)根據(jù)切片文件和數(shù)據(jù)庫中的信息生成ID序列;
5)從ID序列中順序獲取數(shù)據(jù),隨機分發(fā)給任意一個隨機隊列。
隨機序列裝載流程在每次重新啟動的時候會執(zhí)行,主要的功能是根據(jù)上次的參數(shù)加載數(shù)據(jù)切片文件,組合成隨機序列,然后分發(fā)給隨機隊列待獲取。涉及到的模塊有隨機序列裝載器、隊列分發(fā)器、隨機隊列、usbkey。
如果是第一次啟動,那么上次啟動參數(shù)應該是系統(tǒng)默認的第一次啟動參數(shù)。另外在解密切片文件的時候,可能會掃描文件是否存在、數(shù)據(jù)庫信息是否完整等。
進一步,如圖5所示,在步驟三中,隨機隊列的監(jiān)控流程如下:
1)判斷M個隨機隊列中是否存在數(shù)據(jù)不足,最大數(shù)據(jù)的20%的隊列;
2)如果存在隨機隊列數(shù)據(jù)不足最大數(shù)據(jù)的20%,則判斷隨機序列中加載的切片數(shù)據(jù)是否不足最大加載切片數(shù)據(jù)的20%;
3)如果隨機序列中的數(shù)據(jù)不足最大加載切片數(shù)據(jù)的20%,取下一組切片數(shù)據(jù)文件,取解密密鑰以組合成新的隨機序列,并且續(xù)接到當前隨機序列中;
4)從隨機序列中順序抽取數(shù)據(jù)隨機插入到數(shù)據(jù)不足的隨機隊列中,直到所有隨機隊列充滿為止;
5)判斷獲取數(shù)據(jù)的銷售日志是否超過最大值,如果超過最大值,把銷售日志記錄入庫;
6)判斷獲取數(shù)據(jù)的未寫入日志時間是否超過規(guī)定值,如果超過規(guī)定值把日志記錄入庫;
7)判斷完成,休眠一段時間,繼續(xù)返回步驟1)循環(huán)判斷。
監(jiān)控過程是一個循環(huán)過程,從系統(tǒng)啟動開始每隔一定時間都會執(zhí)行一遍,直到系統(tǒng)關閉。
進一步,如圖6所示,在步驟四中,獲取數(shù)據(jù)的流程如下:
1)驗證請求參數(shù)和usbkey是否正常,如果不正常,直接返回出錯;
2)根據(jù)請求參數(shù)的隨機數(shù)參數(shù),從usbkey中獲取到使用的約瑟夫環(huán)參數(shù);
3)根據(jù)約瑟夫環(huán)參數(shù),確定應該從m個隨機隊列中的哪個隊列取數(shù)據(jù);
4)根據(jù)約瑟夫環(huán)參數(shù),在取數(shù)據(jù)的隨機隊列中取得要請求的信息;
5)記錄信息日志;
6)判斷隨機隊列數(shù)據(jù)是否充足,如果充足,直接返回請求數(shù)據(jù),如果有隨機隊列數(shù)據(jù)不充足,調用加載隊列子流程加載數(shù)據(jù)(加載隊列子流程是異步過程,調用后函數(shù)返回,然后返回請求數(shù)據(jù))。
獲取數(shù)據(jù)流程設計數(shù)據(jù)獲取單元、隨機隊列、隨機序列裝載器、隊列分發(fā)器,其中數(shù)據(jù)獲取單元和隨機隊列是一定會執(zhí)行的,隨機序列裝載器和隊列分發(fā)器只有在獲取完數(shù)據(jù)后判斷隊列中數(shù)據(jù)不足的時候才會執(zhí)行。
獲取數(shù)據(jù)需要請求攜帶隨機約瑟夫環(huán)索引數(shù)據(jù),根據(jù)此索引數(shù)據(jù)在usbkey中找到相應的約瑟夫環(huán)參數(shù),從而根據(jù)這些參數(shù)計算出應該從那個隨機隊列取數(shù)據(jù),應該取第幾個數(shù)據(jù),增加取得數(shù)據(jù)的隨機性。
本發(fā)明的方法充分考慮了隨機數(shù)據(jù)的安全和隨機性,利用現(xiàn)代計算機技術實現(xiàn)了高速度的獲取隨機數(shù)據(jù),滿足了大數(shù)據(jù)存取上的數(shù)據(jù)偏斜率問題。
實施例一:
本發(fā)明的系統(tǒng)采用MT隨機數(shù)算法按照規(guī)定規(guī)則產(chǎn)生隨機序列,使用切片技術把每條隨機數(shù)記錄ID切成n(5)片,隨機放入n(5)個隨機切片文件中,存放的順序及規(guī)則由數(shù)據(jù)庫存儲,切片文件以m(1000萬)張記錄為一組,每個切片文件使用加密算法加密存儲,加密密鑰存儲在usbkey加密狗中。
系統(tǒng)每次啟動首先解密隨機切片文件結合數(shù)據(jù)庫存儲信息組成完整記錄號序列,然后根據(jù)上次關機保存參數(shù),生成k(20)個隨機隊列,每個隨機隊列充滿a(50000)個記錄數(shù)據(jù),準備好為客戶端返回ID數(shù)據(jù)。
客戶端請求數(shù)據(jù)時,根據(jù)請求參數(shù)按照約瑟夫環(huán)算法隨機從20個隨機隊列中抽取一張隨機ID返回。一旦隊列中的數(shù)據(jù)不足滿隊列的20%(10000張)時,系統(tǒng)按照規(guī)則從隨機序列中抽取數(shù)據(jù)充滿隊列。
加密usbkey中除了存儲密鑰以外,還存儲約瑟夫環(huán)需要的參數(shù)數(shù)組,客戶端請求隨機序列時,利用系統(tǒng)自帶隨機數(shù)(或MT算法)隨機一個參數(shù),系統(tǒng)根據(jù)這個參數(shù)從usbkey中取得約瑟夫環(huán)參數(shù),進而在隨機隊列中取得數(shù)據(jù)。一組切片數(shù)據(jù)銷售剩余不足20%(200w張)的時候,系統(tǒng)加載另外一組切片數(shù)據(jù),以免數(shù)據(jù)不足影響銷售。
因此,本發(fā)明的系統(tǒng)達到了如下的效果:隨機序列保證5000億(50億/年x1000年)以內隨機數(shù)據(jù)不重復;支持至少2000張/秒取數(shù)據(jù)速率;保證數(shù)據(jù)安全,沒有被竊取、篡改可能;切片文件加載記錄序列時間不超過1分鐘。
可以理解,本發(fā)明是通過一些實施例進行描述的,本領域技術人員知悉的,在不脫離本發(fā)明的精神和范圍的情況下,可以對這些特征和實施例進行各種改變或等效替換。另外,在本發(fā)明的教導下,可以對這些特征和實施例進行修改以適應具體的情況及材料而不會脫離本發(fā)明的精神和范圍。因此,本發(fā)明不受此處所公開的具體實施例的限制,所有落入本申請的權利要求范圍內的實施例都屬于本發(fā)明所保護的范圍內。