本發(fā)明的實施方式涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,更具體地,本發(fā)明的實施方式涉及數(shù)據(jù)導(dǎo)出方法、數(shù)據(jù)導(dǎo)出裝置、計算機(jī)可讀存儲介質(zhì)及電子設(shè)備。
背景技術(shù):
本部分旨在為權(quán)利要求書中陳述的本發(fā)明的實施方式提供背景或上下文。此處的描述不因為包括在本部分中就承認(rèn)是現(xiàn)有技術(shù)。
隨著信息技術(shù)的日益發(fā)展以及數(shù)據(jù)量的高速增長,涌現(xiàn)了各種用于數(shù)據(jù)處理的數(shù)據(jù)庫,其中,分布式數(shù)據(jù)庫(distributeddatabase,ddb)在大型商業(yè)系統(tǒng)中的應(yīng)用變得越來越普遍。
現(xiàn)有的數(shù)據(jù)處理技術(shù)方案中,大多使用數(shù)據(jù)庫導(dǎo)入導(dǎo)出工具sqoop從數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)。sqoop在導(dǎo)出數(shù)據(jù)時,會根據(jù)指定的數(shù)據(jù)表中的列,將數(shù)據(jù)劃分為多個不同的數(shù)據(jù)組或數(shù)據(jù)段,然后構(gòu)建多個任務(wù),從而將數(shù)據(jù)同時導(dǎo)出。
技術(shù)實現(xiàn)要素:
在現(xiàn)有方案中,sqoop在導(dǎo)出數(shù)據(jù)時,由于分布式數(shù)據(jù)庫中的數(shù)據(jù)量較大、進(jìn)行數(shù)據(jù)導(dǎo)出時是無序?qū)С龅囊约皠澐值臄?shù)據(jù)段不均衡的原因,現(xiàn)有技術(shù)會導(dǎo)致多個任務(wù)運(yùn)行時間長、效率低下、可靠性低的問題。因此在現(xiàn)有技術(shù)中,將所有數(shù)據(jù)高效導(dǎo)出這是非常令人煩惱的過程。
為此,非常需要一種改進(jìn)的數(shù)據(jù)導(dǎo)出方法,以使得能夠高效、可靠地對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行導(dǎo)出。
在本上下文中,本發(fā)明的實施方式期望提供一種數(shù)據(jù)導(dǎo)出方法、數(shù)據(jù)導(dǎo)出裝置、計算機(jī)可讀存儲介質(zhì)及電子設(shè)備。
在本發(fā)明實施方式的第一方面中,提供了一種數(shù)據(jù)導(dǎo)出方法,包括:
根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況;
根據(jù)統(tǒng)計的所述第一級別區(qū)間數(shù)據(jù)的分布情況將多個所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間;其中,每一所述第二級別區(qū)間均包括一個或連續(xù)的多個所述第一級別區(qū)間;
將各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
在本發(fā)明的一個實施例中,統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況包括:
統(tǒng)計各所述第一級別區(qū)間記錄的數(shù)據(jù)數(shù)量。
在本發(fā)明的又一個實施例中,統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況還包括:
判斷多個所述第一級別區(qū)間中是否存在未記錄數(shù)據(jù)的區(qū)間;
在判斷多個所述第一級別區(qū)間中存在所述未記錄數(shù)據(jù)的區(qū)間時,跳過所述未記錄數(shù)據(jù)的區(qū)間。
在本發(fā)明的一個實施例中,將所述多個第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間包括:
通過動態(tài)規(guī)劃算法將多個所述第一級別區(qū)間聚合為所述預(yù)設(shè)數(shù)量的第二級別區(qū)間。
在本發(fā)明的一個實施例中,通過動態(tài)規(guī)劃算法將多個所述第一級別區(qū)間聚合包括:
將所有所述第一級別區(qū)間劃分為預(yù)設(shè)數(shù)量的數(shù)據(jù)組,并統(tǒng)計各所述數(shù)據(jù)組的數(shù)據(jù)量;其中每一所述數(shù)據(jù)組均包括一個或連續(xù)的多個所述第一級別區(qū)間;
以所有所述數(shù)據(jù)組的數(shù)據(jù)量中的最大值最小為目標(biāo),將多個所述第一級別區(qū)間聚合為所述預(yù)設(shè)數(shù)量的第二級別區(qū)間。
在本發(fā)明的一個實施例中,將各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)包括:
所述執(zhí)行節(jié)點(diǎn)有多個且多個所述執(zhí)行節(jié)點(diǎn)并行導(dǎo)出數(shù)據(jù)。
在本發(fā)明的一個實施例中,該數(shù)據(jù)導(dǎo)出方法還包括:
在所述執(zhí)行節(jié)點(diǎn)導(dǎo)出數(shù)據(jù)時,統(tǒng)計所述第二級別區(qū)間的數(shù)據(jù)分布情況信息并對所述第二級別區(qū)間的數(shù)據(jù)分布情況信息進(jìn)行存儲。
在本發(fā)明實施方式的第二方面中,提供了一種數(shù)據(jù)導(dǎo)出方法,包括:
根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并獲取預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息;
根據(jù)預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息將所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間;
將當(dāng)前各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將當(dāng)前所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
在本發(fā)明的一個實施例中,在聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間時,該數(shù)據(jù)導(dǎo)出方法還包括:
統(tǒng)計當(dāng)前各所述第二級別區(qū)間記錄的數(shù)據(jù)數(shù)量。
在本發(fā)明的一個實施例中,將當(dāng)前各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)包括:
所述執(zhí)行節(jié)點(diǎn)有多個且多個所述執(zhí)行節(jié)點(diǎn)并行導(dǎo)出數(shù)據(jù)。
在本發(fā)明實施方式的第三方面中,提供了一種數(shù)據(jù)導(dǎo)出裝置,包括:
第一數(shù)據(jù)評估模塊,用于根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)粗略劃分為多個第一級別區(qū)間并統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況;
第一區(qū)間聚合模塊,用于根據(jù)統(tǒng)計的所述第一級別區(qū)間數(shù)據(jù)的分布情況將多個所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間;
第一數(shù)據(jù)導(dǎo)出模塊,用于將每個所述第二級別區(qū)間的數(shù)據(jù)分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
在本發(fā)明的一個實施例中,所述第一數(shù)據(jù)評估模塊包括:
第一統(tǒng)計模塊,用于統(tǒng)計各所述第一級別區(qū)間記錄的數(shù)據(jù)數(shù)量。
在本發(fā)明的又一個實施例中,所述第一數(shù)據(jù)評估模塊還包括:
第一判斷模塊,用于判斷多個所述第一級別區(qū)間中是否存在未記錄數(shù)據(jù)的區(qū)間;
區(qū)間篩選模塊,用于在判斷多個所述第一級別區(qū)間中存在所述未記錄數(shù)據(jù)的區(qū)間時,跳過所述未記錄數(shù)據(jù)的區(qū)間。
在本發(fā)明的一個實施例中,所述第一區(qū)間聚合模塊包括:
聚合模塊,用于通過動態(tài)規(guī)劃算法將多個所述第一級別區(qū)間聚合為所述預(yù)設(shè)數(shù)量的第二級別區(qū)間。
在本發(fā)明的一個實施例中,所述聚合模塊包括:
劃分模塊,用于將所有所述第一級別區(qū)間劃分為預(yù)設(shè)數(shù)量的數(shù)據(jù)組,并統(tǒng)計各所述數(shù)據(jù)組的數(shù)據(jù)量;其中每一所述數(shù)據(jù)組均包括一個或連續(xù)的多個所述第一級別區(qū)間;
目標(biāo)聚合模塊,用于以所有所述數(shù)據(jù)組的數(shù)據(jù)量中的最大值最小為目標(biāo),將多個所述第一級別區(qū)間聚合為所述預(yù)設(shè)數(shù)量的第二級別區(qū)間。
在本發(fā)明的一個實施例中,所述第一數(shù)據(jù)導(dǎo)出模塊包括:
第一并行導(dǎo)出模塊,用于所述執(zhí)行節(jié)點(diǎn)有多個且多個所述執(zhí)行節(jié)點(diǎn)并行導(dǎo)出數(shù)據(jù)。
在本發(fā)明的一個實施例中,該數(shù)據(jù)導(dǎo)出裝置還包括:
存儲模塊,用于在所述執(zhí)行節(jié)點(diǎn)導(dǎo)出數(shù)據(jù)時,統(tǒng)計所述第二級別區(qū)間的數(shù)據(jù)分布情況信息并對所述第二級別區(qū)間的數(shù)據(jù)分布情況信息進(jìn)行存儲。
在本發(fā)明實施方式的第四方面中,提供了一種數(shù)據(jù)導(dǎo)出裝置,包括:
第二數(shù)據(jù)評估模塊,用于根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并獲取預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息;
第二數(shù)據(jù)聚合模塊,用于根據(jù)預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息將所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間;
第二數(shù)據(jù)導(dǎo)出模塊,用于將當(dāng)前各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將當(dāng)前所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
在本發(fā)明的一個實施例中,在聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間時,該數(shù)據(jù)導(dǎo)出裝置還包括:
第二統(tǒng)計模塊,用于統(tǒng)計當(dāng)前各所述第二級別區(qū)間記錄的數(shù)據(jù)數(shù)量。
在本發(fā)明的一個實施例中,所述第二數(shù)據(jù)導(dǎo)出模塊包括:
第二并行導(dǎo)出模塊,用于所述執(zhí)行節(jié)點(diǎn)有多個且多個所述執(zhí)行節(jié)點(diǎn)并行導(dǎo)出數(shù)據(jù)。
在本發(fā)明實施方式的第五方面中,提供了一種計算機(jī)可讀存儲介質(zhì),其上存儲有計算機(jī)程序,所述程序被處理器執(zhí)行時實現(xiàn)根據(jù)上述第一方面和第二方面的數(shù)據(jù)導(dǎo)出方法。
在本發(fā)明實施方式的第六方面中,提供了一種電子設(shè)備,包括:
處理器;以及
存儲器,用于存儲所述處理器的可執(zhí)行指令;
其中,所述處理器配置為經(jīng)由執(zhí)行所述可執(zhí)行指令來執(zhí)行上述第一方面和第二方面的數(shù)據(jù)導(dǎo)出方法。
根據(jù)本發(fā)明實施方式的數(shù)據(jù)導(dǎo)出方法和數(shù)據(jù)導(dǎo)出裝置,通過將多個第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間,可以對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行精確劃分區(qū)間,從而實現(xiàn)數(shù)據(jù)的均衡劃分。因此,根據(jù)本發(fā)明實施方式的數(shù)據(jù)導(dǎo)出方法,可以在數(shù)據(jù)導(dǎo)出過程中,將需要導(dǎo)出的目標(biāo)數(shù)據(jù)聚合為均衡的區(qū)間,進(jìn)一步地,可以將數(shù)據(jù)均勻的分配到多個任務(wù)中同時執(zhí)行導(dǎo)出,而避免大部分?jǐn)?shù)據(jù)集中在一個任務(wù)中,從而顯著地避免了數(shù)據(jù)導(dǎo)出時間過長的情況,提高了數(shù)據(jù)導(dǎo)出的效率以及可靠性。
附圖說明
通過參考附圖閱讀下文的詳細(xì)描述,本發(fā)明示例性實施方式的上述以及其他目的、特征和優(yōu)點(diǎn)將變得易于理解。在附圖中,以示例性而非限制性的方式示出了本發(fā)明的若干實施方式,其中:
圖1示意性示出了根據(jù)本發(fā)明實施方式的一個示例性應(yīng)用場景的框架示意圖;
圖2示意性示出了根據(jù)本發(fā)明一實施例的數(shù)據(jù)導(dǎo)出方法的流程圖;
圖3示意性示出了根據(jù)本發(fā)明另一實施例的數(shù)據(jù)導(dǎo)出方法的流程圖;
圖4示意性示出了根據(jù)本發(fā)明一實施例的數(shù)據(jù)導(dǎo)出裝置的示意框圖;
圖5示意性示出了根據(jù)本發(fā)明另一實施例的數(shù)據(jù)導(dǎo)出裝置的示意框圖;
圖6示意性示出了根據(jù)本發(fā)明實施例的電子設(shè)備的一種方框圖;以及
圖7示意性示出了根據(jù)本發(fā)明實施例的用于數(shù)據(jù)導(dǎo)出的一種程序產(chǎn)品。
在附圖中,相同或?qū)?yīng)的標(biāo)號表示相同或?qū)?yīng)的部分。
具體實施方式
下面將參考若干示例性實施方式來描述本發(fā)明的原理和精神。應(yīng)當(dāng)理解,給出這些實施方式僅僅是為了使本領(lǐng)域技術(shù)人員能夠更好地理解進(jìn)而實現(xiàn)本發(fā)明,而并非以任何方式限制本發(fā)明的范圍。相反,提供這些實施方式是為了使本公開更加透徹和完整,并且能夠?qū)⒈竟_的范圍完整地傳達(dá)給本領(lǐng)域的技術(shù)人員。
本領(lǐng)域技術(shù)技術(shù)人員知道,本發(fā)明的實施方式可以實現(xiàn)為一種系統(tǒng)、裝置、設(shè)備、方法或計算機(jī)程序產(chǎn)品。因此,本公開可以具體實現(xiàn)為以下形式,即:完全的硬件、完全的軟件(包括固件、駐留軟件、微代碼等),或者硬件和軟件結(jié)合的形式。
根據(jù)本發(fā)明的實施方式,提出了一種數(shù)據(jù)導(dǎo)出方法和數(shù)據(jù)導(dǎo)出裝置。
在本文中,附圖中的任何元素數(shù)量均用于示例而非限制,以及任何命名都僅用于區(qū)分,而不具有任何限制含義。
下面參考本發(fā)明的若干代表性實施方式,詳細(xì)闡釋本發(fā)明的原理和精神。
發(fā)明概述
本發(fā)明人發(fā)現(xiàn),使用現(xiàn)有技術(shù)中的普通數(shù)據(jù)導(dǎo)出方法進(jìn)行數(shù)據(jù)導(dǎo)出時,由于將數(shù)據(jù)劃分的多個數(shù)據(jù)段分布十分不均衡的原因,導(dǎo)致大部分的數(shù)據(jù)集中在一個任務(wù)中,而大部分?jǐn)?shù)據(jù)通過一個任務(wù)進(jìn)行導(dǎo)出時,經(jīng)常需要耗費(fèi)較長的時間,而且可能會有出錯情況出現(xiàn),從而導(dǎo)致整個數(shù)據(jù)導(dǎo)出過程體驗較差。
基于上述內(nèi)容,本發(fā)明的基本思想在于:將數(shù)據(jù)庫中的數(shù)據(jù)劃分為第一級別區(qū)間,并按照第一級別區(qū)間中數(shù)據(jù)的分布情況將多個第一級別區(qū)間劃分為第二級別區(qū)間,第一級別區(qū)間和第二級別區(qū)間用于將數(shù)據(jù)快速精確地劃分為均勻分布的區(qū)間。在對數(shù)據(jù)進(jìn)行區(qū)間劃分后,將所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。因此,根據(jù)本發(fā)明的實施方式可以對數(shù)據(jù)庫中的目標(biāo)數(shù)據(jù)進(jìn)行精準(zhǔn)均衡劃分,并且能夠?qū)澐值臄?shù)據(jù)分配到多個任務(wù)中,從而顯著地降低了導(dǎo)出數(shù)據(jù)時用時太長的情況,提高了數(shù)據(jù)導(dǎo)出的效率并且提升了整個數(shù)據(jù)導(dǎo)出體驗。
在介紹了本發(fā)明的基本原理之后,下面具體介紹本發(fā)明的各種非限制性實施方式。
應(yīng)用場景總覽
首先參考圖1,圖1示出了本發(fā)明的實施方式的一個示例性應(yīng)用場景的框架示意圖。如圖1所示,用戶可以將服務(wù)器101中的目標(biāo)數(shù)據(jù)導(dǎo)出到服務(wù)器102中。本領(lǐng)域技術(shù)人員應(yīng)該理解,圖1所示的示意框架僅是本發(fā)明的實施方式可以在其中得以實現(xiàn)的一個示例。本發(fā)明實施方式的適用范圍不受到該框架任何方面的限制。
需要說明的是,本發(fā)明的示例性附圖以兩個服務(wù)器為例,然而,本發(fā)明的應(yīng)用場景不限于兩個服務(wù)器。本發(fā)明的應(yīng)用場景也可以應(yīng)用于包含任意數(shù)量的分布式服務(wù)器集群中。
還需要說明的是,服務(wù)器101和服務(wù)器102均可以是本地服務(wù)器或遠(yuǎn)程服務(wù)器,此外,服務(wù)器101還可以是其他能夠提供存儲功能或者處理功能的產(chǎn)品例如云服務(wù)器,本發(fā)明的實施方式在此不做特殊限定。
應(yīng)該理解的是,本發(fā)明的應(yīng)用場景中,本發(fā)明實施方式的動作可以由服務(wù)器102執(zhí)行,但是這些動作中的部分也可以由服務(wù)器101執(zhí)行,當(dāng)然也可以部分由服務(wù)器102執(zhí)行、部分由服務(wù)器101執(zhí)行。本發(fā)明在執(zhí)行主體方面不受任何限制,只要執(zhí)行了本發(fā)明實施方式所公開的動作即可。
示例性方法
下面結(jié)合圖1的應(yīng)用場景,參考圖2來描述根據(jù)本發(fā)明示例性實施方式的用于數(shù)據(jù)導(dǎo)出的方法。需要注意的是,上述應(yīng)用場景僅是為了便于理解本發(fā)明的精神和原理而示出,本發(fā)明的實施方式在此方面不受任何限制。相反,本發(fā)明的實施方式可以應(yīng)用于適用的任何場景。
圖2示出了根據(jù)本發(fā)明一實施例的數(shù)據(jù)導(dǎo)出方法的流程圖。需要說明的是,圖2中所示的步驟s210至步驟s230可以用于首次導(dǎo)出數(shù)據(jù)。參照圖2所示,該數(shù)據(jù)導(dǎo)出方法可以包括以下步驟:
步驟s210.根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況;
步驟s220.根據(jù)統(tǒng)計的所述第一級別區(qū)間數(shù)據(jù)的分布情況將多個所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間;其中,每一所述第二級別區(qū)間均包括一個或連續(xù)的多個所述第一級別區(qū)間;
步驟s230.將各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
根據(jù)本發(fā)明實施方式的數(shù)據(jù)導(dǎo)出方法和數(shù)據(jù)導(dǎo)出裝置,一方面,根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間,可以快速統(tǒng)計數(shù)據(jù)庫中的數(shù)據(jù)的分布情況;另一方面,根據(jù)統(tǒng)計的所述第一級別區(qū)間數(shù)據(jù)的分布情況將多個所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間,可以對上述統(tǒng)計的數(shù)據(jù)進(jìn)行精確劃分區(qū)間,從而實現(xiàn)數(shù)據(jù)的均衡劃分。因此,根據(jù)本發(fā)明實施方式的數(shù)據(jù)導(dǎo)出方法和數(shù)據(jù)導(dǎo)出裝置,可以在數(shù)據(jù)導(dǎo)出過程中,將需要導(dǎo)出的目標(biāo)數(shù)據(jù)劃分為均衡的區(qū)間,并分配到多個任務(wù)中同時執(zhí)行導(dǎo)出,而避免大部分?jǐn)?shù)據(jù)集中在一個任務(wù)中,從而顯著地避免了數(shù)據(jù)導(dǎo)出時間過長的情況,提高了數(shù)據(jù)導(dǎo)出的效率及可靠性,為用戶帶來了更好的體驗。
接下來,將對本示例實施例中的數(shù)據(jù)導(dǎo)出方法進(jìn)一步進(jìn)行說明。
在步驟s210中,根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況。
在本示例實施例中,數(shù)據(jù)源可以為提供所需要的數(shù)據(jù)的器件,也可以為原始媒體、網(wǎng)站、系統(tǒng)、終端或者其他任意形式的數(shù)據(jù)源。數(shù)據(jù)表可以按照相應(yīng)的原則對數(shù)據(jù)或者信息進(jìn)行分類,但是每個數(shù)據(jù)表中只可以包括一個主題的信息,且數(shù)據(jù)表中不能包括重復(fù)信息。舉例來說,在“教學(xué)管理系統(tǒng)”中,教學(xué)管理數(shù)據(jù)庫可以包括以下6個主題的數(shù)據(jù)表:“教師”表、“課程”表、“成績”表、“學(xué)生”表、“班級”表和“授課”表,用來管理教學(xué)過程中學(xué)生、教師、課程等信息。但是本公開的示例實施例中的數(shù)據(jù)表不限于此,例如數(shù)據(jù)表還可以為任意數(shù)量的主題數(shù)據(jù)表等,數(shù)據(jù)庫也可以為商品銷售系統(tǒng)或者是其他任意系統(tǒng)中的數(shù)據(jù),這也在本公開的保護(hù)范圍內(nèi)。舉例來說,教師基本信息應(yīng)當(dāng)保存在“教師”表中。如果將這些基本信息保存在“授課”表中,則在刪除某教師的授課信息,就會將其基本信息一同刪除;每條信息只保存在一個數(shù)據(jù)表中,需要時只在一處進(jìn)行更新,效率更高。例如,每個學(xué)生的姓名、性別等信息,只在“學(xué)生”表中保存,而“成績”中不再保存這些信息。
此外,在本示例實施例中,主鍵可以為一個列或者是多個列的組合,作為每一行的身份標(biāo)識號碼id唯一地標(biāo)識數(shù)據(jù)表中的每一行。主鍵可以用編號或者是有特殊意義的字段來表示,例如,登錄名、訂單編號等;也可以用guid(globallyuniqueidentifier,全局唯一標(biāo)識符)表示,主鍵的值可以由guid唯一生成,以便于數(shù)據(jù)的導(dǎo)入導(dǎo)出。guid可以自動生成,也可以由程序生成;主鍵可以為字符類型,也可以為其他類型。
具體而言,在本示例實施例中,可以通過數(shù)據(jù)評估模塊將數(shù)據(jù)庫中的目標(biāo)數(shù)據(jù)粗粒度劃分為第一級別區(qū)間,第一級別區(qū)間可以是記錄數(shù)據(jù)量比較小的區(qū)間,多個第一級別區(qū)間中的數(shù)據(jù)數(shù)量可以相同,也可以不同。其中,可以將只考慮對象的類別,不考慮對象的某個特定實例的劃分稱為粗粒度劃分。例如,用戶管理中,創(chuàng)建、刪除,對所有的用戶都相同,并不區(qū)分操作的具體對象實例。
進(jìn)一步地,為了對數(shù)據(jù)進(jìn)行更精確的劃分,可以在將數(shù)據(jù)劃分為第一級別區(qū)間時對應(yīng)的統(tǒng)計每個第一級別區(qū)間中數(shù)據(jù)的分布情況,統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況還可以包括:統(tǒng)計各所述第一級別區(qū)間記錄的數(shù)據(jù)數(shù)量。在本示例實施例中,可以通過sql(structuredquerylanguage,結(jié)構(gòu)化查詢語言)實現(xiàn)對數(shù)據(jù)庫中的數(shù)據(jù)分布的粗略統(tǒng)計。例如,可以通過where語句統(tǒng)計某一區(qū)間內(nèi)的數(shù)據(jù)分布情況。具體地,可以通過whereid>=aandwhereid<=b,統(tǒng)計區(qū)間[a,b]中記錄的數(shù)據(jù)數(shù)量,此外,也可以通過其他語句例如when語句或者是其他方式統(tǒng)計某個區(qū)間內(nèi)的數(shù)據(jù)條數(shù)。接下來可以對整個數(shù)據(jù)庫進(jìn)行循環(huán),可以統(tǒng)計出每個第一級別區(qū)間中記錄的數(shù)據(jù)數(shù)量。
此外,本示例實施例中,統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況還可以包括:
判斷多個所述第一級別區(qū)間中是否存在未記錄數(shù)據(jù)的區(qū)間;
在判斷多個所述第一級別區(qū)間中存在所述未記錄數(shù)據(jù)的區(qū)間時,跳過所述未記錄數(shù)據(jù)的區(qū)間。
在本示例實施例中,可以通過sql實現(xiàn)對數(shù)據(jù)的剔除或者優(yōu)化。由于數(shù)據(jù)庫中有多個第一級別區(qū)間,而第一級別區(qū)間內(nèi)可能存在容量或者空間非常大,但是并未記錄任何一條數(shù)據(jù)的區(qū)間,這種現(xiàn)象可以稱為數(shù)據(jù)空洞?;诜植际轿募鎯Φ臄?shù)據(jù)庫mongodb順序的原因,一個數(shù)據(jù)表經(jīng)歷了頻繁的更新和刪除后,其數(shù)據(jù)文件的尺寸大于其數(shù)據(jù)實際尺寸。在刪除部分無用數(shù)據(jù)后,它的storagesize和filesize并不會變小,從而可能會造成大量的數(shù)據(jù)空洞。這些數(shù)據(jù)空洞除了占用磁盤之外,也可能會加載到內(nèi)存中,從而降低內(nèi)存效率。因此,需要對數(shù)據(jù)空洞進(jìn)行處理。具體地,可以通過offset語句實現(xiàn)跳過數(shù)據(jù)空洞的功能,例如,在區(qū)間[a,b]中,可以通過offsetx語句,跳過區(qū)間中的x個數(shù)據(jù),即可以將未記錄數(shù)據(jù)的區(qū)間直接忽略。具體而言,在本示例實施例中,可以通過循環(huán)判斷數(shù)據(jù)是否為空數(shù)據(jù)的方式,判斷多個第一級別區(qū)間內(nèi)是否存在未記錄數(shù)據(jù)的區(qū)間。然后在判斷出存在未記錄數(shù)據(jù)的區(qū)間時,可以通過上述offset語句跳過該數(shù)據(jù)空洞。需要說明的是,各所述第一級別區(qū)間可以不存在未記錄數(shù)據(jù)的區(qū)間,也可以存在一個或多個未記錄數(shù)據(jù)的區(qū)間。未記錄數(shù)據(jù)的區(qū)間可以完全未記錄數(shù)據(jù),也可以一部分記錄數(shù)據(jù),一部分未記錄數(shù)據(jù),這種情況下,可以從起始位置地址使用循環(huán)和指針,將未記錄數(shù)據(jù)的部分跳過或者刪除,從而較精確地統(tǒng)計出數(shù)據(jù)的分布情況。
接下來,在步驟s220中,根據(jù)統(tǒng)計的所述第一級別區(qū)間數(shù)據(jù)的分布情況將多個所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間;其中,每一所述第二級別區(qū)間均包括一個或連續(xù)的多個所述第一級別區(qū)間。
在本示例實施例中,在跳過目標(biāo)數(shù)據(jù)中的數(shù)據(jù)空洞以及統(tǒng)計第一級別區(qū)間的分布情況之后,可以根據(jù)統(tǒng)計的第一級別區(qū)間數(shù)據(jù)的分布情況將多個記錄數(shù)據(jù)條數(shù)較小的第一級別區(qū)間聚合為記錄數(shù)據(jù)條數(shù)較大的第二級別區(qū)間。所述預(yù)設(shè)數(shù)量可以為系統(tǒng)設(shè)置,也可以根據(jù)用戶需要自定義設(shè)置。其中,每個第二級別區(qū)間都可以包括一個或者是連續(xù)的多個第一級別區(qū)間。可以設(shè)置每個第二級別區(qū)間包括的第一級別區(qū)間的個數(shù)相同,也可以設(shè)置每個第二級別區(qū)間記錄的數(shù)據(jù)條數(shù)相同,也可以通過其他方式將第一級別區(qū)間聚合為固定數(shù)量的第二級別區(qū)間。
舉例來說,在對商品銷售信息進(jìn)行處理時,可以先對每個商品的銷售信息進(jìn)行區(qū)間劃分,然后可以將其聚合成大區(qū)間,比如按照品牌劃分,這樣在數(shù)據(jù)導(dǎo)出時,只需要對品牌進(jìn)行匯總,就可以得到結(jié)果。通過這種區(qū)間聚合方式,可以縮短導(dǎo)出數(shù)據(jù)的響應(yīng)時間,間接地提高數(shù)據(jù)導(dǎo)出效率。在此過程中,可以在將數(shù)據(jù)進(jìn)行粗粒度劃分之后,將數(shù)據(jù)進(jìn)行細(xì)粒度劃分,其中,可以將需要考慮具體對象的實例的劃分稱為細(xì)粒度劃分,即在考慮粗粒度的對象類別之后才再考慮特定實例。例如,合同管理中,列表、刪除,需要區(qū)分該合同實例是否為當(dāng)前用戶所創(chuàng)建。
此外,本示例實施例中,將所述多個第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間可以包括:
通過動態(tài)規(guī)劃算法將多個所述第一級別區(qū)間聚合為所述預(yù)設(shè)數(shù)量的第二級別區(qū)間。
在本示例實施例中,可以通過所述動態(tài)規(guī)劃算法將多個第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間。其中,預(yù)設(shè)數(shù)量可以根據(jù)系統(tǒng)設(shè)置或者是根據(jù)用戶需求自定義設(shè)置。動態(tài)規(guī)劃算法可以用于計算當(dāng)前狀態(tài)到目標(biāo)狀態(tài)的最優(yōu)值,同時也可以計算中間狀態(tài)的最優(yōu)值。舉例來說,數(shù)據(jù)庫的輸入數(shù)據(jù)一般可以包括100-1000個數(shù)據(jù)區(qū)間,而輸出數(shù)據(jù)一般情況下不大于20個數(shù)據(jù)區(qū)間。即可以通過動態(tài)規(guī)劃算法將100-1000個第一級別區(qū)間聚合為少于20個的第二級別區(qū)間。第二級別區(qū)間記錄的數(shù)據(jù)可以遠(yuǎn)大于第一級別區(qū)間記錄的數(shù)據(jù)數(shù)量。
此外,本示例實施例中,通過動態(tài)規(guī)劃算法將多個所述第一級別區(qū)間聚合可以包括:
將所有所述第一級別區(qū)間劃分為預(yù)設(shè)數(shù)量的數(shù)據(jù)組,并統(tǒng)計各所述數(shù)據(jù)組的數(shù)據(jù)量;其中每一所述數(shù)據(jù)組均包括一個或連續(xù)的多個所述第一級別區(qū)間;
以所有所述數(shù)據(jù)組的數(shù)據(jù)量中的最大值最小為目標(biāo),將多個所述第一級別區(qū)間聚合為所述預(yù)設(shè)數(shù)量的第二級別區(qū)間。
在本示例實施例中,可以通過將所有的第一級別區(qū)間劃分為預(yù)設(shè)數(shù)量的數(shù)據(jù)組來確定將第一級別區(qū)間聚合為第二級別區(qū)間的最優(yōu)區(qū)間聚合方法。數(shù)據(jù)組的預(yù)設(shè)數(shù)量可以與第二級別區(qū)間的預(yù)設(shè)數(shù)量相同。具體而言,可以建立數(shù)學(xué)模型,例如,對于n個連續(xù)的第一級別區(qū)間,每個第一級別區(qū)間中記錄的數(shù)據(jù)數(shù)量為bi(1<=i<=n),可以將n個第一級別區(qū)間劃分為m個連續(xù)的數(shù)據(jù)組,并統(tǒng)計每個數(shù)據(jù)組中記錄的數(shù)據(jù)總數(shù)量sj(1<=j(luò)<=m),其中,n、m都是自然數(shù),且每個數(shù)據(jù)組中都包括一個或者是連續(xù)的多個第一級別區(qū)間。接下來,可以通過動態(tài)規(guī)劃算法計算一種最優(yōu)區(qū)間劃分方案。動態(tài)規(guī)劃算法是一種廣泛使用的最優(yōu)化算法,可以將多階段決策過程化為多個單階段決策過程。每個決策對所有的劃分方法分別求最大值,最后得出最優(yōu)劃分方法。動態(tài)規(guī)劃算法可以計算當(dāng)前狀態(tài)到目標(biāo)狀態(tài)的最優(yōu)值,同時也可以計算中間狀態(tài)的最優(yōu)值。
在本示例實施例中,所述區(qū)間劃分方案可以以所有所述數(shù)據(jù)組的數(shù)據(jù)量中的最大值最小為目標(biāo),即使得max(sj)(1<=j(luò)<=m)最小。針對建立的數(shù)學(xué)模型,可以首先統(tǒng)計每個第一級別區(qū)間中記錄的數(shù)據(jù)數(shù)量,然后可以統(tǒng)計每個連續(xù)的數(shù)據(jù)組中的數(shù)據(jù)數(shù)量。各第一級別區(qū)間bi中的數(shù)據(jù)數(shù)量不完全相同,數(shù)據(jù)組有多種劃分方法,從而導(dǎo)致sj有多種bi組合方式且各數(shù)據(jù)組中的數(shù)據(jù)總數(shù)量sj隨機(jī),例如,b1=2,b2=4,b3=5;s1=b1+b2,s2=b3+b4+b5等。進(jìn)一步地,求出一種最優(yōu)的bi組合方式得出所有sj的數(shù)值中的最大值max(sj)(1<=j(luò)<=m),并且使得最大值max(sj)(1<=j(luò)<=m)最小??梢酝ㄟ^編程語言實現(xiàn)該算法,從而確定如何將n個第一級別區(qū)間劃分為m個連續(xù)的數(shù)據(jù)組,進(jìn)一步確定將第一級別區(qū)間聚合為第二級別區(qū)間的方法,以實現(xiàn)數(shù)據(jù)的均勻分布。此外,還可以通過貪婪算法、分冶算法或者是其他算法將多個第一級別區(qū)間最優(yōu)地聚合為第二級別區(qū)間。
接下來,在步驟s230中,將各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
本示例實施例中,可以將第二級別區(qū)間中的每個數(shù)據(jù)分配給數(shù)據(jù)導(dǎo)出模塊中的執(zhí)行節(jié)點(diǎn),執(zhí)行節(jié)點(diǎn)可以包括名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),其中,名稱節(jié)點(diǎn)可以用于維護(hù)所有的文件和索引目錄,名稱節(jié)點(diǎn)也記錄著每個文件所在的數(shù)據(jù)節(jié)點(diǎn);可以通過數(shù)據(jù)節(jié)點(diǎn)對目標(biāo)數(shù)據(jù)進(jìn)行存儲、序列化等處操作??梢酝ㄟ^sql語句創(chuàng)建存儲過程,也可以通過其他語句、其他方式進(jìn)行存儲。目標(biāo)存儲模塊可以為基于客戶機(jī)/服務(wù)器模式的分布式文件系統(tǒng),例如,hadoop、fastdfs等傳統(tǒng)分布式文件系統(tǒng)。在分布式文件系統(tǒng)中,文件系統(tǒng)管理的物理存儲資源可以通過計算機(jī)網(wǎng)絡(luò)與節(jié)點(diǎn)相連接。目標(biāo)存儲模塊也可以為與服務(wù)器連接的文件系統(tǒng),例如郵箱、網(wǎng)盤、云服務(wù)器等。在將數(shù)據(jù)分配給對應(yīng)的執(zhí)行節(jié)點(diǎn)后,可以控制所述執(zhí)行節(jié)點(diǎn)將第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。本示例實施例中,可以通過不同的語言程序?qū)⒌诙墑e區(qū)間的數(shù)據(jù)導(dǎo)出為本地文件,也可以導(dǎo)出為hdfs文件,還可以導(dǎo)出到另外的數(shù)據(jù)表中。
此外,本示例實施例中,將各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)可以包括:
所述執(zhí)行節(jié)點(diǎn)有多個且多個所述執(zhí)行節(jié)點(diǎn)并行導(dǎo)出數(shù)據(jù)。
在本示例實施例中,所述執(zhí)行節(jié)點(diǎn)可以有多個,將每個第二級別區(qū)間分配給一個對應(yīng)的執(zhí)行節(jié)點(diǎn),其中,每個第二級別區(qū)間可以與每個執(zhí)行節(jié)點(diǎn)一一對應(yīng),從而通過一個執(zhí)行節(jié)點(diǎn)導(dǎo)出與該節(jié)點(diǎn)對應(yīng)的第二級別區(qū)間的目標(biāo)數(shù)據(jù),并且多個執(zhí)行節(jié)點(diǎn)可以同時并行導(dǎo)出數(shù)據(jù),通過多個執(zhí)行節(jié)點(diǎn)并行導(dǎo)出數(shù)據(jù)可以有效地提高數(shù)據(jù)導(dǎo)出效率,縮短數(shù)據(jù)導(dǎo)出耗費(fèi)的時間。
此外,本示例實施例中,所述數(shù)據(jù)導(dǎo)出方法還可以包括:
在所述執(zhí)行節(jié)點(diǎn)導(dǎo)出數(shù)據(jù)時,統(tǒng)計所述第二級別區(qū)間的數(shù)據(jù)分布情況信息并對所述第二級別區(qū)間的數(shù)據(jù)分布情況信息進(jìn)行存儲。
在本示例實施例中,可以在多個執(zhí)行節(jié)點(diǎn)導(dǎo)出數(shù)據(jù)時,統(tǒng)計第二級別區(qū)間的數(shù)據(jù)分布情況,并且可以通過元數(shù)據(jù)管理模塊將統(tǒng)計的第二級別區(qū)間的數(shù)據(jù)分布情況存儲在數(shù)據(jù)庫中。該元數(shù)據(jù)管理模塊可以用于存儲和獲取統(tǒng)計出的第一級別區(qū)間和第二級別區(qū)間數(shù)據(jù)的分布情況。在第一次導(dǎo)出數(shù)據(jù)時,存儲細(xì)粒度劃分的第二級別區(qū)間的數(shù)據(jù)分布情況,可以在后續(xù)進(jìn)行數(shù)據(jù)導(dǎo)出時,直接調(diào)用最新的歷史數(shù)據(jù),而不需要再對所有數(shù)據(jù)進(jìn)行細(xì)粒度區(qū)間劃分,因此可以避免對歷史數(shù)據(jù)的重復(fù)劃分,縮短導(dǎo)出數(shù)據(jù)的時間。
圖3示出了根據(jù)本發(fā)明另一實施例的數(shù)據(jù)導(dǎo)出方法的流程圖。需要說明的是,圖3中所示的步驟s310至步驟s330可以用于第二次以及第二次以后的全量導(dǎo)出數(shù)據(jù)。參照圖3所示,該數(shù)據(jù)導(dǎo)出方法可以包括以下步驟:
步驟s310.根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并獲取預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息;
步驟s320.根據(jù)預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息將所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間;
步驟s330.將當(dāng)前各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將當(dāng)前所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
根據(jù)本發(fā)明實施方式的數(shù)據(jù)導(dǎo)出方法,通過獲取預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息,并將所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間,可以避免歷史數(shù)據(jù)的重新劃分和聚合,從而實現(xiàn)數(shù)據(jù)的高效劃分。因此,根據(jù)本發(fā)明實施方式的數(shù)據(jù)導(dǎo)出方法可以在數(shù)據(jù)導(dǎo)出過程中,將需要導(dǎo)出的目標(biāo)數(shù)據(jù)劃分為均衡的區(qū)間,并且可以直接使用劃分好的區(qū)間結(jié)果,從而顯著地避免了數(shù)據(jù)導(dǎo)出時間過長的情況,提高了數(shù)據(jù)導(dǎo)出的效率及可靠性,為用戶帶來了更好的體驗。
接下來,將對本示例實施例中的數(shù)據(jù)導(dǎo)出方法進(jìn)一步進(jìn)行說明。
在步驟s310中,根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并獲取預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息。
在本示例實施例中,數(shù)據(jù)可以包括所有數(shù)據(jù),也可以只包括新增的數(shù)據(jù)。在后續(xù)全量導(dǎo)出數(shù)據(jù)的過程中,可以只將新增的數(shù)據(jù)按照主鍵的值的分布情況劃分為第一級別區(qū)間,需要說明的是,此處的劃分標(biāo)準(zhǔn)可以與第一次導(dǎo)出數(shù)據(jù)使得劃分標(biāo)準(zhǔn)相同。在將新增的數(shù)據(jù)劃分為第一級別區(qū)間之后,可以獲取第一次執(zhí)行數(shù)據(jù)導(dǎo)出時,存儲在數(shù)據(jù)庫中的第二級別區(qū)間數(shù)據(jù)的歷史分布情況。
在步驟s320中,根據(jù)預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息將所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間。
在本示例實施例中,可以根據(jù)預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息,將第一級別區(qū)間聚合為與第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息相對應(yīng)的預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間。此處的預(yù)設(shè)數(shù)量可以與歷史第二級別區(qū)間的數(shù)量相同,也可以不同,還可以根據(jù)用戶需求自定義進(jìn)行設(shè)置。舉例來說,對于商品銷售信息,在新增了多個商品后,可以根據(jù)原來的分類標(biāo)準(zhǔn)將新增的商品聚合為與歷史第二級別區(qū)間相同標(biāo)準(zhǔn)的當(dāng)前第二級別區(qū)間,比如按照品牌聚合。在將新增數(shù)據(jù)聚合為當(dāng)前第二級別區(qū)間數(shù)據(jù)之后,可以將歷史第二級別區(qū)間與當(dāng)前第二級別區(qū)間的數(shù)據(jù)聚合以方便導(dǎo)出所有數(shù)據(jù),也可以不聚合歷史第二級別區(qū)間與當(dāng)前第二級別區(qū)間,以分別導(dǎo)出歷史數(shù)據(jù)、新增數(shù)據(jù)或者是所有數(shù)據(jù)。
此外,本示例實施例中,在聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間時,所述數(shù)據(jù)導(dǎo)出方法還可以包括:
統(tǒng)計當(dāng)前各所述第二級別區(qū)間記錄的數(shù)據(jù)數(shù)量。
在本示例實施例中,可以統(tǒng)計當(dāng)前各所述第二級別區(qū)間記錄的數(shù)據(jù)數(shù)量。統(tǒng)計方法與上述方法相同,因此此處不再贅述。
在步驟s330中,將當(dāng)前各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將當(dāng)前所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
在本示例實施例中,可以將當(dāng)前第二級別區(qū)間中的每個數(shù)據(jù)分配給數(shù)據(jù)導(dǎo)出模塊中的執(zhí)行節(jié)點(diǎn),執(zhí)行節(jié)點(diǎn)可以包括名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),其中,名稱節(jié)點(diǎn)可以用于維護(hù)所有的文件和索引目錄,名稱節(jié)點(diǎn)也記錄著每個文件所在的數(shù)據(jù)節(jié)點(diǎn);可以通過數(shù)據(jù)節(jié)點(diǎn)對目標(biāo)數(shù)據(jù)進(jìn)行存儲、序列化等處操作??梢酝ㄟ^sql語句創(chuàng)建存儲過程,也可以通過其他語句或者是其他方式進(jìn)行存儲。目標(biāo)存儲模塊可以為基于客戶機(jī)/服務(wù)器模式的分布式文件系統(tǒng),在分布式文件系統(tǒng)中,文件系統(tǒng)管理的物理存儲資源可以通過計算機(jī)網(wǎng)絡(luò)與節(jié)點(diǎn)相連接。在將數(shù)據(jù)分配給對應(yīng)的執(zhí)行節(jié)點(diǎn)后,可以控制所述執(zhí)行節(jié)點(diǎn)將對應(yīng)的當(dāng)前第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
此外,本示例實施例中,將當(dāng)前各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)可以包括:
所述執(zhí)行節(jié)點(diǎn)有多個且多個所述執(zhí)行節(jié)點(diǎn)并行導(dǎo)出數(shù)據(jù)。
在本示例實施例中,所述執(zhí)行節(jié)點(diǎn)可以有多個,可以將每個當(dāng)前第二級別區(qū)間分配給一個對應(yīng)的執(zhí)行節(jié)點(diǎn),以執(zhí)行將當(dāng)前所述第二級別區(qū)間的數(shù)據(jù)并行導(dǎo)出到目標(biāo)存儲模塊,從而提高導(dǎo)出數(shù)據(jù)的效率。
示例性設(shè)備
在介紹了本發(fā)明示例性實施方式的方法之后,接下來,參考圖4對本發(fā)明一示例性實施方式的數(shù)據(jù)導(dǎo)出裝置400進(jìn)行詳細(xì)描述。如圖4所示,數(shù)據(jù)導(dǎo)出裝置400可以包括:第一數(shù)據(jù)評估模塊410、第一數(shù)據(jù)聚合模塊420、以及第一數(shù)據(jù)導(dǎo)出模塊430。其中:
第一數(shù)據(jù)評估模塊410,可以用于根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)粗略劃分為多個第一級別區(qū)間并統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況;
第一區(qū)間聚合模塊420,可以用于根據(jù)統(tǒng)計的所述第一級別區(qū)間數(shù)據(jù)的分布情況將多個所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間;
第一數(shù)據(jù)導(dǎo)出模塊430,可以用于將每個所述第二級別區(qū)間的數(shù)據(jù)分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
在本發(fā)明的一個實施例中,所述第一數(shù)據(jù)評估模塊410可以包括:
第一統(tǒng)計模塊,可以用于統(tǒng)計各所述第一級別區(qū)間記錄的數(shù)據(jù)數(shù)量。
在本發(fā)明的又一個實施例中,所述第一數(shù)據(jù)評估模塊410還可以包括:
第一判斷模塊,可以用于判斷多個所述第一級別區(qū)間中是否存在未記錄數(shù)據(jù)的區(qū)間;
區(qū)間篩選模塊,可以用于在判斷多個所述第一級別區(qū)間中存在所述未記錄數(shù)據(jù)的區(qū)間時,跳過所述未記錄數(shù)據(jù)的區(qū)間。
在本發(fā)明的一個實施例中,第一區(qū)間聚合模塊420可以包括:
聚合模塊,可以用于通過動態(tài)規(guī)劃算法將多個所述第一級別區(qū)間聚合為所述預(yù)設(shè)數(shù)量的第二級別區(qū)間。
在本發(fā)明的一個實施例中,所述聚合模塊可以包括:
劃分模塊,可以用于將所有所述第一級別區(qū)間劃分為預(yù)設(shè)數(shù)量的數(shù)據(jù)組,并統(tǒng)計各所述數(shù)據(jù)組的數(shù)據(jù)量;其中每一所述數(shù)據(jù)組均包括一個或連續(xù)的多個所述第一級別區(qū)間;
目標(biāo)聚合模塊,可以用于以所有所述數(shù)據(jù)組的數(shù)據(jù)量中的最大值最小為目標(biāo),將多個所述第一級別區(qū)間聚合為所述預(yù)設(shè)數(shù)量的第二級別區(qū)間。
在本發(fā)明的一個實施例中,第一數(shù)據(jù)導(dǎo)出模塊430可以包括:
第一并行導(dǎo)出模塊,可以用于所述執(zhí)行節(jié)點(diǎn)有多個且多個所述執(zhí)行節(jié)點(diǎn)并行導(dǎo)出數(shù)據(jù)。
在本發(fā)明的一個實施例中,該數(shù)據(jù)導(dǎo)出裝置400還可以包括:
存儲模塊,可以用于在所述執(zhí)行節(jié)點(diǎn)導(dǎo)出數(shù)據(jù)時,統(tǒng)計所述第二級別區(qū)間的數(shù)據(jù)分布情況信息并對所述第二級別區(qū)間的數(shù)據(jù)分布情況信息進(jìn)行存儲。
接下來,參考圖5對本發(fā)明又一示例性實施方式的數(shù)據(jù)導(dǎo)出裝置500進(jìn)行詳細(xì)描述。如圖5所示,數(shù)據(jù)導(dǎo)出裝置500可以包括:第二數(shù)據(jù)評估模塊510、第二數(shù)據(jù)聚合模塊520、以及第二數(shù)據(jù)導(dǎo)出模塊530。其中:
第二數(shù)據(jù)評估模塊510,可以用于根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并獲取預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息;
第二數(shù)據(jù)聚合模塊520,可以用于根據(jù)預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息將所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間;
第二數(shù)據(jù)導(dǎo)出模塊530,可以用于將當(dāng)前各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將當(dāng)前所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
在本發(fā)明的一個實施例中,在聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間時,該數(shù)據(jù)導(dǎo)出裝置500還可以包括:
第二統(tǒng)計模塊,可以用于統(tǒng)計當(dāng)前各所述第二級別區(qū)間記錄的數(shù)據(jù)數(shù)量。
在本發(fā)明的一個實施例中,第二數(shù)據(jù)導(dǎo)出模塊530可以包括:
第二并行導(dǎo)出模塊,可以用于所述執(zhí)行節(jié)點(diǎn)有多個且多個所述執(zhí)行節(jié)點(diǎn)并行導(dǎo)出數(shù)據(jù)。
由于本發(fā)明的示例實施例中的數(shù)據(jù)導(dǎo)出裝置400和數(shù)據(jù)導(dǎo)出裝置500的各個功能模塊與上述數(shù)據(jù)導(dǎo)出方法的各個步驟對應(yīng),因此在此將不再贅述。
需要說明的是,對比現(xiàn)有技術(shù)方案,本發(fā)明的系統(tǒng)架構(gòu)中增加了數(shù)據(jù)評估模塊,區(qū)間聚合模塊,元數(shù)據(jù)管理模塊,并且優(yōu)化了數(shù)據(jù)導(dǎo)出模塊。其中,數(shù)據(jù)評估模塊可以用于統(tǒng)計數(shù)據(jù)庫中數(shù)據(jù)的大概分布情況,區(qū)間聚合模塊可以用于將數(shù)據(jù)的大概分布情況以及歷史統(tǒng)計的詳細(xì)分布聚合成預(yù)設(shè)數(shù)量的區(qū)間,元數(shù)據(jù)管理模塊可以用于與評估數(shù)據(jù)模塊交互,以負(fù)責(zé)存儲和獲取數(shù)據(jù)導(dǎo)出模塊統(tǒng)計的區(qū)間分布情況的數(shù)據(jù)。
示例性設(shè)備
在介紹了本發(fā)明示例性實施方式的方法和裝置之后,接下來,介紹根據(jù)本發(fā)明的另一示例性實施方式的用于數(shù)據(jù)導(dǎo)出的電子設(shè)備。
所屬技術(shù)領(lǐng)域的技術(shù)人員能夠理解,本發(fā)明的各個方面可以實現(xiàn)為系統(tǒng)、方法或程序產(chǎn)品。因此,本發(fā)明的各個方面可以具體實現(xiàn)為以下形式,即:完全的硬件實施方式、完全的軟件實施方式(包括固件、微代碼等),或硬件和軟件方面結(jié)合的實施方式,這里可以統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。
在一些可能的實施方式中,根據(jù)本發(fā)明的數(shù)據(jù)導(dǎo)出設(shè)備可以至少包括至少一個處理單元、以及至少一個存儲單元。其中,所述存儲單元存儲有程序代碼,當(dāng)所述程序代碼被所述處理單元執(zhí)行時,使得所述處理單元執(zhí)行本說明書上述“示例性方法”部分中描述的根據(jù)本發(fā)明各種示例性實施方式的數(shù)據(jù)導(dǎo)出方法中的步驟。例如,所述處理單元可以執(zhí)行如圖2中所示的步驟s210:根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況;步驟s220:根據(jù)統(tǒng)計的所述第一級別區(qū)間數(shù)據(jù)的分布情況將多個所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間;其中,每一所述第二級別區(qū)間均包括一個或連續(xù)的多個所述第一級別區(qū)間;步驟s230:將各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。所述處理單元也可以執(zhí)行如圖3中所示的步驟s310:根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并獲取預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息;步驟s320:根據(jù)預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息將所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間;步驟s330:將當(dāng)前各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將當(dāng)前所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
下面參照圖6來描述根據(jù)本發(fā)明的這種實施方式的用于數(shù)據(jù)導(dǎo)出的電子設(shè)備600。圖6所示的數(shù)據(jù)導(dǎo)出設(shè)備600僅僅是一個示例,不應(yīng)對本發(fā)明實施例的功能和使用范圍帶來任何限制。
如圖6所示,數(shù)據(jù)導(dǎo)出設(shè)備600以通用計算設(shè)備的形式表現(xiàn)。數(shù)據(jù)導(dǎo)出設(shè)備600的組件可以包括但不限于:上述至少一個處理單元601、上述至少一個存儲單元602、連接不同系統(tǒng)組件(包括存儲單元602和處理單元601)的總線603。
總線603表示幾類總線結(jié)構(gòu)中的一種或多種,包括存儲器總線或者存儲器控制器、外圍總線、圖形加速端口、處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。
存儲單元602可以包括易失性存儲器形式的可讀介質(zhì),例如隨機(jī)存取存儲器(ram)6021和/或高速緩存存儲器6022,還可以進(jìn)一步包括只讀存儲器(rom)6023。
存儲單元602還可以包括具有一組(至少一個)程序模塊6024的程序/實用工具6025,這樣的程序模塊6024包括但不限于:操作系統(tǒng)、一個或者多個應(yīng)用程序、其它程序模塊以及程序數(shù)據(jù),這些示例中的每一個或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實現(xiàn)。
數(shù)據(jù)導(dǎo)出設(shè)備600也可以與一個或多個外部設(shè)備604(例如鍵盤、指向設(shè)備、藍(lán)牙設(shè)備等)通信,還可與一個或者多個使得用戶能與數(shù)據(jù)導(dǎo)出設(shè)備600交互的設(shè)備通信,和/或與使得數(shù)據(jù)導(dǎo)出設(shè)備600能與一個或多個其它計算設(shè)備進(jìn)行通信的任何設(shè)備(例如路由器、調(diào)制解調(diào)器等等)通信。這種通信可以通過輸入/輸出(i/o)接口605進(jìn)行。并且,數(shù)據(jù)導(dǎo)出設(shè)備600還可以通過網(wǎng)絡(luò)適配器606與一個或者多個網(wǎng)絡(luò)(例如局域網(wǎng)(lan),廣域網(wǎng)(wan)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器606通過總線603與數(shù)據(jù)導(dǎo)出設(shè)備600的其它模塊通信。應(yīng)當(dāng)明白,盡管圖6中未示出,可以結(jié)合數(shù)據(jù)導(dǎo)出設(shè)備600使用其它硬件和/或軟件模塊,包括但不限于:微代碼、設(shè)備驅(qū)動器、冗余處理單元、外部磁盤驅(qū)動陣列、raid系統(tǒng)、磁帶驅(qū)動器以及數(shù)據(jù)備份存儲系統(tǒng)等。
示例性程序產(chǎn)品
在一些可能的實施方式中,本發(fā)明的各個方面還可以實現(xiàn)為一種程序產(chǎn)品的形式,其包括程序代碼,當(dāng)所述程序產(chǎn)品在終端設(shè)備上運(yùn)行時,所述程序代碼用于使所述終端設(shè)備執(zhí)行本說明書上述“示例性方法”部分中描述的根據(jù)本發(fā)明各種示例性實施方式的數(shù)據(jù)導(dǎo)出方法中的步驟,例如,所述處理單元可以執(zhí)行如圖2中所示的步驟s210:根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵的值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并統(tǒng)計所述多個第一級別區(qū)間數(shù)據(jù)的分布情況;步驟s220:根據(jù)統(tǒng)計的所述第一級別區(qū)間數(shù)據(jù)的分布情況將多個所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的第二級別區(qū)間;其中,每一所述第二級別區(qū)間均包括一個或連續(xù)的多個所述第一級別區(qū)間;步驟s230:將各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。所述處理單元也可以執(zhí)行如圖3中所示的步驟s310:根據(jù)數(shù)據(jù)源中數(shù)據(jù)表的主鍵值的分布,將數(shù)據(jù)劃分為多個第一級別區(qū)間并獲取預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息;步驟s320:根據(jù)預(yù)存的第二級別區(qū)間數(shù)據(jù)的歷史分布情況信息將所述第一級別區(qū)間聚合為預(yù)設(shè)數(shù)量的當(dāng)前第二級別區(qū)間;步驟s330:將當(dāng)前各所述第二級別區(qū)間分配給一執(zhí)行節(jié)點(diǎn)執(zhí)行以將當(dāng)前所述第二級別區(qū)間的數(shù)據(jù)導(dǎo)出到目標(biāo)存儲模塊。
所述程序產(chǎn)品可以采用一個或多個可讀介質(zhì)的任意組合。可讀介質(zhì)可以是可讀信號介質(zhì)或者可讀存儲介質(zhì)。可讀存儲介質(zhì)例如可以是——但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合??勺x存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個或多個導(dǎo)線的電連接、便攜式盤、硬盤、隨機(jī)存取存儲器(ram)、只讀存儲器(rom)、可擦式可編程只讀存儲器(eprom或閃存)、光纖、便攜式緊湊盤只讀存儲器(cd-rom)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。
如圖7所示,描述了根據(jù)本發(fā)明的實施方式的用于數(shù)據(jù)導(dǎo)出的程序產(chǎn)品700,其可以采用便攜式緊湊盤只讀存儲器(cd-rom)并包括程序代碼,并可以在終端設(shè)備,例如個人電腦上運(yùn)行。然而,本發(fā)明的程序產(chǎn)品不限于此,在本文件中,可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
可讀信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了可讀程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括——但不限于——電磁信號、光信號或上述的任意合適的組合??勺x信號介質(zhì)還可以是可讀存儲介質(zhì)以外的任何可讀介質(zhì),該可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括——但不限于——無線、有線、光纜、rf等等,或者上述的任意合適的組合。
可以以一種或多種程序設(shè)計語言的任意組合來編寫用于執(zhí)行本發(fā)明操作的程序代碼,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言—諸如java、c++等,還包括常規(guī)的過程式程序設(shè)計語言—諸如“c”語言或類似的程序設(shè)計語言。程序代碼可以完全地在用戶計算設(shè)備上執(zhí)行、部分地在用戶設(shè)備上執(zhí)行、作為一個獨(dú)立的軟件包執(zhí)行、部分在用戶計算設(shè)備上部分在遠(yuǎn)程計算設(shè)備上執(zhí)行、或者完全在遠(yuǎn)程計算設(shè)備或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計算設(shè)備的情形中,遠(yuǎn)程計算設(shè)備可以通過任意種類的網(wǎng)絡(luò)——包括局域網(wǎng)(lan)或廣域網(wǎng)(wan)—連接到用戶計算設(shè)備,或者,可以連接到外部計算設(shè)備(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。
應(yīng)當(dāng)注意,盡管在上文詳細(xì)描述中提及了數(shù)據(jù)導(dǎo)出設(shè)備的若干裝置或子裝置,但是這種劃分僅僅并非強(qiáng)制性的。實際上,根據(jù)本發(fā)明的實施方式,上文描述的兩個或更多裝置的特征和功能可以在一個裝置中具體化。反之,上文描述的一個裝置的特征和功能可以進(jìn)一步劃分為由多個裝置來具體化。
此外,盡管在附圖中以特定順序描述了本發(fā)明方法的操作,但是,這并非要求或者暗示必須按照該特定順序來執(zhí)行這些操作,或是必須執(zhí)行全部所示的操作才能實現(xiàn)期望的結(jié)果。附加地或備選地,可以省略某些步驟,將多個步驟合并為一個步驟執(zhí)行,和/或?qū)⒁粋€步驟分解為多個步驟執(zhí)行。
雖然已經(jīng)參考若干具體實施方式描述了本發(fā)明的精神和原理,但是應(yīng)該理解,本發(fā)明并不限于所公開的具體實施方式,對各方面的劃分也不意味著這些方面中的特征不能組合以進(jìn)行受益,這種劃分僅是為了表述的方便。本發(fā)明旨在涵蓋所附權(quán)利要求的精神和范圍內(nèi)所包括的各種修改和等同布置。