本公開涉及數(shù)據(jù)處理
技術(shù)領(lǐng)域:
:,具體而言,涉及一種數(shù)據(jù)搬運方法、一種數(shù)據(jù)搬運裝置以及一種電子設(shè)備。
背景技術(shù):
::隨著通信技術(shù)的發(fā)展,大數(shù)據(jù)的存儲、抽取、搬運、計算、分析以及決策越來越受到關(guān)注。隨著對大數(shù)據(jù)處理分析的迫切需求,以及數(shù)據(jù)存儲空間與數(shù)據(jù)訪問時間之間的矛盾激化,大多數(shù)用戶通過分布式存儲系統(tǒng)hbase來對數(shù)據(jù)進行存儲,以滿足對數(shù)據(jù)高效的插入和讀取操作?,F(xiàn)有技術(shù)中,一般采用開源數(shù)據(jù)倉庫框架hadoop+hive進行底層數(shù)據(jù)分析及數(shù)據(jù)存儲,其中分布式系統(tǒng)基礎(chǔ)架構(gòu)hadoop為底層數(shù)據(jù)的存儲介質(zhì),基于hadoop數(shù)據(jù)倉庫工具hive為類sql(structuredquerylanguage,結(jié)構(gòu)化查詢語言)查詢引擎,兩者的結(jié)合使得數(shù)據(jù)的查詢方式更加簡便。這種方式會存在以下問題:一、在海量數(shù)據(jù)的情況下,映射和化簡map-reduce的查詢形式已經(jīng)無法滿足對大數(shù)據(jù)進行即席查詢的效率;二、行鍵rowkey是多字段拼裝的字符串類型,因此除冗余字段之外的行鍵中的其他字段都不能參與計算;同時由于行鍵中每個字段長短的設(shè)計都依賴于hbase底層存儲的字典序來進行后續(xù)的查詢,因此對于較多的字段所拼裝的行鍵,空數(shù)據(jù)量大,對傳輸過程中的輸入/輸出產(chǎn)生較大的影響,從而影響數(shù)據(jù)的搬運效率。需要說明的是,在上述
背景技術(shù):
:部分公開的信息僅用于加強對本公開的背景的理解,因此可以包括不構(gòu)成對本領(lǐng)域普通技術(shù)人員已知的現(xiàn)有技術(shù)的信息。技術(shù)實現(xiàn)要素:本公開的目的在于提供一種數(shù)據(jù)搬運方法、一種數(shù)據(jù)搬運裝置以及一種電子設(shè)備,進而至少在一定程度上克服由于相關(guān)技術(shù)的限制和缺陷而導致的一個或者多個問題。根據(jù)本公開的第一方面,提供一種數(shù)據(jù)搬運方法,所述方法包括:讀取數(shù)據(jù)源中的數(shù)據(jù)并將所述數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù);將從所述數(shù)據(jù)源讀取的所述等寬數(shù)據(jù)存儲在一中間隊列;將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器。在本公開的一種示例性實施例中,將數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù)包括:在對數(shù)據(jù)進行壓縮拼裝時,自定義配置所述數(shù)據(jù)源中行鍵對應(yīng)的每個字段和每個列的類型。在本公開的一種示例性實施例中,讀取數(shù)據(jù)源中的數(shù)據(jù)包括:循環(huán)讀取所述數(shù)據(jù)源中的數(shù)據(jù)到所述數(shù)據(jù)源的緩沖區(qū),并對讀取的數(shù)據(jù)進行映射操作以及自定義預處理;在對讀取的數(shù)據(jù)進行映射操作以及自定義預處理之后,判斷所述數(shù)據(jù)源是否已滿;在判斷所述數(shù)據(jù)源已滿時,將數(shù)據(jù)推送到所述中間隊列并循環(huán)讀取所述數(shù)據(jù)源中的數(shù)據(jù)。在本公開的一種示例性實施例中,將所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器包括:將所述數(shù)據(jù)源中行鍵相同的數(shù)據(jù)按照一致性哈希算法分發(fā)到相同的線程,并通過多線程的形式將數(shù)據(jù)寫入所述目標存儲器;在將數(shù)據(jù)寫入所述目標存儲器時,判斷所述目標存儲器中是否存在空數(shù)據(jù);在判斷所述目標存儲器中未存在所述空數(shù)據(jù)時,判斷寫入數(shù)據(jù)的行鍵是否相同;在判斷寫入數(shù)據(jù)的行鍵相同時,將行鍵相同的數(shù)據(jù)進行拼裝并將數(shù)據(jù)推送到所述目標存儲器中。在本公開的一種示例性實施例中,所述方法還包括:通過所述中間隊列控制所述等寬數(shù)據(jù)的讀取速度大于寫入速度。在本公開的一種示例性實施例中,將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器之后,所述方法還包括:按照預設(shè)數(shù)據(jù)配置通過單條命中操作在所述目標存儲器中查詢所述等寬數(shù)據(jù);將查詢的所述等寬數(shù)據(jù)解析為多條數(shù)據(jù),并對解析的所述多條數(shù)據(jù)進行處理。在本公開的一種示例性實施例中,在讀取數(shù)據(jù)源中的數(shù)據(jù)之前,所述方法還包括:指定所述數(shù)據(jù)源和所述目標存儲器的之間的映射關(guān)系以及所述數(shù)據(jù)源和所述目標存儲器中數(shù)據(jù)的類型。根據(jù)本公開的第二方面,提供一種數(shù)據(jù)搬運裝置,所述裝置包括:數(shù)據(jù)讀取模塊,用于讀取數(shù)據(jù)源中的數(shù)據(jù)并將所述數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù);數(shù)據(jù)存儲模塊,用于將從所述數(shù)據(jù)源讀取的所述等寬數(shù)據(jù)存儲在一中間隊列;數(shù)據(jù)寫入模塊,用于將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器。在本公開的一種示例性實施例中,將數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù)包括:數(shù)據(jù)配置模塊,用于在對數(shù)據(jù)進行壓縮拼裝時,自定義配置所述數(shù)據(jù)源中行鍵對應(yīng)的每個字段和每個列的類型。在本公開的一種示例性實施例中,讀取數(shù)據(jù)源中的數(shù)據(jù)包括:數(shù)據(jù)處理模塊,用于循環(huán)讀取所述數(shù)據(jù)源中的數(shù)據(jù)到所述數(shù)據(jù)源的緩沖區(qū),并對讀取的數(shù)據(jù)進行映射操作以及自定義預處理;已滿判斷模塊,用于在對讀取的數(shù)據(jù)進行映射操作以及自定義預處理之后,判斷所述數(shù)據(jù)源是否已滿;數(shù)據(jù)推送模塊,用于在判斷所述數(shù)據(jù)源已滿時,將數(shù)據(jù)推送到所述中間隊列并循環(huán)讀取所述數(shù)據(jù)源中的數(shù)據(jù)。在本公開的一種示例性實施例中,將所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器中包括:數(shù)據(jù)分發(fā)模塊,用于將所述數(shù)據(jù)源中行鍵相同的數(shù)據(jù)按照一致性哈希算法分發(fā)到相同的線程,并通過多線程的形式將數(shù)據(jù)寫入所述目標存儲器;空數(shù)據(jù)判斷模塊,用于在將數(shù)據(jù)寫入所述目標存儲器時,判斷所述目標存儲器中是否存在空數(shù)據(jù);行鍵判斷模塊,用于在判斷所述目標存儲器中未存在所述空數(shù)據(jù)時,判斷寫入數(shù)據(jù)的行鍵是否相同;數(shù)據(jù)拼裝模塊,用于在判斷寫入數(shù)據(jù)的行鍵相同時,將行鍵相同的數(shù)據(jù)進行拼裝并將數(shù)據(jù)推送到所述目標存儲器中。在本公開的一種示例性實施例中,所述裝置還包括:速度控制模塊,用于通過所述中間隊列控制所述等寬數(shù)據(jù)的讀取速度大于寫入速度。在本公開的一種示例性實施例中,將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器之后,所述裝置還包括:數(shù)據(jù)查詢模塊,用于按照預設(shè)數(shù)據(jù)配置通過單條命中操作在所述目標存儲器中查詢所述等寬數(shù)據(jù);數(shù)據(jù)解析模塊,用于將查詢的所述等寬數(shù)據(jù)解析為多條數(shù)據(jù),并對解析的多條數(shù)據(jù)進行處理。在本公開的一種示例性實施例中,在讀取數(shù)據(jù)源中的數(shù)據(jù)之前,所述裝置還包括:數(shù)據(jù)指定模塊,用于指定所述數(shù)據(jù)源和所述目標存儲器的之間的映射關(guān)系以及所述數(shù)據(jù)源和所述目標存儲器中數(shù)據(jù)的類型。根據(jù)本公開的第三方面,提供一種電子設(shè)備,包括:處理器;以及存儲器,用于存儲所述處理器的可執(zhí)行指令;其中,所述處理器配置為經(jīng)由執(zhí)行所述可執(zhí)行指令來執(zhí)行上述任意一項所述的數(shù)據(jù)搬運方法。本公開提供的一種數(shù)據(jù)搬運方法、數(shù)據(jù)搬運裝置以及電子設(shè)備中,通過讀取數(shù)據(jù)源中的數(shù)據(jù)并將數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù);將從所述數(shù)據(jù)源讀取的所述等寬數(shù)據(jù)存儲在一中間隊列;將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器中。一方面,通過將多條數(shù)據(jù)壓縮合并成一條等寬數(shù)據(jù),大量減少了數(shù)據(jù)量的傳遞,簡化了數(shù)據(jù)搬運的操作方式及操作量,提高了數(shù)據(jù)的搬運效率;另一方面,在數(shù)據(jù)搬運過程中,通過將多條數(shù)據(jù)壓縮合并成一條等寬數(shù)據(jù),保障了數(shù)據(jù)的完整性以及在搬運前和搬運后數(shù)據(jù)的一致性。應(yīng)當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不能限制本公開。附圖說明此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本公開的實施例,并與說明書一起用于解釋本公開的原理。顯而易見地,下面描述中的附圖僅僅是本公開的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1示意性示出一種數(shù)據(jù)搬運方法的流程示意圖。圖2示意性示出本公開一種等寬數(shù)據(jù)模型示意圖。圖3示意性示出本公開一種等寬數(shù)據(jù)拼裝示意圖。圖4示意性示出本公開一種數(shù)據(jù)搬運流程示意圖。圖5示意性示出一種數(shù)據(jù)搬運裝置的方框圖。圖6示意性示出本公開示例性實施例中的電子設(shè)備的模塊圖。具體實施方式現(xiàn)在將參考附圖更全面地描述示例實施例。然而,示例實施例能夠以多種形式實施,且不應(yīng)被理解為限于在此闡述的實施例;相反,提供這些實施例使得本公開將全面和完整,并將示例實施例的構(gòu)思全面地傳達給本領(lǐng)域的技術(shù)人員。在圖中相同的附圖標記表示相同或類似的部分,因而將省略對它們的重復描述。此外,所描述的特征、結(jié)構(gòu)或特性可以以任何合適的方式結(jié)合在一個或更多實施例中。在下面的描述中,提供許多具體細節(jié)從而給出對本公開的實施例的充分理解。然而,本領(lǐng)域技術(shù)人員將意識到,可以實踐本公開的技術(shù)方案而沒有所述特定細節(jié)中的一個或更多,或者可以采用其他的方法、組元、材料、裝置、步驟等。在其他情況下,不詳細示出或描述公知結(jié)構(gòu)、方法、裝置、實現(xiàn)、材料或者操作以避免模糊本公開的各方面。附圖中所示的方框圖僅僅是功能實體,不一定必須與物理上獨立的實體相對應(yīng)。即,可以采用軟件形式來實現(xiàn)這些功能實體,或在一個或多個軟件硬化的模塊中實現(xiàn)這些功能實體或功能實體的一部分,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實現(xiàn)這些功能實體。本示例實施方式中首先提供了一種數(shù)據(jù)搬運方法,可以應(yīng)用于無線終端soc芯片中的數(shù)據(jù)搬運、各大電商平臺、各大網(wǎng)站對海量數(shù)據(jù)的分析。參考圖1所示,所述數(shù)據(jù)搬運方法可以包括以下步驟:步驟s110:讀取數(shù)據(jù)源中的數(shù)據(jù)并將所述數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù);步驟s120:將從所述數(shù)據(jù)源讀取的所述等寬數(shù)據(jù)存儲在一中間隊列;步驟s130:將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器。本公開提供的一種數(shù)據(jù)搬運方法中,通過讀取數(shù)據(jù)源中的數(shù)據(jù)并將數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù);將從所述數(shù)據(jù)源讀取的所述等寬數(shù)據(jù)存儲在一中間隊列;將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器。一方面,通過將多條數(shù)據(jù)壓縮拼裝成一條等寬數(shù)據(jù),大量減少了數(shù)據(jù)量的傳遞,提高了數(shù)據(jù)的搬運效率;另一方面,數(shù)據(jù)在傳輸過程中,保障數(shù)據(jù)不丟失以及數(shù)據(jù)信息在搬運前和搬運后的一致性。下面,將參考圖2至圖4所示對本示例實施例中的數(shù)據(jù)搬運方法作進一步說明。在步驟s110中,讀取數(shù)據(jù)源中的數(shù)據(jù)并將所述數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù)。本示例實施方式中,數(shù)據(jù)源可以為提供所需要的數(shù)據(jù)的器件,也可以為原始媒體或者其他形式的數(shù)據(jù)源。可以在數(shù)據(jù)源中存儲所有建立數(shù)據(jù)庫連接的信息,通過提供正確的數(shù)據(jù)源名稱,就可以找到相應(yīng)的數(shù)據(jù)庫連接。例如,數(shù)據(jù)源中的數(shù)據(jù)可以是任意形式、任意大小的數(shù)據(jù),例如圖形數(shù)據(jù)、遙感數(shù)據(jù)、統(tǒng)計調(diào)查數(shù)據(jù)等。數(shù)據(jù)可以通過表格的形式顯示,也可以通過其他方式顯示。例如,在用表格顯示數(shù)據(jù)時,可以用概念模型表示,其中:表格可以是行的集合,每行可以包含一個行關(guān)鍵字、一個可選的時間戳以及一些有數(shù)據(jù)的列。在概念模型上,表格是一個比較稀疏的行、列矩陣,但是在物理模型上,所有數(shù)據(jù)都是按照列存儲的。本示例實施方式中,多條數(shù)據(jù)可以用n條數(shù)據(jù)來具體表示,可以對數(shù)據(jù)源中行鍵相同的n條數(shù)據(jù)進行壓縮并拼裝成一條數(shù)據(jù),其中,數(shù)據(jù)的行鍵即每行數(shù)據(jù)的行關(guān)鍵字,n可以為任意自然數(shù),行鍵可以是任意的字節(jié)數(shù)組。數(shù)據(jù)壓縮可以按照預設(shè)的算法對數(shù)據(jù)重新進行編碼組織,以此減少數(shù)據(jù)的冗余和存儲的空間,從而提高數(shù)據(jù)存儲、傳輸以及數(shù)據(jù)處理的效率。數(shù)據(jù)壓縮可以分為即時壓縮和非即時壓縮、數(shù)據(jù)壓縮和文件壓縮、無損壓縮和有損壓縮等。圖2所示為等寬n數(shù)據(jù)的模型示意圖,一條等寬數(shù)據(jù)可以由一個行關(guān)鍵字以及多個列組成,其中,行鍵對應(yīng)的每個行都是由不同數(shù)據(jù)類型的定長字節(jié)組成,數(shù)據(jù)類型是通過數(shù)據(jù)配置指定,列則可以由一個寬度標識以及n個數(shù)值組成,n即代表寬度標識。n為數(shù)據(jù)列的個數(shù)即數(shù)據(jù)的列數(shù)n,m為數(shù)據(jù)的條數(shù)即數(shù)據(jù)的行數(shù)m,其中,n、m都可以是任意不為0的自然數(shù),n可以大于、等于或者小于m。參考圖3所示,如果n條數(shù)據(jù)data1與datan中的行鍵值完全相同,則認定該數(shù)據(jù)滿足等寬拼裝的條件,data1與datan會合并成一條等寬n數(shù)據(jù)hbasedatan,其中每一列都是與數(shù)據(jù)data對應(yīng)的列字段。此外,本示例實施方式中,在讀取數(shù)據(jù)源中的數(shù)據(jù)之前,所述方法還包括:指定所述數(shù)據(jù)源的映射的表、字段以及所述目標存儲器的映射的表、行鍵、字段對數(shù)據(jù)源中字段的映射。本示例實施方式中,可以根據(jù)數(shù)據(jù)源和目標存儲器兩個數(shù)據(jù)模型,在這兩個模型之間建立起數(shù)據(jù)元素的對應(yīng)關(guān)系從而形成數(shù)據(jù)映射??梢酝ㄟ^手工編碼或者可視化操作的方式形成數(shù)據(jù)映射。在讀取數(shù)據(jù)源的數(shù)據(jù)之前,可以首先進行對數(shù)據(jù)進行自定義配置。數(shù)據(jù)配置可以分為數(shù)據(jù)映射的配置和數(shù)據(jù)類型的配置。其中,數(shù)據(jù)映射的配置主要可以服務(wù)于數(shù)據(jù)讀取,該項配置可以實現(xiàn)如下幾項功能,例如:指定數(shù)據(jù)源的映射的表、字段;對字段進行自定義預處理,即對讀取的字段進行例如替換replace、轉(zhuǎn)變convert等自定義數(shù)據(jù)處理;指定目標存儲器中的表以及目標行和目標字段對數(shù)據(jù)源中的字段的映射。而數(shù)據(jù)類型的配置主要可以應(yīng)用于數(shù)據(jù)讀取、數(shù)據(jù)拼裝以及數(shù)據(jù)查詢,該項配置可以實現(xiàn)如下幾項功能,例如:指定數(shù)據(jù)源及目標存儲器的行關(guān)鍵字以及各個字段的數(shù)據(jù)類型;為數(shù)據(jù)查詢提供數(shù)據(jù)類型配置,從而為數(shù)據(jù)的拆分、查詢、過濾以及計算等操作建立基礎(chǔ)。數(shù)據(jù)配置可以只實現(xiàn)其中一種定義功能,也可以同時實現(xiàn)其中多個或者是全部定義功能。此外,本示例實施方式中,將數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù)包括:在對數(shù)據(jù)進行壓縮拼裝時,自定義配置所述數(shù)據(jù)源中行鍵對應(yīng)的每個字段和每個列的類型。本示例實施方式中,數(shù)據(jù)表中的一列為一個字段,表中每列的名稱為字段名,字段類型也是數(shù)據(jù)類型。本示例實施方式中,可以根據(jù)實際需要自定義每個字段的類型,例如,int、char、varchar、bit等,列的類型可以是數(shù)值、字符串、日期/時間、枚舉等類別,本示例實施方式中對此不作特殊限定。此外,本示例實施方式中,讀取數(shù)據(jù)源中的數(shù)據(jù)包括:循環(huán)讀取所述數(shù)據(jù)源中的數(shù)據(jù)到所述數(shù)據(jù)源的緩沖區(qū),并對讀取的數(shù)據(jù)進行映射操作以及自定義預處理;在對讀取的數(shù)據(jù)進行映射操作以及自定義預處理之后,判斷所述數(shù)據(jù)源是否已滿;在判斷所述數(shù)據(jù)源已滿時,將數(shù)據(jù)推送到所述中間隊列并循環(huán)讀取所述數(shù)據(jù)源中的數(shù)據(jù)。本示例實施方式中,循環(huán)讀取的數(shù)據(jù)可以為所述數(shù)據(jù)源中的底層數(shù)據(jù),可以基于底層數(shù)據(jù)分析數(shù)據(jù)的存儲以及計算等問題,進而進行數(shù)據(jù)的挖掘。所述緩沖區(qū)可以是前端用來存儲、處理數(shù)據(jù)的對象。例如,在每一個數(shù)據(jù)窗口對象中,可以有4個二維表作為數(shù)據(jù)緩沖區(qū),用來存儲查詢到的數(shù)據(jù)。緩沖區(qū)可以為完全緩沖,在緩沖區(qū)滿時會被清空緩沖區(qū)的內(nèi)容會被發(fā)往目標存儲中;也可以為行緩沖,遇到一個換行符時,緩沖區(qū)的內(nèi)容就被清空,例如,鍵盤輸入。本示例實施方式中,可以利用函數(shù)對數(shù)據(jù)源中的數(shù)據(jù)進行循環(huán)讀取,并將讀取的底層數(shù)據(jù)存儲到數(shù)據(jù)源的緩沖區(qū)。通過將數(shù)據(jù)存入緩沖區(qū),減少了數(shù)據(jù)傳輸?shù)臅r間,提高了數(shù)據(jù)讀取的效率;在發(fā)現(xiàn)輸入有錯時,可以通過鍵盤或者是其它方式進行修改,提高了數(shù)據(jù)傳輸?shù)臏蚀_率??梢詫ρh(huán)讀取的數(shù)據(jù)進行map操作以及自定義預處理。例如,可以對讀取的數(shù)據(jù)進行添加、刪除、過濾、獲取、判斷等映射操作或其他自定義預處理操作。數(shù)據(jù)源中可以存在數(shù)據(jù)隊列,該數(shù)據(jù)隊列可以用于將數(shù)據(jù)按照順序進行處理,可以按照先進先出的規(guī)則用一組地址連續(xù)的存儲單元依次存放隊列中的各數(shù)據(jù)??梢酝ㄟ^函數(shù)對隊列進行例如初始化隊列initqueue、進隊列enqueue、出隊列dequeue等操作。隊列可以為順序隊列,也可以為循環(huán)隊列??梢酝ㄟ^函數(shù)isqueuefull判斷隊列是否已滿,并在判斷隊列已滿時,控制數(shù)據(jù)進入中間隊列。在此過程中,可以通過函數(shù)循環(huán)讀取數(shù)據(jù)源中的數(shù)據(jù)。在步驟s120中,將從所述數(shù)據(jù)源讀取的所述等寬數(shù)據(jù)存儲在一中間隊列。本示例實施方式中,可以通過get函數(shù)批量獲取數(shù)據(jù),例如同時獲取一行數(shù)據(jù),也可以通過get命令和其他函數(shù)的組合獲取指定的一列數(shù)據(jù)或者是指定的一個列族中所有列的數(shù)據(jù),也可以通過多線程方式讀取數(shù)據(jù),或者也可以通過其他方式讀取。在讀取所述等寬數(shù)據(jù)且對數(shù)據(jù)進行自定義預處理之后,將數(shù)據(jù)存儲在中間隊列中,實現(xiàn)數(shù)據(jù)讀寫的異步操作。中間隊列可以按照先進先出的原則實現(xiàn)數(shù)據(jù)的讀取和寫入。即一個線程將數(shù)據(jù)源中的數(shù)據(jù)推送到中間隊列,另一個線程從中間隊列中取出數(shù)據(jù)進行處理。通過中間隊列保證數(shù)據(jù)的讀取接口和寫入接口之間不存在并發(fā)沖突,兩個線程不需要進行任何同步動作,從而提高數(shù)據(jù)的搬運效率。此外,本示例實施方式中,所述方法還包括:通過所述中間隊列控制所述等寬數(shù)據(jù)的讀取速度大于寫入速度。本示例實施方式中,系統(tǒng)在運行時,讀寫操作的速度可以是根據(jù)不同運行狀態(tài)定義。為了避免發(fā)生因內(nèi)存不足而導致的數(shù)據(jù)溢出等宕機錯誤,要保證數(shù)據(jù)的讀取速度遠大于數(shù)據(jù)的寫入速度。本示例性實施例中,可以通過所述中間隊列控制數(shù)據(jù)的讀取速度遠大于數(shù)據(jù)的寫入速度。中間隊列可以與數(shù)據(jù)源中的數(shù)據(jù)隊列的性質(zhì)保持一致。中間隊列可以提供路由并保證消息或者數(shù)據(jù)的有效傳遞,例如,在發(fā)送者發(fā)送完消息后如果接收者為不能使用狀態(tài),中間隊列則會保留消息,直到該條數(shù)據(jù)成功傳遞。通過中間隊列還保證了數(shù)據(jù)傳輸?shù)挠行院驼_性。讀取速度是指將存儲設(shè)備中的數(shù)據(jù)提取出來的操作速度,可以理解為復制數(shù)據(jù)源中數(shù)據(jù)的速度;寫入速度是指將外部數(shù)據(jù)記錄到存儲設(shè)備中操作速度,可以理解為將數(shù)據(jù)粘貼到目標存儲器中的速度,例如,文件下載、數(shù)據(jù)粘貼等。在步驟s130中,將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器。本示例實施方式中,可以在接收到寫入命令時,響應(yīng)所述寫入命令并將從數(shù)據(jù)源中讀取的,存儲在中間隊列的數(shù)據(jù)按照預設(shè)要求寫入目標存儲器中??梢灾苯邮褂胔table進行導入、或者從hdfs(hadoopdistributedfilesystem,hadoop分布式文件系統(tǒng))文件中導入hbase、或者讀取hbase表寫入hbase表中字段、或者可以通過其他方式寫入。目標存儲器可以為反映靜態(tài)數(shù)據(jù)的計算機內(nèi)部或外部的存儲介質(zhì),例如磁盤、磁帶等。目標存儲器的存儲方式可以為直接附加存儲方式、服務(wù)器連接存儲方式或者基于光纖通道的存儲方式。本示例性實施例中,通過等寬數(shù)據(jù)形式進行數(shù)據(jù)傳遞、搬運,大量減少了數(shù)據(jù)量的傳遞,提高了數(shù)據(jù)搬運的效率。此外,本示例實施方式中,將所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器包括:將所述數(shù)據(jù)源中行鍵相同的數(shù)據(jù)按照一致性哈希算法分發(fā)到相同的線程,并通過多線程的形式將數(shù)據(jù)寫入所述目標存儲器;在將數(shù)據(jù)寫入所述目標存儲器時,判斷所述目標存儲器中是否存在空數(shù)據(jù);在判斷所述目標存儲器中未存在所述空數(shù)據(jù)時,判斷寫入數(shù)據(jù)的行鍵是否相同;在判斷寫入數(shù)據(jù)的行鍵相同時,將行鍵相同的數(shù)據(jù)進行拼裝并將數(shù)據(jù)推送到所述目標存儲器中。本示例實施方式中,可以將數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)采用一致性哈希算法分發(fā)到相同的線程,以保證原本已分配的內(nèi)容可以被映射到新的緩沖中。也就是說,可以根據(jù)一致性哈希算法,要求每個節(jié)點存儲其上行節(jié)點和下行節(jié)點的位置信息,在節(jié)點需要查找內(nèi)容時,可以根據(jù)內(nèi)容的鍵值決定向上行還是下行節(jié)點發(fā)起查詢請求。如果自身擁有被請求的目標,可以直接向發(fā)起查詢請求的節(jié)點返回確認,如果不屬于自身的范圍,可以轉(zhuǎn)發(fā)請求到自己的上行/下行節(jié)點。本實例中將數(shù)據(jù)源的數(shù)據(jù)進行分發(fā)可以為將數(shù)據(jù)源中的數(shù)據(jù)存儲在中間隊列中,再從中間隊列中分發(fā)出去用于保存或者是其他操作,實現(xiàn)數(shù)據(jù)的分發(fā)與共享,保障共享的數(shù)據(jù)與數(shù)據(jù)源中主數(shù)據(jù)的一致性。所述線程可以由線程id,當前指令指針,寄存器集合以及堆棧組成。線程可與同屬一個進程的其他線程共享進程的所有資源,一個線程可以創(chuàng)建和撤銷另一個線程,同一個進程之間的多個線程可以并發(fā)執(zhí)行,即多線程。每一個程序都至少有一個線程,且線程可以有就緒、阻塞和運行三種狀態(tài)。線程可以應(yīng)用于文件管理或者通信控制、前后臺處理以及異步處理中。多線程是指多個線程并發(fā)執(zhí)行,通過多線程的形式執(zhí)行數(shù)據(jù)寫入,可以提升數(shù)據(jù)處理性能。本示例實施方式中,目標存儲器中也可以存在數(shù)據(jù)隊列,該數(shù)據(jù)隊列可以與上述數(shù)據(jù)源的數(shù)據(jù)隊列的性質(zhì)保持一致。即可以通過數(shù)據(jù)隊列判斷目標存儲器中是否存在空數(shù)據(jù)。在執(zhí)行數(shù)據(jù)寫入時,可以通過java語言對hbase數(shù)據(jù)庫進行操作。數(shù)據(jù)寫入過程中,可以通過if/else循環(huán)手動判斷、或者通過其他方式判斷寫入目標存儲器的數(shù)據(jù)隊列中的數(shù)據(jù)是否為空數(shù)據(jù),或者說判斷目標存儲器的數(shù)據(jù)隊列中是否存在空數(shù)據(jù)。在判斷寫入的數(shù)據(jù)為空數(shù)據(jù)時,可以直接不處理該數(shù)據(jù);在判斷寫入的數(shù)據(jù)為非空數(shù)據(jù)時,可以對寫入的數(shù)據(jù)進一步處理??梢栽试S目標存儲器中中連續(xù)一行或一列為空數(shù)據(jù)。在判斷目標存儲器的數(shù)據(jù)隊列中不存在空數(shù)據(jù)時,可以通過循環(huán)函數(shù)獲取每一個寫入的數(shù)據(jù)的行鍵,通過對比判斷所有寫入的數(shù)據(jù)的行鍵是否相同,并且將判斷的行鍵相同的多條數(shù)據(jù)按照上述的數(shù)據(jù)拼裝規(guī)則拼裝成一條等寬數(shù)據(jù),最后將拼裝的等寬數(shù)據(jù)推送到目標存儲器中進行存儲完成整個數(shù)據(jù)的寫入過程。在此過程中,可以通過數(shù)據(jù)讀取和中間隊列的運行狀態(tài)確定是否終止數(shù)據(jù)寫入過程。此外,本示例實施方式中,將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器之后,所述方法還包括:按照預設(shè)數(shù)據(jù)配置通過單條命中操作在所述目標存儲器中查詢所述等寬數(shù)據(jù);將查詢的所述等寬數(shù)據(jù)解析為多條數(shù)據(jù),并對解析的所述多條數(shù)據(jù)進行處理。本示例實施方式中,在完成數(shù)據(jù)寫入之后,還可以對存儲在目標存儲器中的數(shù)據(jù)進行查詢。hbase可以根據(jù)行鍵進行檢索,具體地,系統(tǒng)可以通過找到某個行鍵或者是某個行鍵范圍所在的區(qū)域,將查詢數(shù)據(jù)的請求提交到該區(qū)域獲取數(shù)據(jù)??梢愿鶕?jù)行鍵查詢hbase中從某個時刻起的最新數(shù)據(jù),也可以查詢指定的一列或者一行數(shù)據(jù),或者一次查詢所有的數(shù)據(jù)。在數(shù)據(jù)查詢過程中,可以對單個行鍵進行g(shù)et操作,查詢唯一的一條記錄;也可以通過某個行鍵所在的范圍進行掃描,可以設(shè)置起始行鍵startrowkey和結(jié)束行鍵endrowkey,并在對應(yīng)范圍內(nèi)進行掃描,從而按照指定條件得到一行、一列或者一批數(shù)據(jù);還可以通過全表掃描方式得到整張表中所有的數(shù)據(jù)。在查詢過程中,查詢某一條等寬數(shù)據(jù)就相當于查詢行鍵相同的n條數(shù)據(jù)。通過單條命中的形式進行數(shù)據(jù)查詢,提升了數(shù)據(jù)索引的效率。在查詢到等寬數(shù)據(jù)之后,可以根據(jù)數(shù)據(jù)配置對查詢的等寬數(shù)據(jù)進行解析,數(shù)據(jù)解析可以認為是數(shù)據(jù)拼裝的逆過程,即將一條等寬n數(shù)據(jù)拆分成n條行鍵相同的數(shù)據(jù)。在將數(shù)據(jù)拆分之后,還可以對解析的數(shù)據(jù)進行相應(yīng)的自定義處理,例如過濾,計算,聚合或者其他操作等。本示例實施方式中還提供了一種數(shù)據(jù)搬運裝置,所述裝置200可以包括:數(shù)據(jù)讀取模塊201,可以用于讀取數(shù)據(jù)源中的數(shù)據(jù)并將所述數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù);數(shù)據(jù)存儲模塊202,可以用于將從所述數(shù)據(jù)源讀取的所述等寬數(shù)據(jù)存儲在一中間隊列;數(shù)據(jù)寫入模塊203,可以用于將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到目標存儲器中。此外,本示例實施方式中,將數(shù)據(jù)源中行鍵相同的多條數(shù)據(jù)壓縮拼裝為一條等寬數(shù)據(jù)包括:數(shù)據(jù)配置模塊,可以用于在對數(shù)據(jù)進行壓縮拼裝時,自定義配置所述數(shù)據(jù)源中行鍵對應(yīng)的每個字段和每個列的類型。此外,本示例實施方式中,讀取數(shù)據(jù)源中的數(shù)據(jù)包括:數(shù)據(jù)處理模塊,可以用于循環(huán)讀取所述數(shù)據(jù)源中的數(shù)據(jù)到所述數(shù)據(jù)源的緩沖區(qū),并對讀取的數(shù)據(jù)進行映射操作以及自定義預處理;已滿判斷模塊,可以用于在對讀取的數(shù)據(jù)進行映射操作以及自定義預處理之后,判斷所述數(shù)據(jù)源是否已滿;數(shù)據(jù)推送模塊,可以用于在判斷所述數(shù)據(jù)源已滿時,將數(shù)據(jù)推送到所述中間隊列并循環(huán)讀取所述數(shù)據(jù)源中的數(shù)據(jù)。此外,本示例實施方式中,將所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器包括:數(shù)據(jù)分發(fā)模塊,可以用于將所述數(shù)據(jù)源中行鍵相同的數(shù)據(jù)按照一致性哈希算法分發(fā)到相同的線程,并通過多線程的形式將數(shù)據(jù)寫入所述目標存儲器;空數(shù)據(jù)判斷模塊,可以用于在將數(shù)據(jù)寫入所述目標存儲器時,判斷所述目標存儲器中是否存在空數(shù)據(jù);行鍵判斷模塊,可以用于在判斷所述目標存儲器中未存在所述空數(shù)據(jù)時,判斷寫入數(shù)據(jù)的行鍵是否相同;數(shù)據(jù)拼裝模塊,可以用于在判斷寫入數(shù)據(jù)的行鍵相同時,將行鍵相同的數(shù)據(jù)進行拼裝并將數(shù)據(jù)推送到所述目標存儲器中。此外,本示例實施方式中,所述裝置還可以包括:速度控制模塊,可以用于通過所述中間隊列控制所述等寬數(shù)據(jù)的讀取速度大于寫入速度。此外,本示例實施方式中,將存儲在所述中間隊列的所述等寬數(shù)據(jù)寫入和分發(fā)到一目標存儲器之后,所述裝置還可以包括:數(shù)據(jù)查詢模塊,可以用于按照預設(shè)數(shù)據(jù)配置通過單條命中操作在所述目標存儲器中查詢所述等寬數(shù)據(jù);數(shù)據(jù)解析模塊,可以用于將查詢的所述等寬數(shù)據(jù)解析為多條數(shù)據(jù),并對解析的多條數(shù)據(jù)進行處理。此外,本示例實施方式中,在讀取數(shù)據(jù)源中的數(shù)據(jù)之前,所述裝置還可以包括:數(shù)據(jù)指定模塊,可以用于指定所述數(shù)據(jù)源和所述目標存儲器的之間的映射關(guān)系以及所述數(shù)據(jù)源和所述目標存儲器中數(shù)據(jù)的類型。上述數(shù)據(jù)搬運裝置中各模塊的具體細節(jié)已經(jīng)在對應(yīng)的數(shù)據(jù)搬運方法中進行了詳細描述,因此此處不再贅述。本示例實施方式中還提供了一種電子設(shè)備,參考圖6所示,該電子設(shè)備10包括:處理組件11,其進一步可以包括一個或多個處理器,以及由存儲器12所代表的存儲器資源,用于存儲可由處理組件11執(zhí)行的指令,例如應(yīng)用程序。存儲器12中存儲的應(yīng)用程序可以包括一個或一個以上的每一個對應(yīng)于一組指令的模塊。此外,處理組件11被配置為執(zhí)行指令,以執(zhí)行上述方法。該電子設(shè)備10還可以包括:一個電源組件,電源組件被配置成對執(zhí)行電子設(shè)備10進行電源管理;一個有線或無線網(wǎng)絡(luò)接口13,被配置成將電子設(shè)備10連接到網(wǎng)絡(luò);以及一個輸入輸出(i/o)接口14。該電子設(shè)備10可以操作基于存儲在存儲器12的操作系統(tǒng),例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm或類似。附圖中所示的方框圖僅僅是功能實體,不一定必須與物理上獨立的實體相對應(yīng)。即,可以采用軟件形式來實現(xiàn)這些功能實體,或在一個或多個軟件硬化的模塊中實現(xiàn)這些功能實體或功能實體的一部分,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實現(xiàn)這些功能實體。應(yīng)當注意,盡管在上文詳細描述中提及了用于動作執(zhí)行的設(shè)備的若干模塊或者單元,但是這種劃分并非強制性的。實際上,根據(jù)本公開的實施方式,上文描述的兩個或更多模塊或者單元的特征和功能可以在一個模塊或者單元中具體化。反之,上文描述的一個模塊或者單元的特征和功能可以進一步劃分為由多個模塊或者單元來具體化。此外,盡管在附圖中以特定順序描述了本公開中方法的各個步驟,但是,這并非要求或者暗示必須按照該特定順序來執(zhí)行這些步驟,或是必須執(zhí)行全部所示的步驟才能實現(xiàn)期望的結(jié)果。附加的或備選的,可以省略某些步驟,將多個步驟合并為一個步驟執(zhí)行,以及/或者將一個步驟分解為多個步驟執(zhí)行等。通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員易于理解,這里描述的示例實施方式可以通過軟件實現(xiàn),也可以通過軟件結(jié)合必要的硬件的方式來實現(xiàn)。因此,根據(jù)本公開實施方式的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是cd-rom,u盤,移動硬盤等)中或網(wǎng)絡(luò)上,包括若干指令以使得一臺計算設(shè)備(可以是個人計算機、服務(wù)器、移動終端、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行根據(jù)本公開實施方式的方法。本領(lǐng)域技術(shù)人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本公開的其它實施方案。本申請旨在涵蓋本公開的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本公開的一般性原理并包括本公開未公開的本
技術(shù)領(lǐng)域:
:中的公知常識或慣用技術(shù)手段。說明書和實施例僅被視為示例性的,本公開的真正范圍和精神由所附的權(quán)利要求指出。當前第1頁12當前第1頁12