一種用于大數據隨機抽樣的方法和系統的制作方法
【技術領域】
[0001]本公開涉及一種隨機抽樣方法和系統,具體地,涉及一種用于大數據隨機抽樣的方法和系統。
【背景技術】
[0002]在做市場調查的時候,需要從一個很大的樣本庫中隨機篩選出一定量的樣本來做調查,即需要隨機抽樣調查。存在眾多分布式存儲系統。例如,HBase是一個no-sql (不支持sql條件查詢)的key-value (鍵值)分布式存儲系統,在大數據存取的應用場景中表現十分優異。
[0003]當我們在進行隨機抽樣調查時,如果樣本庫的量級達到了億級別,我們可以選擇具有海量存儲能力的數據庫(例如HBase)來存取數據。從而實現高效的隨機抽樣,得到所需要的樣本來做調查。
[0004]現有技術中存在多種隨機抽樣的方案。第一種方案是將大數據存儲在傳統的關系型數據庫中,利用分庫分表的方式,將數據離散存儲在不同庫和表中。需要隨機抽樣時,根據所選的樣本數據,通過先把所有樣本數據讀取出來,然后針對每個樣本,通過隨機函數(Random)生成一個隨機數,如果隨機數匹配一個值,就采用這個樣本,以這種方式來達到隨機抽樣的效果。該方案存在以下缺陷:傳統的數據庫就需要用到分庫分表(將數據分塊存儲到不同的庫以及不同的表中)等技術,當數據量上億后,其數據存取量大,可維護性低,擴展性低,技術難度高。
[0005]第二種方案是將數據存儲到nosql的分布式存儲系統(例如HBase)中,需要隨機抽樣時,獲取所有滿足條件的樣本,然后進行概率抽樣(同關系型數據庫方法相同)。該方案利用了存儲系統自身的分布式優勢,在存取方面獲得良好效果。但該方案存在以下缺陷:由于需要掃描所有樣本數據,所以當樣本庫中的樣本量達到億級別時,進行一次隨機抽樣很耗時。
【發明內容】
[0006]基于以上對現有技術方案的描述,在現有技術中存在需要提高從大數據樣本中的抽樣的效率的技術問題。
[0007]具體地,根據本發明的第一方面,提供了一種數據庫中的隨機抽樣方法,所述方法包括以下步驟:步驟a:將多個記錄分為多個組;步驟b:隨機抽取所述多個組中的一個或多個組;以及步驟c:并在所隨機抽取的所述一個或多個組中,隨機抽取要抽取數量的記錄。
[0008]在一個實施例中,所述多個組中的每一個組內記錄的數量是相等的。
[0009]在一個實施例中,步驟a還包括:為所述多個組中的每一個組中的特定記錄創建索引。
[0010]在一個實施例中,所述特定記錄是所述多個組中的每一個組中的第一個記錄。[0011 ] 在一個實施例中,創建索引包括將所述索引存放在數據庫。
[0012]在一個實施例中,創建所述索引的周期是根據任務執行的周期確定的。
[0013]在一個實施例中,步驟c還包括:基于要抽取的記錄的數量,產生第一隨機數;對所隨機抽取的所述一個或多個組中的數據進行逐一掃描;對于每一個所掃描的數據,基于要抽取的記錄的數量,產生第二隨機數;如果所述第一隨機數等于所述第二隨機數,則抽取所述記錄。
[0014]在一個實施例中,基于要抽取的記錄的數量產生第一隨機數還基于所述多個記錄的數量;基于要抽取的記錄的數量產生第二隨機數還基于所述多個記錄的數量。
[0015]在一個實施例中,基于所述要抽取的記錄的數量和所述多個記錄的數量產生第一隨機數是隨機產生小于等于所述多個記錄的數量除以要抽取的記錄的數量的第一隨機數;基于所述要抽取的記錄的數量和所述多個記錄的數量產生第二隨機數是隨機產生小于等于所述多個記錄的數量除以要抽取的記錄的數量的第二隨機數。
[0016]根據本發明的第二方面,提供了一種用于數據庫中的隨機抽樣系統,所述系統包括:分組裝置,被配置為:將多個記錄分為多個組;隨機抽取裝置,被配置為:隨機抽取所述多個組中的一個或多個組,并在所隨機抽取的所述一個或多個組中,隨機抽取要抽取數量的記錄。
[0017]在一個實施例中,所述多個組中的每一個組內記錄的數量是相等的。
[0018]在一個實施例中,所述分組裝置還被配置為:為所述多個組中的每一個組中的特定記錄創建索引。
[0019]在一個實施例中,所述特定記錄是所述多個組中的每一個組中的第一個記錄。
[0020]在一個實施例中,創建索引包括將所述索引存放在數據庫。
[0021]在一個實施例中,創建所述索引的周期是根據任務執行的周期確定的。
[0022]在一個實施例中,所述隨機抽取裝置,被配置為:基于要抽取的記錄的數量,產生第一隨機數;對所隨機抽取的所述一個或多個組中的數據進行逐一掃描;對于每一個所掃描的數據,基于要抽取的記錄的數量,產生第二隨機數;如果所述第一隨機數等于所述第二隨機數,則抽取所述記錄。
[0023]在一個實施例中,基于要抽取的記錄的數量產生第一隨機數還基于所述多個記錄的數量;基于要抽取的記錄的數量產生第二隨機數還基于所述多個記錄的數量。
[0024]在一個實施例中,基于所述要抽取的記錄的數量和所述多個記錄的數量產生第一隨機數是隨機產生小于等于所述多個記錄的數量除以要抽取的記錄的數量的第一隨機數;基于所述要抽取的記錄的數量和所述多個記錄的數量產生第二隨機數是隨機產生小于等于所述多個記錄的數量除以要抽取的記錄的數量的第二隨機數。
[0025]根據本發明的第三方面,提供了一種計算機可讀存儲介質,所述計算機可讀存儲介質包括由處理器執行的指令,所述指令被處理器執行以使所述處理器實現根據所述第一方面中所述的方法。
[0026]根據本公開,通過對大數據創建索引,提升抽樣效率,實現大數據隨機抽樣。
【附圖說明】
[0027]圖1是示出了根據本公開實施例的HBase的一個示例。
[0028]圖2是示出了根據本公開實施例的一種數據庫中的隨機抽樣方法。
[0029]圖3是示出了根據本公開實施例的數據庫中的隨機抽樣方法中的分組步驟。
[0030]圖4是示出了根據本公開實施例的數據庫中的隨機抽樣方法中的隨機抽樣步驟。
[0031]圖5是示出了根據本公開實施例的一種用于數據庫中的隨機抽樣系統。
【具體實施方式】
[0032]現在結合圖1和圖2描述本公開的隨機抽樣方法的一個實施例。在眾多分布式存儲系統中,HBase是適用于大數據存取的應用場景的一個示例。HBase是一個分布式的鍵值存取數據庫,其不支持sql條件查詢,但能通過主鍵查詢,或者按主鍵的范圍查詢。
[0033]圖1是示出了根據本公開的實施例的HBase的一個示例。如圖1所示,主鍵為身份證號,主鍵和數據庫中的主鍵意義一樣。列簇是可以看做是一個管理單元,把相關性比較緊密的幾列放在一起,以方便存取。在本實施例中,僅存在一個列簇。本公開可以包括更多個列簇的實施例。列簇下方的列類似于數據庫中的字段,只是HBase可以動態添加一列。每一行數據代表了一個樣本數據。在本實施例中,數據庫的表中存在有I億條數據。
[0034]圖2是示出了根據本公開的實施例的一種數據庫中的隨機抽樣方法。在步驟S201中,將多個記錄分為多個組。然后,在步驟S202,隨機抽取多個組中的一個或多個組。在所隨機抽取的一個或多個組中,隨機抽取要抽取數量的記錄(步驟S203)。
[0035]以下描述根據本公開的一種數據庫中的隨機抽樣方法的另一實施例。本實施例的背景是常見的一種調查,該調查需要從I億人中隨機抽出1000人以參與此調查。在本實施例中,假定I億人的姓名和/或聯系方式等信息都已經按照如圖1所示的數據項形式(包括主鍵和列簇)保存在分布式存儲系統(例如HBase)中。
[0036]圖3是示出了根據本公開的實施例的數據庫中的隨機抽樣方法中的分組步驟。首先,將所有數據項分為數量相等的多個組,每一個組都包含100萬條記錄,如步驟S301所示。然后,為多個組中的每一個組中的特定記錄創建索引。在本實施例中,為該樣本庫中的數據每100萬記錄中的第一個記錄創建索引(步驟S302),并將該索引存放在數據庫中(步驟S303)。即掃描到第100萬個記錄的時候,取出主鍵,并記錄下主鍵與第100萬個記錄之間的映射關系。然后接著掃描到第200萬個記錄(步驟305),并取出主鍵然后記錄該主鍵和第200萬個記錄之間的映射。依次類推,直到對所有I億條數據中的每100萬條記錄的主鍵進行掃描為止(步驟304)。上述創建索引的周期是根據任務執行的周期確定的,即創建索引的步驟可以根據數據的變更情況來確定。例如,如果每一個月對數據進行一次更新,則可以每一個月執行一次創建索引的任務。
[0037]圖4是示出了根據本公開的實施例的數據庫中的隨機抽樣方法中的隨機抽樣步驟。本實施例中的數據庫中存在100個組,每個組包括100萬條記錄。首先,隨機抽取多個組中的一個組。具體地,在步驟S401中,隨機抽取多個組中的一個組。隨機抽取這100個組中的一個(既獲取得到主鍵的開始和結束范圍,如隨機到第6個組,則主鍵范圍就是第五個100萬個記錄的主鍵到第六個100萬個記錄的主鍵)。由于是隨機到某個百萬區間,所以對每個樣本來說,被選到的概率是一樣的。然后,在所隨機抽取的一個組中,隨機抽取要抽取數量的記錄。具體抽取方法可以是:在步驟S402中,產生第一隨機數。然后,對所隨機抽取的一個組中的數據進行逐一掃描(步驟S403)。接著,在步驟S404中,對于每一個所掃描的數據,產生第二隨機數。判斷如果第一隨機數等于第二隨機數(步驟S405中是),則抽取記錄(步驟S406)。在以上步驟中,產生第一隨機數是隨機產生小于等于多個記錄的數量除以要抽取的記錄的數量的第一隨機數;產生第二隨機數是隨機產生小于等于多個記錄的數量除以要抽取的記錄的數量的第二隨機數。具體地,在本實施例中,根據我們需要抽樣