一種數據加載方法及裝置制造方法
【專利摘要】本發明涉及數據處理領域,尤其涉及一種數據加載方法及裝置,用以提高對系統內各個數據節點的資源及網絡帶寬的利用效率;本發明數據加載方法中,第一數據節點在接收到所屬的數據庫系統的主節點發送的數據加載指令后,從加載服務器中獲取數據塊,并檢測獲取的數據塊中每條邏輯記錄所屬的數據節點,針對其中任意一條邏輯記錄,在檢測到該條邏輯記錄屬于本節點后,將該條邏輯記錄存儲在本地,在檢測到該條邏輯記錄屬于所述數據庫系統的其它數據節點后,將該條邏輯記錄轉發給所述其它數據節點。本發明將分布式數據庫系統的數據重分布能力布置在數據庫系統中的每個數據節點,從而可以充分利用數據庫系統中每個數據節點的資源及網絡帶寬。
【專利說明】—種數據加載方法及裝置
【技術領域】
[0001]本發明涉及數據處理領域,尤其涉及一種數據加載方法及裝置。
【背景技術】
[0002]分布式數據庫系統是在集中式數據庫系統的基礎上發展起來的,是計算機技術和網絡技術相結合的產物。相比集中式數據庫系統,分布式數據庫系統具有許多優勢:首先,分布式數據庫系統可以允許各個分散部門將其常用的數據存儲在本地,從而可以降低數據傳送的成本,提高響應速率,其次,由于分布式數據庫系統允許在網絡出現故障時,對局部數據庫進行操作,從而可以提高系統的可靠性,再次,由于在分布式數據庫系統中增加一個新的局部數據庫,或在某個位置擴充一臺適當的小型計算機,都很容易實現,因此,分布式數據庫系統的可擴展性也比較高。分布式數據庫系統的低延遲、高可靠、易擴展等優點成為企業部署數據庫系統的首選。
[0003]分布式數據庫系統主要包括一個主節點(master)和多個數據節點(datanode),在該系統中,進行數據加載的方式是采用主節點或系統外的數據導入組件作為數據加載的入口,由該主節點或數據導入組件對需要入庫的數據進行拆分解析等處理,確定不同數據所屬的數據節點,并將處理后的數據分發給數據庫中對應的數據節點,因此,分布式數據庫系統的整體加載性能依賴于上述主節點或數據導入組件的處理性能,在數據量較大、系統內數據節點數量較多時,上述主節點或數據導入組件需要將大量的數據進行拆分解析后,分別分發給對應的各個數據節點,耗時較長,這時,上述主節點或數據導入組件會成為整個數據庫系統進行數據加載的瓶頸,在主節點或數據導入組件將數據分發到數據節點之前,該數據節點無法對數據進行任何處理,因此,采用這種加載方式對系統內各個數據節點的資源及網絡帶寬的利用效率較低。
【發明內容】
[0004]本發明實施例提供一種數據加載方法及裝置,用以解決分布式數據庫系統中由主節點或數據導入組件作為數據加載的入口的方式對系統內各個數據節點的資源及網絡帶寬的利用效率較低的問題。
[0005]第一方面,提供一種數據加載方法,該方法應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,該方法采用加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,包括:
[0006]第一數據節點在接收到所屬的數據庫系統的主節點發送的數據加載指令后,從加載服務器中獲取數據塊;
[0007]所述第一數據節點檢測獲取的數據塊中每條邏輯記錄所屬的數據節點;
[0008]針對數據塊中的任意一條邏輯記錄,所述第一數據節點在檢測到該條邏輯記錄屬于本節點后,將該條邏輯記錄存儲在本地,在檢測到該條邏輯記錄屬于所述數據庫系統的其它數據節點后,將該條邏輯記錄轉發給所述其它數據節點。
[0009]結合第一方面,在第一種可能的實現方式中,所述第一數據節點從加載服務器中獲取數據塊,包括:
[0010]所述第一數據節點至少一次向多個加載服務器中的第一加載服務器發送數據請求消息,每次接收所述第一加載服務器分配的一個數據塊;
[0011]若所述第一數據節點確定所述第一加載服務器分配數據塊的速率低于設定閾值,則在將最近一次獲取的數據塊處理完畢后,至少一次向第二加載服務器發送數據請求消息,每次接收所述第二加載服務器分配的一個數據塊。
[0012]結合第一方面的第一種可能的實現方式,在第二種可能的實現方式中,所述第一數據節點至少一次向所述第二加載服務器發送數據請求消息,包括:
[0013]所述第一數據節點確定第一次向所述第二加載服務器發送的數據請求消息;所述確定的數據請求消息中包括已獲取的數據塊對應的文件偏移量信息;
[0014]所述第一數據節點向所述第二加載服務器發送確定的所述數據請求消息,以使所述第二加載服務器根據接收的數據請求消息中包括的所述文件偏移量信息確定需要分配給所述第一數據節點的數據塊;
[0015]其中,所述第一加載服務器中存儲的數據與所述第二加載服務器中存儲的數據相同,且屬于同一數據文件。
[0016]第二方面,提供一種數據加載方法,該方法應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,該方法采用加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,包括:
[0017]第一加載服務器接收并存儲需要提供給數據庫系統內的數據節點的數據;
[0018]所述第一加載服務器將接收的數據劃分為多個數據塊;
[0019]所述第一加載服務器在接收到所述數據庫系統內的多個數據節點根據所述主節點的指示發送的數據請求消息后,分別基于劃分的數據塊為所述多個數據節點中的每個數據節點分配不同的數據塊,以使每個數據節點在獲取數據塊后,將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
[0020]結合第二方面,在第一種可能的實現方式中,所述第一加載服務器接收并存儲的數據與其它為所述數據庫系統內的數據節點提供數據塊的加載服務器接收并存儲的數據不同;所述第一加載服務器劃分的每個數據塊中的數據是行完整的。
[0021]結合第二方面,在第二種可能的實現方式中,所述第一加載服務器接收并存儲的數據與其它為所述數據庫系統內的數據節點提供數據塊的加載服務器接收并存儲的數據相同,且屬于同一個數據文件;
[0022]所述第一加載服務器分別為所述多個數據節點中的每個數據節點分配不同的數據塊之前,還包括:
[0023]針對一個數據節點,若該數據節點在向所述第一加載服務器發送數據請求消息之前,已從其它加載服務器獲取了數據塊,則所述第一加載服務器根據該數據節點發送的文件偏移量信息,確定需要發送給該數據節點的數據塊。
[0024]結合第二方面的第二種可能的實現方式,在第三種可能的實現方式中,所述第一加載服務器將接收的數據劃分為多個數據塊,包括:
[0025]所述第一加載服務器根據所述數據庫系統內的數據節點的個數M,將存儲的數據劃分為M個數據組,并將每個數據組中的數據劃分為多個數據塊;其中,M為正整數,每個數據組對應一個數據節點;
[0026]所述第一加載服務器分別為所述多個數據節點中的每個數據節點分配不同的數據塊,包括:
[0027]針對一個數據節點,所述第一加載服務器從對應該數據節點的數據組中選擇一個數據塊分配給該數據節點。
[0028]結合第二方面的第三種可能的實現方式,在第四種可能的實現方式中,所述第一加載服務器將存儲的數據劃分為M個數據組之后,還包括:
[0029]所述第一加載服務器根據不同數據節點的數據處理速率的不同,調整劃分的每個數據組的數據量。
[0030]第三方面,提供一種數據加載方法,該方法應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,該方法采用加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該方法包括:
[0031]主節點接收數據加載指令;
[0032]所述主節點將所述數據加載指令發送給所屬的數據庫系統內的每個數據節點,指示所述每個數據節點從加載服務器中獲取數據塊,并將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
[0033]第四方面,提供一種數據加載裝置,該裝置應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,所述裝置設置于每個數據節點中,所述數據庫系統外設置有加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該裝置包括:
[0034]獲取模塊,用于在接收到所屬的數據庫系統的主節點發送的數據加載指令后,從加載服務器中獲取數據塊,并將獲取的數據塊傳輸至檢測模塊;
[0035]檢測模塊,用于檢測所述獲取模塊獲取的數據塊中每條邏輯記錄所屬的數據節
占.[0036]處理模塊,用于針對數據塊中的任意一條邏輯記錄,在所述檢測模塊檢測到該條邏輯記錄屬于本節點后,將該條邏輯記錄存儲在本地,在檢測到該條邏輯記錄屬于所述數據庫系統的其它數據節點后,將該條邏輯記錄轉發給所述其它數據節點。
[0037]結合第四方面,在第一種可能的實現方式中,所述獲取模塊具體用于:
[0038]至少一次向多個加載服務器中的第一加載服務器發送數據請求消息,每次接收所述第一加載服務器分配的一個數據塊;若確定所述第一加載服務器分配數據塊的速率低于設定閾值,則在將最近一次獲取的數據塊處理完畢后,至少一次向第二加載服務器發送數據請求消息,每次接收所述第二加載服務器分配的一個數據塊。
[0039]結合第四方面的第一種可能的實現方式,在第二種可能的實現方式中,所述獲取模塊具體用于:[0040]確定第一次向所述第二加載服務器發送的數據請求消息,所述確定的數據請求消息中包括已獲取的數據塊對應的文件偏移量信息,向所述第二加載服務器發送確定的所述數據請求消息,以使所述第二加載服務器根據接收的數據請求消息中包括的所述文件偏移量信息確定需要分配給所述第一數據節點的數據塊;其中,所述第一加載服務器中存儲的數據與所述第二加載服務器中存儲的數據相同,且屬于同一數據文件。
[0041]第五方面,提供一種數據加載裝置,該裝置應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,該裝置設置于加載服務器中,所述加載服務器用于為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該裝置包括:
[0042]接收模塊,用于接收并存儲需要提供給數據庫系統內的數據節點的數據,并將接收的數據傳輸至劃分模塊;
[0043]劃分模塊,用于將接收模塊接收的數據劃分為多個數據塊,并將劃分的數據塊傳輸至分配模塊;
[0044]分配模塊,用于在接收到所述數據庫系統內的多個數據節點根據所述主節點的指示發送的數據請求消息后,分別基于劃分模塊劃分的數據塊為所述多個數據節點中的每個數據節點分配不同的數據塊,以使每個數據節點在獲取數據塊后,將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
[0045]結合第五方面,在第一種可能的實現方式中,所述接收模塊接收并存儲的數據與為所述數據庫系統內的數據節點提供數據塊的其它加載服務器接收并存儲的數據不同;所述劃分模塊劃分的每個數據塊中的數據是行完整的。
[0046]結合第五方面,在第二種可能的實現方式中,所述接收模塊接收并存儲的數據與為所述數據庫系統內的數據節點提供數據塊的其它加載服務器接收并存儲的數據相同,且屬于同一個數據文件;
[0047]所述分配模塊具體用于:針對一個數據節點,若該數據節點在向所述第一加載服務器發送數據請求消息之前,已從其它加載服務器獲取了數據塊,則根據該數據節點發送的文件偏移量信息,確定需要發送給該數據節點的數據塊。
[0048]結合第五方面的第二種可能的實現方式,在第三種可能的實現方式中,所述劃分模塊具體用于:根據所述數據庫系統內的數據節點的個數M,將存儲的數據劃分為M個數據組,并將每個數據組中的數據劃分為多個數據塊;其中,M為正整數,每個數據組對應一個數據節點;
[0049]所述分配模塊具體用于:針對一個數據節點,從對應該數據節點的數據組中選擇一個數據塊分配給該數據節點。
[0050]結合第五方面的第三種可能的實現方式,在第四種可能的實現方式中,,所述劃分模塊還用于:
[0051]所述第一加載服務器根據不同數據節點的數據處理速率的不同,調整劃分的每個數據組的數據量。
[0052]第六方面,提供一種數據加載裝置,該裝置應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,所述裝置設置于所述主節點中;所述數據庫系統外設置有加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該裝置包括:
[0053]接收模塊,用于接收數據加載指令,并將接收的所述數據加載指令傳輸至發送模塊;
[0054]發送模塊,用于將所述數據加載指令發送給所屬的數據庫系統內的每個數據節點,指示所述每個數據節點從加載服務器中獲取數據塊,并將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
[0055]本發明第一方面提供的數據加載方法,將分布式數據庫系統的數據重分布能力布置在數據庫系統中的每個數據節點,每個數據節點在獲取到不屬于本節點的數據時將該數據重分布到該數據所屬的節點,從而可以充分利用數據庫系統中每個數據節點的資源及網絡帶寬,而且還能顯著提高整個數據庫系統的數據加載及數據處理的效率;該方法中,加載服務器可以將存儲的數據以數據塊的形式批量分配給不同的數據節點,這種方式相比傳統的基于開放數據庫互連(Open Database Connectivity, ODBC)或數據庫連接(Java DataBase Connectivity, JDBC)等標準數據庫連接方式的數據加載,即采用主節點將結構化查詢語言(Structured Query Language, SQL)語句逐個插入數據節點的方式,可以極大提高數據加載的效率。
[0056]本發明第二方面提供的數據加載方法,通過設置加載服務器來為數據庫系統內的數據節點進行數據加載提供數據塊,可以將存儲的數據以數據塊的形式批量分配給不同的數據節點,從而可以使各數據節點并行執行數據處理的操作,不僅可以充分利用每個數據節點的資源及網絡帶寬,而且相比傳統的基于ODBC或JDBC等標準數據庫連接方式的數據加載,加載效率更高;
[0057]本發明第三方面提供的數據加載方法,主節點在接收到數據加載指令后,將數據加載指令下發給每個數據節點,從而將數據重分布能力轉交給每個數據節點,以充分利用每個數據節點的資源及網絡帶寬。
【專利附圖】
【附圖說明】
[0058]圖1為本發明實施例一提供的數據加載方法流程圖;
[0059]圖2為本發明實施例提供的分布式數據庫系統結構示意圖;
[0060]圖3為本發明實施例分布式數據庫系統進行數據加載的示意圖;
[0061]圖4為本發明實施例二提供的數據加載方法流程圖;
[0062]圖5為方式一中加載服務器分發數據示意圖;
[0063]圖6為方式二中分布式數據庫系統并行加載大小為IT的大文件fileOOl的示意圖;
[0064]圖7為方式二中對單個大文件的數據切割示意圖;
[0065]圖8為方式二中加載服務器分發數據示意圖;
[0066]圖9為本發明實施例三提供的數據加載方法流程圖;
[0067]圖10為本發明實施例四針對多個數據文件進行數據加載的方法流程圖;
[0068]圖11為本發明實施例五針對單個較大的數據文件進行數據加載的方法流程圖;
[0069]圖12為本發明實施例一提供的數據加載裝置示意圖;[0070]圖13為本發明實施例二提供的數據加載裝置示意圖;
[0071]圖14為本發明實施例三提供的數據加載裝置示意圖。
【具體實施方式】
[0072]為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其它實施例,都屬于本發明保護的范圍。
[0073]下面結合說明書附圖對本發明實施例作進一步詳細描述。
[0074]如圖1所示,為本發明實施例一提供的數據加載方法流程圖;
[0075]本發明實施例應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,本發明實施例中,采用加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該方法包括以下步驟:
[0076]SlOl:第一數據節點在接收到所屬的數據庫系統的主節點發送的數據加載指令后,從加載服務器中獲取數據塊;
[0077]S102:所述第一數據節點檢測獲取的數據塊中每條邏輯記錄所屬的數據節點;
[0078]S103:針對數據塊中的任意一條邏輯記錄,所述第一數據節點在檢測到該條邏輯記錄屬于本節點后,將該條邏輯記錄存儲在本地,在檢測到該條邏輯記錄屬于所述數據庫系統的其它數據節點后,將該條邏輯記錄轉發給所述其它數據節點。
[0079]本發明實施例中的分布式數據庫系統主要包括一個主節點(master)及多個數據節點(datanode),還可以包括備用節點(standby),以供主節點出現故障的情況下使用,同時,為了輔助每個數據節點快速進行數據加載,本發明實施例中,預先設置了為數據庫系統內的數據節點進行數據加載提供數據塊的服務器,即加載服務器;如圖2所示,為本發明實施例提供的分布式數據庫系統結構示意圖。
[0080]本發明實施例中,將分布式數據庫系統的數據重分布能力布置在數據庫系統中的每個數據節點,使每個數據節點在獲取到不屬于本節點的數據時將該數據重分布到該數據所屬的節點,從而可以充分利用數據庫系統中每個數據節點的資源及網絡帶寬,而且還能顯著提高整個數據庫系統的數據加載及數據處理的效率;具體地,每個數據節點確定獲取的數據所屬的數據節點的方式可以采用現有的方法,即,針對一個數據節點,該數據節點針對下載的數據塊中的每條邏輯記錄計算分布列的哈希(hash)值,然后根據計算的哈希值確定該條邏輯記錄所屬的數據節點。
[0081]本發明實施例中的加載服務器可以為每個數據節點提供基于超文本傳輸協議(Hypertext transfer protocol, HTTP)或文件傳輸協議(File Transfer Protocol, FTP)的數據加載服務,即,將存儲的數據以數據塊的形式批量分配給不同的數據節點,這種方式相比傳統的基于開放數據庫互連(Open Database Connectivity, ODBC)或數據庫連接(Java Data Base Connectivity, JDBC)等標準數據庫連接方式的數據加載,即采用主節點將SQL語句逐個插入數據節點的方式,可以極大提高數據加載的效率。
[0082]在具體實施中,可以為數據庫系統創建外表,在該外表中記錄加載服務器的地址,每個數據節點都可以對該外表進行查詢操作。
[0083]在具體實施過程中,可以設置一個或多個加載服務器,具體地,可以根據分布式數據庫系統中數據節點的個數和/或加載數據量的大小等確定加載服務器的個數,比如,在加載數據量較大時,可以設置多個加載服務器同時提供數據加載服務,以避免加載服務器的出口帶寬成為數據加載的瓶頸,在數據節點個數較多時,也可以設置多個加載服務器,以避免過多的數據節點連接一個加載服務器,導致各數據節點的并行下載速率過慢。
[0084]如圖3所示,為本發明實施例分布式數據庫系統進行數據加載的示意圖,主節點在接收到數據加載指令后,將數據加載指令下發到各個數據節點,各數據節點接收到數據加載指令后,分別連接加載服務器,從加載服務器上下載數據塊,數據節點對下載的數據塊中的每條邏輯記錄進行分布計算,確定下載的數據塊中每條邏輯記錄所屬的節點,針對其中任意一條邏輯記錄,若確定該條邏輯記錄屬于本節點,將該條邏輯記錄寫入本地存儲隊列中,若確定該條邏輯記錄屬于其它數據節點,則對該條邏輯記錄進行重分布,即將該條邏輯記錄轉發給其它數據節點,當各數據節點在加載服務器上取不到數據時,完成數據加載,各數據節點將加載完成的信息反饋給主節點,主節點將加載完成的信息反饋給用戶。
[0085]可選地,步驟SlOl中,所述第一數據節點從加載服務器中獲取數據塊,包括:
[0086]所述第一數據節點至少一次向多個加載服務器中的第一加載服務器發送數據請求消息,每次接收所述第一加載服務器分配的一個數據塊;
[0087]若所述第一數據節點確定所述第一加載服務器分配數據塊的速率低于設定閾值,則在將最近一次獲取的數據塊處理完畢后,至少一次向第二加載服務器發送數據請求消息,每次接收所述第二加載服務器分配的一個數據塊。
[0088]在具體實施過程中,每個數據節點只需選擇設置的多個加載服務器中的一個加載服務器,向選擇的該加載服務器發送數據請求消息,在接收到該加載服務器發送的數據塊后,可以將該數據塊先緩存在本地,并處理緩存的數據塊,處理過程包括:判斷該數據塊包含的每條邏輯記錄所屬的節點,若確定該條邏輯記錄屬于本節點,則將該條邏輯記錄寫入本地存儲隊列中,若確定該條邏輯記錄屬于其它數據節點,則將該條邏輯記錄轉發給所屬的其它數據節點;當將緩存的數據塊中的每條邏輯記錄都處理完畢后再向加載服務器發送數據請求消息,下載另一個數據塊,如此,可以減少網絡交互,節省網絡帶寬。
[0089]在具體實施中,可以預先設置好每個數據節點首次連接的加載服務器,也可以由主節點在下發數據加載指令時,統一配置每個數據節點首次連接的加載服務器,以實現加載服務器之間的負載均衡,避免加載開始時,過多的數據節點從一個加載服務器上請求數據,導致加載速率過慢。這種預先為每個數據節點分配加載服務器的方式,雖然可以在一開始進行數據加載時實現加載服務器的負載均衡,但是,由于不同加載服務器的數據提供性能可能不同,在設定時間內,有的加載服務器可能只可以為一個數據節點提供一個數據塊,有的加載服務器卻可能可以為多個數據節點分別提供多個數據塊,為了在數據加載過程中進一步提高下載效率,本發明實施例提出了調整策略:上述第一數據節點在發現當前為其提供數據的加載服務器的數據提供性能較低,也即分配數據的速率較低時,為了提高數據加載效率,可以在處理完最近一次接收的數據塊后,重新連接其它的加載服務器下載數據,除此,第一數據節點也可以在發現第一加載服務器不再發送數據時,重新連接其它的加載服務器下載數據,第一數據節點重復上述請求、接收數據的步驟,直到從所有的加載服務器都獲取不到數據,則表示完成了數據加載。
[0090]可選地,所述第一數據節點至少一次向所述第二加載服務器發送數據請求消息,包括:
[0091]所述第一數據節點確定第一次向所述第二加載服務器發送的數據請求消息;所述確定的數據請求消息中包括已獲取的數據塊對應的文件偏移量信息;
[0092]所述第一數據節點向所述第二加載服務器發送確定的所述數據請求消息,以使所述第二加載服務器根據接收的數據請求消息中包括的所述文件偏移量信息確定需要分配給所述第一數據節點的數據塊;
[0093]其中,所述第一加載服務器中存儲的數據與所述第二加載服務器中存儲的數據相同,且屬于同一數據文件。
[0094]在具體實施過程中,各加載服務器需要存儲的數據可能屬于多個數據文件,為了避免重復下載,可以使不同加載服務器分別存儲不同的數據文件,這時,當上述第一數據節點從第一加載服務器轉移到第二加載服務器下載數據時,不必攜帶已下載數據對應的文件偏移量信息;當系統外的節點發送給各加載服務器的數據屬于同一個較大的數據文件時,為了避免進行文件切割導致數據完整性受到破壞及增加額外的切割計算的流程,可以將該數據文件分別存儲到每個加載服務器中,并預先為每個數據節點分配好屬于該數據節點處理的部分數據,在數據節點請求數據時,為該數據節點分配屬于該數據節點的那部分數據,在該數據節點從第一加載服務器轉移到第二加載服務器上獲取數據時,第二加載服務器根據該數據節點攜帶的已處理數據對應的文件偏移量信息,繼續為該數據節點提供屬于該數據節點的數據。這里的文件偏移量信息可以用于使第二加載服務器確定該數據節點已下載的數據對應的文件位置,以確定繼續為該數據節點提供的數據,保證該數據節點下載數據的完整性和不重復性。
[0095]上述步驟中,當所有的加載服務器中的數據分發完畢后,完成數據加載,這時,每個數據節點將數據加載完成的信息反饋到主節點,主節點在接收到各數據節點發送的數據加載完成的信息后,將數據加載完成的信息通知給用戶。
[0096]與上述數據節點執行數據加載的方法流程對應,本發明實施例還提供了以下加載服務器為各數據節點提供數據的數據加載方法;
[0097]如圖4所示,為本發明實施例二提供的數據加載方法流程圖;
[0098]本發明實施例應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,在本發明實施例中,采用加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該方法包括:
[0099]S401:第一加載服務器接收并存儲需要提供給數據庫系統內的數據節點的數據;
[0100]S402:所述第一加載服務器將接收的數據劃分為多個數據塊;
[0101]S403:所述第一加載服務器在接收到所述數據庫系統內的多個數據節點根據所述主節點的指示發送的數據請求消息后,分別基于劃分的數據塊為所述多個數據節點中的每個數據節點分配不同的數據塊,以使每個數據節點在獲取數據塊后,將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
[0102]本發明實施例中,通過設置加載服務器來為數據庫系統內的數據節點進行數據加載提供數據塊,從而可以使各數據節點并行執行數據處理的操作,以充分利用每個數據節點的資源及網絡帶寬,同時,第一加載服務器在接收到多個數據節點發送的數據請求消息后,為不同的數據節點分別分配不同的數據塊,以避免各數據節點對相同數據的重復性處理。
[0103]本發明實施例中的加載服務器可以為每個數據節點提供基于HTTP或FTP的數據加載服務,即,將存儲的數據以數據塊的形式批量分配給不同的數據節點,這種方式相比傳統的基于ODBC或JDBC等標準數據庫連接方式的數據加載,即采用主節點將SQL語句逐個插入數據節點的方式,可以極大提高數據加載的效率。
[0104]在具體實施過程中,分布式數據庫系統可能需要加載多個較小的數據文件,也可能需要加載一個較大的數據文件,針對這兩種不同情況,各加載服務器可以選擇不同的數據存儲方式,下面分別作介紹:
[0105]方式一,每個加載服務器接收并存儲不同的數據;
[0106]也即,在上述步驟S401中,所述第一加載服務器接收并存儲的數據與其它為所述數據庫系統內的數據節點提供數據塊的加載服務器接收并存儲的數據不同;所述第一加載服務器劃分的每個數據塊中的數據是行完整的。
[0107]這種方式一般適用于數據庫系統需要加載多個較小的數據文件的情況,采用這種方式,不同加載服務器分別接收并存儲數據庫系統外的節點發送的不同的數據文件,不僅可以避免不同加載服務器對相同數據的重復存儲,節省加載服務器的存儲空間,還可以避免數據節點對不同加載服務器中相同數據的重復下載,同時,由于每個加載服務器存儲的數據文件不同,而且,第一加載服務器劃分的每個數據塊中的數據是行完整的,因此,數據節點在從一個加載服務器轉移到另一個加載服務器下載數據時,不必攜帶已下載數據的文件偏移量信息;
[0108]當然,對于單個較大的數據文件,比如數據量為IT的數據文件,也可以采用這種方式,只不過在這種情況下,還需要該系統外的節點按照加載服務器的數量對該數據文件進行切割,并將切割后的每部分數據分別存儲到每個加載服務器中,在切割中需要保證每部分數據的行完整性,因此,額外增加了系統外節點的工作量。
[0109]基于上述存儲數據的方式,這些加載服務器在將存儲的數據分配給數據庫系統中的每個數據節點時,可以采用以下方式:
[0110]如圖5所示,為方式一中加載服務器分發數據示意圖;圖中虛線表示數據節點與加載服務器未建立連接,實線表示數據節點與加載服務器已建立連接;在具體實施中,每個加載服務器將存儲的數據劃分為多個行完整的數據塊,在接收到多個數據節點發送的數據請求消息后,為這多個數據節點中的每個數據節點分別分配一個數據塊,如圖5中,加載服務器I在接收到數據節點I和數據節點2的數據請求消息后,分別為數據節點I和數據節點2分配一個數據塊;若有的數據節點的處理性能高,在該數據節點處理完一個數據塊后,可以繼續為該數據節點分配其它的數據塊,如圖5中,在相同時間內,數據節點I和數據節點3各下載了 2個數據塊,數據節點2只下載了一個數據塊;這種方式可以根據不同數據節點的處理能力分配數據,相比在一開始就將數據平均分配給每個數據節點的方式,可以提高數據庫系統處理數據的整體效率;在具體實施中,當一個數據節點探測到當前連接的下載服務器的數據提供性能較低時,重新連接其它的加載服務器下載數據,如圖5中,數據節點I開始時從加載服務器I上下載數據,當該數據節點確定該加載服務器I的數據分配速率低于設定閾值時,重新連接加載服務器2,從加載服務器2上繼續下載數據。
[0111]方式二、每個加載服務器接收并存儲同一數據文件;
[0112]也即,在上述步驟S401中,所述第一加載服務器接收并存儲的數據與其它為所述數據庫系統內的數據節點提供數據塊的加載服務器接收并存儲的數據相同,且屬于同一個數據文件;
[0113]在該方式下,所述第一加載服務器分別為所述多個數據節點中的每個數據節點分配不同的數據塊之前,還包括:針對一個數據節點,若該數據節點在向所述第一加載服務器發送數據請求消息之前,已從其它加載服務器獲取了數據塊,則所述第一加載服務器根據該數據節點發送的文件偏移量信息,確定需要發送給該數據節點的數據塊。
[0114]該方式二適用于數據庫系統加載一個較大的數據文件的情況,在上述關于方式一的描述中已說明,當數據庫系統加載一個較大的數據文件時,也可以采用上述方式一的方式,只是方式一在處理這種情況時會額外增加系統外節點處理數據的負擔,并且有可能會破壞數據的行完整性,而該方式二由于無需將數據文件進行切割,可以保證數據的完整性及避免增加系統外節點處理數據的負擔。
[0115]采用這種方式,需要預先確定為每個數據節點分配的數據塊,針對其中一個數據節點,在該數據節點向任意一個加載服務器請求數據時,該加載服務器從預先確定的需要為該數據節點分配的數據塊中,選擇數據塊發送給該數據節點。
[0116]在具體實施過程中,所述第一加載服務器為每個數據節點分配數據塊之前,針對一個數據節點,若該數據節點在向所述第一加載服務器發送數據請求消息之前,已從其它加載服務器獲取了數據塊,則所述第一加載服務器可以根據該數據節點發送的文件偏移量信息,確定需要發送給該數據節點的數據;該文件偏移量信息可以用于使第二加載服務器確定該數據節點已下載數據對應的文件位置,以確定繼續為該數據節點分配的數據,保證該數據節點下載數據的完整性和不重復性。
[0117]如圖6所示,為上述方式二中分布式數據庫系統并行加載大小為IT的大文件fileOOl的示意圖;主節點在接收到數據加載指令后,將數據加載指令下發到各個數據節點,每個數據節點在接收到數據加載指令后,分別連接一個加載服務器,從連接的加載服務器上下載數據塊,針對其中一個數據節點,該數據節點對下載的數據塊中的每條邏輯記錄進行分布計算,確定下載的數據塊中每條邏輯記錄所屬的節點,針對其中一條邏輯記錄,若確定下載的該條邏輯記錄屬于本節點,則直接將下載的該條邏輯記錄插入本地存儲隊列,若確定下載的該條邏輯記錄屬于其它節點,則將該條邏輯記錄轉發給其他節點,在該數據節點確定當前連接的加載服務器分配數據的速率低于設定閾值時,重新連接其它的加載服務器,并將已下載數據的文件偏移量信息發送給重新連接的加載服務器,當各數據節點在所有的加載服務器上都取不到數據時,完成數據加載,各數據節點將加載完成的結果反饋給主節點,主節點將各數據節點加載完成的信息反饋給用戶。
[0118]基于上述存儲數據的方式,這些加載服務器在將存儲的數據分配給數據庫系統中的每個數據節點時,可以采用以下方式:
[0119]可選地,所述第一加載服務器將接收的數據劃分為多個數據塊,包括:
[0120]所述第一加載服務器根據所述數據庫系統內的數據節點的個數M,將存儲的數據劃分為M個數據組,并將每個數據組中的數據劃分為多個數據塊;其中,M為正整數,每個數據組對應一個數據節點;
[0121]所述第一加載服務器分別為所述多個數據節點中的每個數據節點分配不同的數據塊,包括:
[0122]針對一個數據節點,所述第一加載服務器從對應該數據節點的數據組中選擇一個數據塊分配給該數據節點。
[0123]可選地,所述第一加載服務器將存儲的數據劃分為M個數據組之后,還包括:
[0124]所述第一加載服務器根據不同數據節點的數據處理速率的不同,調整劃分的每個數據組的數據量。
[0125]如圖7所示,為上述方式二中對單個大文件的數據切割示意圖;假設數據庫系統共有三個數據節點,每個加載服務器將數據文件劃分為三個數據組,分別用偏移量表示為A?B,B?C,C?D,其中,A、B、C、D分別表示相對數據文件開頭偏移的字節數;每個數據組分別對應一個數據節點;當數據節點I處理數據的速率較慢時,加載服務器可以減少數據節點I對應的數據組的數據量,將其調整為A?B-N,N表示減少的字節數,而將處理數據的速率較快的數據節點2的偏移量調整為B-N?C。
[0126]如圖8所示,為上述方式二中加載服務器分發數據示意圖;針對數據庫系統中的三個數據節點,每個加載服務器將存儲的同一個數據文件劃分為三個行完整的數據組,分別對應每個數據節點,并將每個數據組劃分為多個數據塊,針對其中任意一個加載服務器,該加載服務器在接收到某個數據節點發送的數據請求消息后,從對應該數據節點的數據組中選擇一個數據塊發送給該數據節點,在給每個數據節點分發數據時,可以從對應該數據節點的數據組中按順序取出數據塊分配給該數據節點,因此,每個數據塊中的數據不需要一定是行完整的,但是,在該數據節點從一個加載服務器轉移到其它加載服務器下載數據時,需要攜帶已下載數據的文件偏移量信息,以便于其它加載服務器根據該文件偏移量信息確定為該數據節點分配的數據塊,保證數據下載的完整性及不重復性。
[0127]與上述實施例一中數據節點執行數據加載和實施例二中加載服務器為各數據節點提供數據的數據加載方法相對應,本發明實施例還提供了主節點指示各數據節點進行數據加載的方法;
[0128]如圖9所示,為本發明實施例三提供的數據加載方法流程圖;
[0129]本發明實施例應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,在本發明實施例中,采用加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該方法包括:
[0130]S901:主節點接收數據加載指令;
[0131]S902:所述主節點將所述數據加載指令發送給所屬的數據庫系統內的每個數據節點,指示所述每個數據節點從加載服務器中獲取數據塊,并將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
[0132]為了更詳細地說明本發明實施例進行數據加載的方法,下面通過幾個具體的實施例作進一步說明:
[0133]如圖10所示,為本發明實施例四針對多個數據文件進行數據加載的方法流程圖,包括:
[0134]SlOOl:各加載服務器接收并存儲數據庫系統外的節點發送的多個數據文件;其中,不同加載服務器中存儲的數據文件不同;
[0135]S1002:主節點接收數據加載指令,并將接收的指令下發給所屬的分布式數據庫系統內的各數據節點;
[0136]這里,用戶可以通過編輯結構化查詢語言(Structured Query Language, SQL)語句在主節點輸入數據加載指令。
[0137]S1003:各數據節點在接收到數據加載指令后,查詢所述數據庫系統的外表中記錄的加載服務器的地址,連接加載服務器,并向連接的加載服務器發送數據請求消息;
[0138]在具體實施中,針對一個數據節點,若該數據節點確定當前為其提供數據的加載服務器分配數據的速率低于設定閾值,可以重新連接其它的加載服務器下載數據,以提高數據下載效率。
[0139]S1004:各加載服務器在接收到數據節點的數據請求消息后,為每個數據節點分配一個數據塊;其中,所述數據塊中的數據為行完整的;
[0140]在具體實施中,各加載服務器可以在接收并存儲數據庫系統外的節點發送的數據后,即將該數據劃分為多個數據塊,也可以在接收到數據節點的數據請求消息后,再將存儲的數據劃分為多個數據塊;
[0141]在具體實施中,每個數據節點在下載一個數據塊后,將該數據塊緩存在本地,在將該數據塊中的數據處理完畢后,再向加載服務器請求數據,如此,可以減少網絡交互,同時,采用這種不固定分配數據的方式,在數據下載過程中,數據處理能力高的數據節點可以請求處理較多的數據,實現對不同數據節點的按需分配,提高整個數據庫系統的數據處理效率;
[0142]S1005:各數據節點確定接收的數據塊中每條邏輯記錄所屬的數據節點,針對其中任意一條邏輯記錄,若確定該條邏輯記錄屬于本節點,則將該條邏輯記錄存儲在本地,若確定該條邏輯記錄屬于其他數據節點,則將該條邏輯記錄轉發給其它數據節點;
[0143]S1006:各數據節點在從為數據庫系統提供數據的所有的加載服務器中都無法取到數據時,確定完成數據加載,并將數據加載完成的信息反饋給主節點;
[0144]S1007:主節點將數據加載完成的信息通知給用戶。
[0145]如圖11所示,為本發明實施例五針對單個較大的數據文件進行數據加載的方法流程圖,包括:
[0146]SllOl:各加載服務器接收并存儲數據庫系統外的節點發送的同一個數據文件;
[0147]S1102:主節點接收數據加載指令,并將接收的指令下發給所屬的分布式數據庫系統內的各數據節點;
[0148]S1103:各數據節點在接收到數據加載指令后,查詢所述數據庫系統的外表中記錄的加載服務器的地址,連接加載服務器,并向連接的加載服務器發送數據請求消息;
[0149]在具體實施中,針對一個數據節點,若該數據節點確定當前為其提供數據的加載服務器分配數據的速率低于設定閾值,可以重新連接其它的加載服務器下載數據,以提高數據下載效率;由于各加載服務器中存儲的為同一個數據文件,該數據節點在重新連接其它的加載服務器下載數據時,需要同時向該重新連接的加載服務器發送已下載數據的文件偏移量信息,以使該重新連接的加載服務器根據該文件偏移量信息,確定分配給該數據節點的數據。
[0150]S1104:各加載服務器在接收到數據節點的數據請求消息后,從預先確定的該數據節點對應的數據組中選取一個數據塊發送給該數據節點;
[0151]在具體實施中,各加載服務器需要根據數據節點的個數M,將存儲的數據文件劃分為M個數據組,每個數據組對應一個數據節點,并將每個數據組劃分為多個數據塊,在為一個數據節點分配數據時,從對應該數據節點的數據組中按數據的邏輯順序,選擇一個數據塊發送給該數據節點;
[0152]在具體實施中,當加載服務器發現某個數據節點處理數據的速率較快時,可以調整已劃分的每個數據組的數據量,為該數據節點分配較多的數據。
[0153]S1105:各數據節點確定接收的數據塊中每條邏輯記錄所屬的數據節點,針對其中任意一條邏輯記錄,若確定該條邏輯記錄屬于本節點,則將該條邏輯記錄存儲在本地,若確定該條邏輯記錄屬于其他數據節點,則將該條邏輯記錄轉發給其它數據節點;
[0154]S1106:各數據節點在從為數據庫系統提供數據的所有的加載服務器中都無法取到數據時,確定完成數據加載,并將數據加載完成的信息反饋給主節點;
[0155]SI 107:主節點將數據加載完成的信息通知給用戶。
[0156]基于同一發明構思,本發明實施例中還提供了一種與數據加載方法對應的數據加載裝置,由于該裝置解決問題的原理與本發明實施例數據加載方法相似,因此該裝置的實施可以參見方法的實施,重復之處不再贅述。
[0157]如圖12所示,為本發明實施例一提供的數據加載裝置示意圖,該裝置應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,所述裝置設置于每個數據節點中,所述數據庫系統外設置有加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該裝置包括:
[0158]獲取模塊121,用于在接收到所屬的數據庫系統的主節點發送的數據加載指令后,從加載服務器中獲取數據塊,并將獲取的數據塊傳輸至檢測模塊122 ;
[0159]檢測模塊122,用于檢測所述獲取模塊121獲取的數據塊中每條邏輯記錄所屬的數據節點;
[0160]處理模塊123,用于針對數據塊中的任意一條邏輯記錄,在所述檢測模塊122檢測到該條邏輯記錄屬于本節點后,將該條邏輯記錄存儲在本地,在檢測到該條邏輯記錄屬于所述數據庫系統的其它數據節點后,將該條邏輯記錄轉發給所述其它數據節點。
[0161]可選地,所述獲取模塊121具體用于:
[0162]至少一次向多個加載服務器中的第一加載服務器發送數據請求消息,每次接收所述第一加載服務器分配的一個數據塊;若確定所述第一加載服務器分配數據塊的速率低于設定閾值,則在將最近一次獲取的數據塊處理完畢后,至少一次向第二加載服務器發送數據請求消息,每次接收所述第二加載服務器分配的一個數據塊。
[0163]可選地,所述獲取模塊121具體用于:
[0164]確定第一次向所述第二加載服務器發送的數據請求消息,所述確定的數據請求消息中包括已獲取的數據塊對應的文件偏移量信息,向所述第二加載服務器發送確定的所述數據請求消息,以使所述第二加載服務器根據接收的數據請求消息中包括的所述文件偏移量信息確定需要分配給所述第一數據節點的數據塊;其中,所述第一加載服務器中存儲的數據與所述第二加載服務器中存儲的數據相同,且屬于同一數據文件。
[0165]如圖13所示,為本發明實施例二提供的數據加載裝置示意圖,該裝置應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,該裝置設置于加載服務器中,所述加載服務器用于為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該裝置包括:
[0166]接收模塊131,用于接收并存儲需要提供給數據庫系統內的數據節點的數據,并將接收的數據傳輸至劃分模塊132 ;
[0167]劃分模塊132,用于將接收模塊131接收的數據劃分為多個數據塊,并將劃分的數據塊傳輸至分配模塊133 ;
[0168]分配模塊133,用于在接收到所述數據庫系統內的多個數據節點根據所述主節點的指示發送的數據請求消息后,分別基于劃分模塊132劃分的數據塊為所述多個數據節點中的每個數據節點分配不同的數據塊,以使每個數據節點在獲取數據塊后,將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
[0169]可選地,所述接收模塊131接收并存儲的數據與為所述數據庫系統內的數據節點提供數據塊的其它加載服務器接收并存儲的數據不同;所述劃分模塊132劃分的每個數據塊中的數據是行完整的。
[0170]可選地,所述接收模塊131接收并存儲的數據與為所述數據庫系統內的數據節點提供數據塊的其它加載服務器接收并存儲的數據相同,且屬于同一個數據文件;
[0171]所述分配模塊133具體用于:針對一個數據節點,若該數據節點在向所述第一加載服務器發送數據請求消息之前,已從其它加載服務器獲取了數據塊,則根據該數據節點發送的文件偏移量信息,確定需要發送給該數據節點的數據塊。
[0172]可選地,所述劃分模塊132具體用于:根據所述數據庫系統內的數據節點的個數M,將存儲的數據劃分為M個數據組,并將每個數據組中的數據劃分為多個數據塊;其中,M為正整數,每個數據組對應一個數據節點;
[0173]所述分配模塊133具體用于:針對一個數據節點,從對應該數據節點的數據組中選擇一個數據塊分配給該數據節點。
[0174]可選地,所述劃分模塊132還用于:
[0175]所述第一加載服務器根據不同數據節點的數據處理速率的不同,調整劃分的每個數據組的數據量。
[0176]如圖14所示,為本發明實施例三提供的數據加載裝置示意圖,該裝置應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,所述裝置設置于所述主節點中;所述數據庫系統外設置有加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該裝置包括:
[0177]接收模塊141,用于接收數據加載指令,并將接收的所述數據加載指令傳輸至發送模塊142 ;[0178]發送模塊142,用于將所述數據加載指令發送給所屬的數據庫系統內的每個數據節點,指示所述每個數據節點從加載服務器中獲取數據塊,并將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
[0179]本領域內的技術人員應明白,本發明的實施例可提供為方法、系統、或計算機程序產品。因此,本發明可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
[0180]本發明是參照根據本發明實施例的方法、裝置(系統)、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0181]這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0182]這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0183]盡管已描述了本發明的優選實施例,但本領域內的技術人員一旦得知了基本創造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優選實施例以及落入本發明范圍的所有變更和修改。
[0184]顯然,本領域的技術人員可以對本發明進行各種改動和變型而不脫離本發明的精神和范圍。這樣,倘若本發明的這些修改和變型屬于本發明權利要求及其等同技術的范圍之內,則本發明也意圖包含這些改動和變型在內。
【權利要求】
1.一種數據加載方法,該方法應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,其特征在于,采用加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該方法包括: 第一數據節點在接收到所屬的數據庫系統的主節點發送的數據加載指令后,從加載服務器中獲取數據塊; 所述第一數據節點檢測獲取的數據塊中每條邏輯記錄所屬的數據節點; 針對數據塊中的任意一條邏輯記錄,所述第一數據節點在檢測到該條邏輯記錄屬于本節點后,將該條邏輯記錄存儲在本地,在檢測到該條邏輯記錄屬于所述數據庫系統的其它數據節點后,將該條邏輯記錄轉發給所述其它數據節點。
2.如權利要求1所述的方法,其特征在于,所述第一數據節點從加載服務器中獲取數據塊,包括: 所述第一數據節點至少一次向多個加載服務器中的第一加載服務器發送數據請求消息,每次接收所述第一加載服務器分配的一個數據塊; 若所述第一數據節點確定所述第一加載服務器分配數據塊的速率低于設定閾值,則在將最近一次獲取的數據塊處理完畢后,至少一次向第二加載服務器發送數據請求消息,每次接收所述第二加載服務器分配的一個數據塊。
3.如權利要求2所述 的方法,其特征在于,所述第一數據節點至少一次向所述第二加載服務器發送數據請求消息, 包括: 所述第一數據節點確定第一 次 向所述第二加載服務器發送的數據請求消息;所述確定的數據請求消息中包括已獲取的數據塊對應的文件偏移量信息; 所述第一數據節點向所述第二加載服務器發送確定的所述數據請求消息,以使所述第二加載服務器根據接收的數據請求消息中包括的所述文件偏移量信息確定需要分配給所述第一數據節點的數據塊; 其中,所述第一加載服務器中存儲的數據與所述第二加載服務器中存儲的數據相同,且屬于同一數據文件。
4.一種數據加載方法,該方法應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,其特征在于,采用加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該方法包括: 第一加載服務器接收并存儲需要提供給數據庫系統內的數據節點的數據; 所述第一加載服務器將接收的數據劃分為多個數據塊; 所述第一加載服務器在接收到所述數據庫系統內的多個數據節點根據所述主節點的指示發送的數據請求消息后,分別基于劃分的數據塊為所述多個數據節點中的每個數據節點分配不同的數據塊,以使每個數據節點在獲取數據塊后,將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
5.如權利要求4所述的方法,其特征在于,所述第一加載服務器接收并存儲的數據與其它為所述數據庫系統內的數據節點提供數據塊的加載服務器接收并存儲的數據不同;所述第一加載服務器劃分的每個數據塊中的數據是行完整的。
6.如權利要求4所述的方法,其特征在于,所述第一加載服務器接收并存儲的數據與其它為所述數據庫系統內的數據節點提供數據塊的加載服務器接收并存儲的數據相同,且屬于同一個數據文件; 所述第一加載服務器分別為所述多個數據節點中的每個數據節點分配不同的數據塊之前,還包括: 針對一個數據節點,若該數據節點在向所述第一加載服務器發送數據請求消息之前,已從其它加載服務器獲取了數據塊,則所述第一加載服務器根據該數據節點發送的文件偏移量信息,確定需要發送給該數據節點的數據塊。
7.如權利要求6所述的方法,其特征在于,所述第一加載服務器將接收的數據劃分為多個數據塊,包括: 所述第一加載服務器根據所述數據庫系統內的數據節點的個數M,將存儲的數據劃分為M個數據組,并將每個數據組中的數據劃分為多個數據塊;其中,M為正整數,每個數據組對應一個數據節點; 所述第一加載服務器分別為所述多個數據節點中的每個數據節點分配不同的數據塊,包括: 針對一個數據節點,所述第一加載服務器從對應該數據節點的數據組中選擇一個數據塊分配給該數據節點。
8.如權利要求7所述的方法,其特征在于,所述第一加載服務器將存儲的數據劃分為M個數據組之后,還包括: 所述第一加載服務器根據不同數據節點的數據處理速率的不同,調整劃分的每個數據組的數據量。
9.一種數據加載方法,該方法應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,其特征在于,采用加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該方法包括: 主節點接收數據加載指令; 所述主節點將所述數據加載指令發送給所屬的數據庫系統內的每個數據節點,指示所述每個數據節點從加載服務器中獲取數據塊,并將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
10.一種數據加載裝置,該裝置應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,其特征在于,所述裝置設置于每個數據節點中,所述數據庫系統外設置有加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該裝置包括: 獲取模塊,用于在接收到所屬的數據庫系統的主節點發送的數據加載指令后,從加載服務器中獲取數據塊,并將獲取的數據塊傳輸至檢測模塊; 檢測模塊,用于檢測所述獲取模塊獲取的數據塊中每條邏輯記錄所屬的數據節點; 處理模塊,用于針對數據塊中的任意一條邏輯記錄,在所述檢測模塊檢測到該條邏輯記錄屬于本節點后,將該條邏輯記錄存儲在本地,在檢測到該條邏輯記錄屬于所述數據庫系統的其它數據節點后,將該條邏輯記錄轉發給所述其它數據節點。
11.如權利要求10所述的裝置,其特征在于,所述獲取模塊具體用于: 至少一次向多個加載服務器中的第一加載服務器發送數據請求消息,每次接收所述第一加載服務器分配的一個數據塊;若確定所述第一加載服務器分配數據塊的速率低于設定閾值,則在將最近一次獲取的數據塊處理完畢后,至少一次向第二加載服務器發送數據請求消息,每次接收所述第二加載服務器分配的一個數據塊。
12.如權利要求11所述的裝置,其特征在于,所述獲取模塊具體用于: 確定第一次向所述第二加載服務器發送的數據請求消息,所述確定的數據請求消息中包括已獲取的數據塊對應的文件偏移量信息,向所述第二加載服務器發送確定的所述數據請求消息,以使所述第二加載服務器根據接收的數據請求消息中包括的所述文件偏移量信息確定需要分配給所述第一數據節點的數據塊;其中,所述第一加載服務器中存儲的數據與所述第二加載服務器中存儲的數據相同,且屬于同一數據文件。
13.一種數據加載裝置,該裝置應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,其特征在于,該裝置設置于加載服務器中,所述加載服務器用于為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該裝置包括: 接收模塊,用于接收并存儲需要提供給數據庫系統內的數據節點的數據,并將接收的數據傳輸至劃分模塊; 劃分模塊,用于將接收模塊接收的數據劃分為多個數據塊,并將劃分的數據塊傳輸至分配模塊; 分配模塊,用于在接收到所述數據庫系統內的多個數據節點根據所述主節點的指示發送的數據請求消息后,分別基于劃分 模塊劃分的數據塊為所述多個數據節點中的每個數據節點分配不同的數據塊,以使每個數據節點在獲取數據塊后,將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬的數據節點。
14.如權利要求13所述的裝置,其特征在于,所述接收模塊接收并存儲的數據與為所述數據庫系統內的數據節點提供數據塊的其它加載服務器接收并存儲的數據不同;所述劃分模塊劃分的每個數據塊中的數據是行完整的。
15.如權利要求13所述的裝置,其特征在于,所述接收模塊接收并存儲的數據與為所述數據庫系統內的數據節點提供數據塊的其它加載服務器接收并存儲的數據相同,且屬于同一個數據文件; 所述分配模塊具體用于:針對一個數據節點,若該數據節點在向所述第一加載服務器發送數據請求消息之前,已從其它加載服務器獲取了數據塊,則根據該數據節點發送的文件偏移量信息,確定需要發送給該數據節點的數據塊。
16.如權利要求15所述的裝置,其特征在于,所述劃分模塊具體用于:根據所述數據庫系統內的數據節點的個數M,將存儲的數據劃分為M個數據組,并將每個數據組中的數據劃分為多個數據塊;其中,M為正整數,每個數據組對應一個數據節點; 所述分配模塊具體用于:針對一個數據節點,從對應該數據節點的數據組中選擇一個數據塊分配給該數據節點。
17.如權利要求16所述的裝置,其特征在于,所述劃分模塊還用于:所述第一加載服務器根據不同數據節點的數據處理速率的不同,調整劃分的每個數據組的數據量。
18.一種數據加載裝置,該裝置應用于數據庫系統中數據的加載,該數據庫系統包括多個數據節點和管理各數據節點的主節點,其特征在于,所述裝置設置于所述主節點中;所述數據庫系統外設置有加載服務器為所述數據庫系統提供數據塊,所述數據塊為包括多條邏輯記錄的數據傳輸單元,其中每條邏輯記錄對應數據庫中存儲的一行數據,該裝置包括: 接收模塊,用于接收數據加載指令,并將接收的所述數據加載指令傳輸至發送模塊;發送模塊,用于將所述數據加載指令發送給所屬的數據庫系統內的每個數據節點,指示所述每個數據節點從加載服務器中獲取數據塊,并將獲取的數據塊中的每條邏輯記錄分配到該條邏輯記錄所屬 的數據節點。
【文檔編號】G06F17/30GK103544285SQ201310516735
【公開日】2014年1月29日 申請日期:2013年10月28日 優先權日:2013年10月28日
【發明者】楊卓慧 申請人:華為技術有限公司