一種分布式系統中的數據處理方法及計算節點的制作方法
【專利摘要】本發明公開了一種分布式系統中的數據處理方法,用于解決在分布式系統中進行數據查詢時會造成內存浪費的技術問題。所述方法包括:接收所述主節點發送的第一任務;所述第一任務用于讀取第一數據;確定所述第一數據是否存儲在公共內存中;所述公共內存為所述第一從節點的任意一個線程池均能夠訪問的內存;若所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中;或,若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據;從所述公共內存中讀取所述第一數據。本發明還公開了相應的計算節點。
【專利說明】
一種分布式系統中的數據處理方法及計算節點
技術領域
[0001]本發明涉及分布式系統技術領域,特別涉及一種分布式系統中的數據處理方法及計算節點。
【背景技術】
[0002]在分布式系統中,主節點往往會向從節點發起一些查詢從節點中的數據表的任務,為了實現這樣的功能,可以將大數據計算框架應用到分布式系統中,比如,MapReduce(一種編程模型)、Spark(—種基于內存的分布式計算框架),等等。目前,很大一部分的查詢任務都需要引用或參考相同的數據表,那么在執行不同的查詢任務時,可能會重復使用同一個數據表。
[0003]現有技術中,每執行一次查詢任務,就需要將待查詢的數據表加載到內存中,也就是說,如果有多個查詢任務都針對的是同一個數據表,那么在執行每個查詢任務時都需要在內存中加載一份同樣的數據表,在查詢任務較多時,內存中可能會加載大量的相同的數據表,造成了內存的浪費。
【發明內容】
[0004]本發明實施例提供一種分布式系統中的數據處理方法及計算節點,用于解決在分布式系統中進行數據查詢時會造成內存浪費的技術問題。
[0005]第一方面,提供一種分布式系統中的數據處理方法,應用于第一從節點中,所述分布式系統包括主節點和多個從節點,所述第一從節點為所述分布式系統中的任意一個從節點,所述方法包括:
[0006]接收所述主節點發送的第一任務;所述第一任務用于讀取第一數據;
[0007]確定所述第一數據是否存儲在公共內存中;所述公共內存為所述第一從節點的任意一個線程池均能夠訪問的內存;
[0008]若所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中;或,若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據;
[0009 ]從所述公共內存中讀取所述第一數據。
[0010]可選的,
[0011 ]在所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中之后,還包括:記錄所述第一數據在所述公共內存中的地址;或,若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據,包括:若所述第一數據存儲在所述公共內存中,則獲取所述第一數據在所述公共內存中的地址;
[0012]讀取所述第一數據,包括:
[0013 ]根據所述第一數據在所述公共內存中的地址,讀取所述第一數據。
[0014]可選的,
[0015]確定所述第一數據是否存儲在公共內存中,包括:
[0016]查詢是否記錄了已加載到所述公共內存中的數據在所述公共內存中的地址與所述第一數據的標識的對應關系,所述第一數據的標識用于指示所述第一數據;
[0017]若所述第一數據未存儲在所述公共內存中,則將所述第一數據從所述存儲設備加載到所述公共內存中,并記錄所述第一數據在所述公共內存中的地址,包括:若未記錄所述第一數據的標識,則將所述第一數據從所述存儲設備加載到所述公共內存中,并記錄所述第一數據的標識及所述第一數據在所述公共內存中的地址的對應關系;或,若所述第一數據存儲在所述公共內存中,則獲取所述第一數據在所述公共內存中的地址,包括:若記錄了所述第一數據的標識,則根據所述第一數據的標識獲取對應的所述第一數據在所述公共內存中的地址。
[0018]可選的,所述方法還包括:
[0019]若所述記錄信息中記錄的標識的數量超過第一預設值,則基于所述記錄信息,確定訪問次數少的前M個標識對應的M個數據;其中,M為正整數;
[0020]釋放所述M個數據占用的全部內存。
[0021]可選的,所述方法還包括:
[0022]若所述記錄信息中記錄的標識的數量超過第二預設值,則基于所述記錄信息,分別確定訪問所述記錄信息包括的每個標識的線程池的數量,并確定訪問的線程池的數量少的前N個標識對應的N個數據;其中4為正整數;
[0023 ]釋放所述N個數據占用的全部內存。
[0024]第二方面,提供一種計算節點,應用于分布式系統中,所述計算節點包括:
[0025]存儲器,包括公共內存;所述公共內存為所述計算節點的任意一個線程池均能夠訪問的內存;
[0026]處理器,與所述存儲器連接,用于;
[0027]接收所述分布式系統中的另一計算節點發送的第一任務;所述第一任務用于讀取第一數據;
[0028]確定所述第一數據是否存儲在所述公共內存中;
[0029]若所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中;或,若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據;從所述公共內存中讀取所述第一數據。
[0030]可選的,所述處理器還用于:
[0031]在所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中之后,記錄所述第一數據在所述公共內存中的地址;或,若所述第一數據存儲在所述公共內存中,則獲取所述第一數據在所述公共內存中的地址;
[0032 ]根據所述第一數據在所述公共內存中的地址,讀取所述第一數據。
[0033]可選的,所述處理器用于:
[0034]查詢是否記錄了所述第一數據的標識,所述第一數據的標識用于指示所述第一數據;
[0035]若所述第一數據未存儲在所述公共內存中,則將所述第一數據從所述存儲設備加載到所述公共內存中,并記錄所述第一數據在所述公共內存中的地址,包括:若未記錄所述第一數據的標識,則將所述第一數據從所述存儲設備加載到所述公共內存中,并記錄所述第一數據的標識及所述第一數據在所述公共內存中的地址;或,若所述第一數據存儲在所述公共內存中,則獲取所述第一數據在所述公共內存中的地址,包括:若記錄了所述第一數據的標識,則根據所述第一數據的標識獲取對應的所述第一數據在所述公共內存中的地址。
[0036]可選的,所述處理器還用于:
[0037]若記錄信息中記錄的標識的數量超過第一預設值,則基于所述記錄信息,確定訪問次數少的前M個標識對應的M個數據;其中,所述記錄信息用于記錄已加載到所述公共內存中的數據的標識與已加載到所述公共內存中的數據在所述公共內存中的地址之間的對應關系;M為正整數;
[0038]釋放所述M個數據占用的全部內存。
[0039]可選的,所述處理器還用于:
[0040]若記錄信息中記錄的標識的數量超過第二預設值,則基于所述記錄信息,分別確定訪問所述記錄信息包括的每個標識的線程池的數量,并確定訪問的線程池的數量少的前N個標識對應的N個數據;其中,所述記錄信息用于記錄已加載到所述公共內存中的數據的標識與已加載到所述公共內存中的數據在所述公共內存中的地址之間的對應關系;N為正整數;
[0041]釋放所述N個數據占用的全部內存。
[0042]第三方面,提供另一種計算節點,應用于分布式系統中,所述計算節點包括:
[0043]接收模塊,用于接收所述分布式系統中的另一計算節點發送的第一任務;所述第一任務用于讀取第一數據;
[0044]第一確定模塊,用于確定所述第一數據是否存儲在公共內存中;所述公共內存為所述計算節點的任意一個線程池均能夠訪問的內存;
[0045]加載模塊,用于若所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中;或,
[0046]第二確定模塊,用于若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據;
[0047]讀取模塊,用于從所述公共內存中讀取所述第一數據。
[0048]在分布式系統中,從節點在接收主節點發送的讀取第一數據的任務后,可以先在公共內存中確定是否存儲了第一數據,如果公共內存中沒有存儲第一數據,則可以從存儲設備中將第一數據加載到公共內存中再進行讀取,如果公共內存中存儲了第一數據,就可以直接從公共內存中讀取第一數據,無需再重新加載。通過這樣的方式,從節點無需在每次接收到讀取數據的任務時都將數據加載到內存,減小了加載數據的工作量,節省了時間,同時,同一個數據可能只需在公共內存中存儲一份,只要是讀取該數據的任務都能夠從公共內存直接讀取,節省了內存的空間,且節省出的內存空間可以用于存儲其他的數據,也提高了內存的利用率。
【附圖說明】
[0049]圖1為本發明實施例中分布式系統中的數據處理方法的流程圖;
[0050]圖2為本發明實施例中計算節點的結構示意圖;
[0051]圖3為本發明實施例中計算節點的結構框圖。
【具體實施方式】
[0052]為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0053]本發明實施例中的主節點和從節點可以是相同或不同的電子設備,例如,主節點和從節點都可以是服務器,或者,主節點可以是PC(個人計算機),從節點可以是服務器,或者,主節點可以是服務器,從節點可以是PC,等等,本發明對此不作限制。
[0054]下面結合附圖對本發明優選的實施方式進行詳細說明。
[0055]請參見圖1,本發明實施例提供一種分布式系統中的數據處理方法,該分布式系統包括主節點和多個從節點,該方法可以應用于第一從節點,第一從節點可以是該分布式系統中的任意一個從節點,該方法的流程描述如下。
[0056]步驟101:接收主節點發送的第一任務;第一任務用于讀取第一數據;
[0057]步驟102:確定第一數據是否存儲在公共內存中;公共內存為第一從節點的任意一個線程池均能夠訪問的內存;其中,若第一數據未存儲在公共內存中,則執行步驟103,若第一數據存儲在公共內存中,則執行步驟104;
[0058]步驟103:若第一數據未存儲在公共內存中,則將第一數據從存儲設備加載到公共內存中;
[0059]步驟104:若第一數據存儲在公共內存中,則在公共內存中確定第一數據;
[0060]步驟105:從公共內存中讀取第一數據。
[0061]本發明實施例中,分布式系統可以包括主節點和多個從節點,主節點的數量可以是一個也可以是多個,一個主節點可以對應多個從節點,至于一個主節點對應多少個從節點,本發明實施例不作限定。其中,主節點可以向從節點發送任務,從節點可以執行這些任務,并可以將執行任務后得到的結果返回給主節點。
[0062]第一數據可以是存儲在第一從節點中的任意一個數據,對于第一數據的類型本發明實施例不作限定,只要是存儲在第一從節點中的數據都可以是本發明實施例中的第一數據。例如第一數據可以是數據表類型的數據,例如可以是一個完整的數據表,或者也可以是一個數據表中的一個或多個表項,或者第一數據也可以是其他類型的數據。
[0063]當主節點需要從第一從節點中讀取第一數據時,可以發送用于讀取第一數據的任務給第一從節點,例如將該任務稱為第一任務,第一從節點可以通過第一從節點的任意一個線程池來執行主節點發送的第一任務。
[0064]可選的,可以在第一從節點的內存中設置公共內存,公共內存可以占用第一從節點的全部內存空間,或者也可以占用第一從節點的部分內存空間。第一從節點的任意一個線程池都能夠訪問存儲在公共內存中的數據,例如,在同一時刻可以允許一個線程池訪問公共內存,或者在同一時刻也可以允許多個線程池訪問公共內存,本發明實施例對此不作限定。對于公共內存的大小可根據需要設定,例如,第一從節點總共有4GB的內存,可以設置其中的IGB為公共內存。
[0065]第一從節點在接收第一任務之后,可以首先確定要讀取的第一數據是否存儲在公共內存中,對于如何確定第一數據有沒有存儲在公共內存中,本發明實施例不作限定。例如,可以通過記錄信息來記錄已加載到公共內存中的數據的標識與已加載到公共內存中的數據在公共內存中的地址之間的對應關系。
[0066]記錄信息可以用來記錄公共內存中已經加載了哪些數據,以及這些數據在公共內存中的地址,第一從節點在接收到讀取第一數據的任務時,可以在記錄信息中進行查詢,以確定公共內存中是否已經加載了第一數據。對于記錄信息的類型,本發明實施例對此不作限定,例如,記錄信息的類型可以是數據表,那么用于存儲記錄信息的數據表中可以包括至少一個表項,其中每個表項可以用于記錄一個已加載到公共內存中的數據的信息,例如可以記錄該數據的標識,以及可以記錄該數據在公共內存中的地址,等等。或者,也可以通過其他的方式記載公共內存中存儲了哪些數據。
[0067]可選的,若確定第一數據未存儲在公共內存中,則第一從節點可以從存儲了第一數據的存儲設備中將所述第一數據加載到公共內存中,并且第一從節點可以記錄第一數據在公共內存中的地址,以便于在公共內存中查詢第一數據。或者,若確定第一數據存儲在公共內存中,第一從節點可以直接獲取第一數據在公共內存中的地址,從而可以根據第一數據在公共內存中的地址從公共內存中讀取第一數據。
[0068]根據第一數據是否存儲在公共內存中,可能有以下幾種不同的讀取第一數據的方式。
[0069]第一種方式:公共內存中沒有存儲要讀取的第一數據,那么第一從節點有可能是第一次接收到讀取第一數據的任務,或者可能是在公共內存被清理之后,第一從節點是第一次接收到讀取第一數據的任務。這種情況下,需要第一從節點從存儲設備中將第一數據加載到公共內存中,以便能夠讀取第一數據。可選的,在將第一數據加載到公共內存中之后,還可以記錄第一數據在公共內存中的地址,以便下一次接收到要讀取第一數據的任務時能夠根據記錄的地址直接在公共內存中找到并讀取第一數據。
[0070]例如,第一從節點接收主節點發送的讀取數據I的任務,第一從節點確定數據I沒有存儲在公共內存中,那么第一從節點可以從存儲設備,比如硬盤中將數據I加載到公共內存中,還可以記錄數據I在公共內存中的地址,比如可以記錄數據I在公共內存中的地址為地址I。
[0071]第二種方式:公共內存中存儲了要讀取的第一數據,也就是說,第一數據之前已經被讀取過,那么在公共內存中可能已經存儲了第一數據以及存儲了第一數據在公共內存中的地址,那么第一從節點可以根據第一數據的地址,在公共內存中找到并讀取第一數據。
[0072]例如,第一從節點接收主節點發送的讀取數據I的任務,第一從節點確定數據I存儲在公共內存中,第一從節點可以獲取數據I在公共內存中的地址,比如為地址1,根據地址I在公共內存中找到并讀取數據I。
[0073]通過以上的方式,第一從節點只有在初次讀取某一數據的時候才需要將該數據從存儲設備加載到公共內存,再次讀取的時候都能過從公共內存中直接讀取,多次讀取同一數據時,省去了每次都要重新加載該數據的步驟,提升了第一從節點的響應速度,且對于同樣的數據,公共內存中只需存儲一份,節省了內存空間。
[0074]可選的,可以通過查詢是否記錄了第一數據的標識確定第一數據是否存儲在公共內存中,其中第一數據的標識可以用于指示第一數據,若未記錄第一數據的標識,那么可以將第一數據從存儲設備加載到公共內存中,并記錄第一數據的標識及第一數據在公共內存中的地址,或,若記錄了第一數據的標識,那么可以根據第一數據的標識獲取對應的第一數據在公共內存中的地址。
[0075]在公共內存中,可能存儲了很多的數據,每一個數據可能有對應的標識,每個標識可以用于指示一個數據,例如標識可以是數據的名稱,或者可以是其他用于標識數據的信息。對于標識的表現形式,本發明實施例不作限定,例如,可以通過字符來表示,也可以通過數字編號來表示,等等,只要能夠唯一指示對應的數據的,都可以是本發明實施例中的數據的標識。
[0076]第一從節點可以在公共內存中記錄存儲在公共內存中的每一個數據的標識以及對應的數據在公共內存中的地址,標識和地址可以一一對應,只要記錄了一個數據的標識,那么也就記錄了這個數據在公共內存中的地址。可以通過查找公共內存中是否記錄了第一數據的標識來確定第一數據是否存儲在公共內存中,如果記錄了第一數據的標識,則表示公共內存中存儲了第一數據,那么可以直接獲取記錄的第一數據的地址,或者,如果沒有記錄第一數據的標識,則表示公共內存中沒有存儲第一數據,那么可以將第一數據加載到公共內存中,并記錄第一數據在公共內存中的地址,以便下次讀取第一數據時能夠直接讀取。
[0077]例如,第一從節點接收到主節點發送的用于讀取數據I的任務,第一從節點可以首先查詢公共內存中是否記錄了數據I的標識,比如數據I的標識可以是字符信息“數據I”,如果查詢到公共內存中記錄了數據I的標識,那么可以直接獲取數據I的標識所對應的地址,根據地址就能夠直接從公共內存讀取數據I。
[0078]或者例如,第一從節點接收到主節點發送的用于讀取數據2的任務,第一從節點可以首先查詢公共內存中是否記錄了數據2的標識,比如數據2的標識可以是字符信息“數據2”,如果沒有查詢到數據2的標識,那么可能是第一次接收到讀取用于數據2的任務,那么第一從節點可以將數據2從存儲設備中加載到公共內存中,并記錄數據2的標識以及數據2在公共內存中的地址。
[0079]通過為數據設置標識的方式,第一從節點可以較為方便準確地確定要讀取的數據是否已經存儲在公共內存中,設備的信息處理能力較強。
[0080]可選的,若記錄信息中記錄的標識的數量超過第一預設值,那么可以基于記錄信息,確定訪問次數少的前M個標識對應的M個數據,并釋放M個數據對應的全部內存。
[0081]對于第一預設值具體是多少,本發明實施例不作限定,可以是在電子設備出廠時設置好的,也可以是由用戶自行設定,以及設定之后還能根據需要進行修改。例如,記錄信息的類型可以是數據表,第一預設值比如為1000,那么也就是說如果數據記錄表中的表項大于1000項,則可以認為記錄的標識的數量超過了第一預設值。
[0082]釋放數據對應的內存,可以是刪除數據在記錄信息中的記錄,同時也將數據從公共內存中刪除,或者也可以是其他的釋放內存的方式,本發明實施例對此不作限定。
[0083]在實際使用中,預留給記錄信息的存儲空間可能是有限的,比如記錄信息的類型可以是數據表,比如該數據表最多能夠記錄5000個表項。若記錄信息中記錄的標識的數量超過第一預設值時,有可能記錄信息中記錄的數據已經較多,甚至可能已經沒有空間再記錄新加載到公共內存中的數據,這時可以刪除一些記錄信息中的表項,以便能夠記錄新加載到內存中的數據的信息。對于刪除哪些表項,本發明實施例不作限定,例如可以按照訪問次數對記錄信息中記錄的數據進行排序,然后釋放訪問次數較少的前M個數據對應的內存,對于M的值具體為多少,本發明實施例同樣不作限定,可以是在電子設備出廠時設置好的,也可以是由用戶自行設定,以及設定之后還能根據需要進行修改。
[0084]例如,記錄信息的類型可以是數據表,該數據表中的每個表項都記錄了一個已加載到公共內存的數據的標識,以及該數據在公共內存中的地址,例如第一預設值為5000,M為100,那么在該數據表中記錄的表項超過5000項時,可以確定5000個表項對應的5000個數據的標識的訪問次數,以及確定其中訪問次數少的前100個數據的標識對應的100個數據,并釋放這100個數據對應的全部內存,比如可以從公共內存中刪除這100個數據,以及刪除這100個數據在記錄表中的表項。
[0085]通過以上的方式,在記錄信息中記錄的表項較多的情況下,可以首先釋放訪問次數較少的表項所指示的數據的內存,這些可能是用戶很少使用的數據,即使刪除可能也不會給用戶帶來較大影響,而對于用戶經常讀取的數據,并不會受到影響,依然能夠直接從公共內存中讀取,設備較為智能化。
[0086]可選的,若記錄信息中記錄的標識的數量超過第二預設值,則可以基于記錄信息,分別確定訪問該記錄信息包括的每個標識的線程池的數量,并確定訪問的線程池的數量少的前N個標識對應的N個數據,可以釋放N個數據對應的全部內存。其中,記錄信息可以用于記錄已加載到公共內存中的數據的標識與已加載到公共內存中的數據在公共內存中的地址之間的對應關系,N可以為正整數。
[0087]對于第二預設值具體是多少,本發明實施例不作限定,可以與第一預設值相同,也可以與第一預設值不同,第二預設值同樣可以是在電子設備出廠時設置好的,也可以是由用戶自行設定,以及設定之后還能根據需要進行修改。例如,記錄信息的類型可以是數據表,第二預設值比如為1000,那么也就是說如果該數據表中的表項超過了 1000項,則可以認為記錄的標識的數量超過了第二預設值。
[0088]也就是說,預留給記錄信息的空間可能是有限的,若記錄信息中記錄的標識的數量超過第二預設值,同樣有可能記錄信息中記錄的數據已經較多,甚至可能沒有空間再記錄新加載到公共內存中的數據了,這時可以刪除一些記錄信息中的表項,以便能夠記錄記錄加載到內存中的數據。可以確定訪問該記錄信息包括的每個數據的標識的線程池的數量,基于訪問不同標識的線程池的數量對數據的標識進行排序,可以確定訪問的線程池的數量少的前N個數據的標識,可以直接釋放確定的N個數據的標識對應的數據的內存。對于N的值具體為多少,本發明實施例同樣不作限定,可以是在電子設備出廠時設置好的,也可以是由用戶自行設定,以及設定之后還能根據需要進行修改。
[0089]例如,記錄信息的類型可以是數據表,該數據表中的每個表項都記錄了一個已加載到公共內存的數據的標識,以及該數據在公共內存中的地址,例如第二預設值為5000,N為200,那么可以在該數據表中記錄的表項超過5000項時,可以確定這5000個表項對應的5000個數據的標識中的每個標識分別被多少個線程池訪問過,比如其中的200個數據的標識僅被一個線程池訪問過,其他的數據的標識可能都是被兩個或兩個以上的線程池訪問過,那么可以釋放這200個數據對應的全部內存,比如可以從公共內存中刪除這200個數據,以及刪除這200個數據在記錄表中的表項,或者比如,其中的150個數據的標識被一個線程訪問過,有100個數據的標識被兩個線程池訪問過,其他的數據的標識可能都是被三個或三個以上的線程池訪問過,這種情況下,可以釋放被一個線程池訪問過的150個數據的標識對應的數據占用的內存,以及可以從100個被兩個線程池訪問過的數據的標識中隨機選取50個標識,釋放這50個標識對應的數據占用的內存,或者也可以從100個被兩個線程池訪問過的數據標識中確被定訪問次數少的前50個標識,并釋放這50個標識對應的數據占用的內存,等等。
[0090]由于訪問一個數據的線程池少的時候,可以認為主節點發送的任務中可能只有較少的任務需要訪問該數據,那么可以優先釋放這類數據占用的內存,從而節省內存空間,也不會影響大部分任務的執行,而在執行大多數的任務的時候,依然能夠直接從公共內存中讀取數據,設備較為智能化。
[0091]可選的,第一從節點在接收到主節點發送的第一任務之后,還可以分別為公共內存和執行第一任務的線程池分配資源。
[0092]本發明實施例中,第一從節點在通過線程池執行讀取數據的任務的時候,可以將數據加載到公共內存,因此,對于線程池而言,不需要存儲數據,也就可能并不需要太多的內存空間,但由于線程池在執行任務過程中可能需要進行在存儲設備中查找數據、讀取數據等操作,因此可能需要較多的CPU(Central Processing Unit,中央處理器)資源,因此在分配資源時,可以為線程池分配少量的內存空間,比如分配IMB的內存空間,以及可以為線程池分配較多的處理器資源,比如分配2個CPU。而對于公共內存而言,需要存儲的數據較多,需要處理的數據較少,因此,在分配資源時,可以為公共內存分配較多的內存空間,比如分配IGB的內存空間,以及可以為公共內存分配較少的處理器資源,比如分配I個CPU內核。當然,每個任務可能都需要一個線程池來執行,那么線程池在執行完一個任務之后,可以將該線程池占用的資源全部釋放,以供下一個線程池執行任務時能夠使用。而由于公共內存能夠服務于全部的線程池,不同的線程池在執行不同的任務時有可能都需要訪問公共內存,因此公共內存可以持續占用分配的資源。通過這樣的方式,可以根據使用的需求來分配資源,資源的利用率較高。
[0093]請參見圖2,基于同一發明構思,本發明實施例提供一種計算節點,該計算節點可以是分布式系統包括的任意一個計算節點,例如可以是用來實現圖1所示的方法的從節點。該計算節點可以包括:
[0094]存儲器201,包括公共內存;公共內存為計算節點的任意一個線程池均能夠訪問的內存;
[0095]處理器202,與存儲器201連接,用于:
[0096]接收分布式系統中的另一計算節點發送的第一任務;第一任務用于讀取第一數據;
[0097]確定第一數據是否存儲在公共內存中;
[0098]若第一數據未存儲在公共內存中,則將第一數據從存儲設備加載到公共內存中;或,若第一數據存儲在公共內存中,則在公共內存中確定第一數據;
[0099]從公共內存中讀取第一數據。
[0100]可選的,處理器202還用于:
[0101]在第一數據未存儲在公共內存中,則將第一數據從存儲設備加載到公共內存中之后,記錄第一數據在公共內存中的地址;或,若第一數據存儲在公共內存中,則獲取第一數據在公共內存中的地址;
[0102]根據第一數據在公共內存中的地址,讀取第一數據。
[0103]可選的,處理器202用于:
[0104]查詢是否記錄了第一數據的標識,第一數據的標識用于指示第一數據;
[0105]若第一數據未存儲在公共內存中,則將第一數據從存儲設備加載到公共內存中,并記錄第一數據在公共內存中的地址,包括:若未記錄第一數據的標識,則將第一數據從存儲設備加載到公共內存中,并記錄第一數據的標識及第一數據在公共內存中的地址;或,若第一數據存儲在公共內存中,則獲取第一數據在公共內存中的地址,包括:若記錄了第一數據的標識,則根據第一數據的標識獲取對應的第一數據在公共內存中的地址。
[0106]可選的,處理器202還用于:
[0107]若記錄信息中記錄的標識的數量超過第一預設值,則基于記錄信息,確定訪問次數少的前M個標識對應的M個數據;其中,記錄信息用于記錄已加載到公共內存中的數據的標識與已加載到公共內存中的數據在公共內存中的地址之間的對應關系;M為正整數;
[0108]釋放M個數據占用的全部內存。
[0109]可選的,處理器202還用于:
[0110]若記錄信息中記錄的標識的數量超過第二預設值,則基于記錄信息,分別確定訪問記錄信息包括的每個標識的線程池的數量,并確定訪問的線程池的數量少的前N個標識對應的N個數據;其中,記錄信息用于記錄已加載到公共內存中的數據的標識與已加載到公共內存中的數據在公共內存中的地址之間的對應關系;N為正整數;
[0111]釋放N個數據占用的全部內存。
[0112]請參見圖3,基于同一發明構思,本發明實施例提供另一種計算節點,該計算節點可以是分布式系統包括的任意一個計算節點,例如可以是用來實現圖1所示的方法的從節點。該計算節點可以包括:
[0113]接收模塊301,用于接收分布式系統中的另一計算節點發送的第一任務;第一任務用于讀取第一數據;
[0114]第一確定模塊302,用于確定第一數據是否存儲在公共內存中;公共內存為計算節點的任意一個線程池均能夠訪問的內存;
[0115]加載模塊303,用于若第一數據未存儲在公共內存中,則將第一數據從存儲設備加載到公共內存中;或,
[0116]第二確定模塊304,用于若第一數據存儲在公共內存中,則在公共內存中確定第一數據;
[0117]讀取模塊305,用于從公共內存中讀取第一數據。
[0118]可選的,計算節點還包括:
[0119]記錄模塊,用于在第一數據未存儲在公共內存中,則將第一數據從存儲設備加載到公共內存中之后,記錄第一數據在公共內存中的地址;
[0120]第二確定模塊304用于:
[0121]若第一數據存儲在公共內存中,則獲取第一數據在公共內存中的地址;
[0122]讀取模塊305用于:
[0123]根據第一數據在公共內存中的地址,讀取第一數據。
[0124]可選的,第一確定模塊302用于:
[0125]查詢是否記錄了第一數據的標識,第一數據的標識用于指示第一數據;
[0126]加載模塊303用于:
[0127]若未記錄第一數據的標識,則將第一數據從存儲設備加載到公共內存中,并記錄第一數據的標識及第一數據在公共內存中的地址;或,
[0128]第二確定模塊304用于:
[0129]若記錄了第一數據的標識,則根據第一數據的標識獲取對應的第一數據在公共內存中的地址。
[0130]可選的,計算節點還包括:
[0131]第三確定模塊,用于若記錄信息中記錄的標識的數量超過第一預設值,則基于記錄信息,確定訪問次數少的前M個標識對應的M個數據;其中,記錄信息用于記錄已加載到公共內存中的數據的標識與已加載到公共內存中的數據在公共內存中的地址之間的對應關系;M為正整數;
[0132]第一釋放模塊,用于釋放M個數據占用的全部內存。
[0133]可選的,計算節點還包括:
[0134]第四確定模塊,用于若記錄信息中記錄的標識的數量超過第二預設值,則基于記錄信息,分別確定訪問記錄信息包括的每個標識的線程池的數量,并確定訪問的線程池的數量少的前N個標識對應的N個數據;其中,記錄信息用于記錄已加載到公共內存中的數據的標識與已加載到公共內存中的數據在公共內存中的地址之間的對應關系;N為正整數;
[0135]第二釋放模塊,用于釋放N個數據占用的全部內存。
[0136]本發明實施例中,在分布式系統中,從節點在接收主節點發送的讀取第一數據的任務后,可以先在公共內存中確定是否存儲了第一數據,如果公共內存中沒有存儲第一數據,則可以從存儲設備中將第一數據加載到公共內存中再進行讀取,如果公共內存中存儲了第一數據,就可以直接從公共內存中讀取第一數據,無需再重新加載。通過這樣的方式,從節點無需在每次接收到讀取數據的任務時都將數據加載到內存,減小了加載數據的工作量,節省了時間,同時,同一個數據可能只需在公共內存中存儲一份,只要是讀取該數據的任務都能夠從公共內存直接讀取,節省了內存的空間,且節省出的內存空間可以用于存儲其他的數據,也提高了內存的利用率。
[0137]所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據需要而將上述功能分配由不同的功能模塊完成,即將裝置的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的系統,裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
[0138]在本發明所提供的幾個實施例中,應該理解到,所揭露的裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
[0139]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
[0140]另外,在本申請各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現,也可以采用軟件功能單元的形式實現。
[0141]所述集成的單元如果以軟件功能單元的形式實現并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中。基于這樣的理解,本申請的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)或處理器(processor)執行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、R0M(Read-Only Memory,只讀存儲器)、RAM (Random Access Memory,隨機存取存儲器)、磁碟或者光盤等各種可以存儲程序代碼的介質。
[0142]具體來講,本發明實施例中的一種分布式系統中的數據處理方法對應的計算機程序指令可以被存儲在光盤,硬盤,U盤等存儲介質上,當存儲介質中的與一種分布式系統中的數據處理方法對應的計算機程序指令被一計算節點讀取或被執行時,包括如下步驟:
[0143]接收所述主節點發送的第一任務;所述第一任務用于讀取第一數據;
[0144]確定所述第一數據是否存儲在公共內存中;所述公共內存為所述第一從節點的任意一個線程池均能夠訪問的內存;
[0145]若所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中;或,若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據;
[0146]從所述公共內存中讀取所述第一數據。
[0147]可選的,所述存儲介質中存儲的與步驟:所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中,對應的計算機指令在被執行之后,還包括:記錄所述第一數據在所述公共內存中的地址;或,
[0148]所述存儲介質中存儲的與步驟:若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據,對應的計算機指令在被執行過程中,包括:若所述第一數據存儲在所述公共內存中,則獲取所述第一數據在所述公共內存中的地址;
[0149]所述存儲介質中存儲的與步驟:讀取所述第一數據,對應的計算機指令在被執行過程中,包括:
[0150]根據所述第一數據在所述公共內存中的地址,讀取所述第一數據。
[0151]可選的,所述存儲介質中存儲的與步驟:確定所述第一數據是否存儲在公共內存中,對應的計算機指令在被執行過程中,包括:
[0152]查詢是否記錄了所述第一數據的標識,所述第一數據的標識用于指示所述第一數據;
[0153]所述存儲介質中存儲的與步驟:若所述第一數據未存儲在所述公共內存中,則將所述第一數據從所述存儲設備加載到所述公共內存中,并記錄所述第一數據在所述公共內存中的地址,對應的計算機指令在被執行過程中,包括:若未記錄所述第一數據的標識,則將所述第一數據從所述存儲設備加載到所述公共內存中,并記錄所述第一數據的標識及所述第一數據在所述公共內存中的地址;或,所述存儲介質中存儲的與步驟:若所述第一數據存儲在所述公共內存中,則獲取所述第一數據在所述公共內存中的地址,對應的計算機指令在被執行過程中,包括:若記錄了所述第一數據的標識,則根據所述第一數據的標識獲取對應的所述第一數據在所述公共內存中的地址。
[0154]可選的,所述存儲介質中還存儲另外一些計算機指令,該另外一些計算機指令在被執行過程中,包括:
[0155]若記錄信息中記錄的標識的數量超過第一預設值,則基于所述記錄信息,確定訪問次數少的前M個標識對應的M個數據;其中,所述記錄信息用于記錄已加載到所述公共內存中的數據的標識與已加載到所述公共內存中的數據在所述公共內存中的地址之間的對應關系;M為正整數;
[0156]釋放所述M個數據占用的全部內存。
[0157]可選的,所述存儲介質中還存儲另外一些計算機指令,該另外一些計算機指令在被執行過程中,包括:
[0158]若記錄信息中記錄的標識的數量超過第二預設值,則基于所述記錄信息,分別確定訪問所述記錄信息包括的每個標識的線程池的數量,并確定訪問的線程池的數量少的前N個標識對應的N個數據;其中,所述記錄信息用于記錄已加載到所述公共內存中的數據的標識與已加載到所述公共內存中的數據在所述公共內存中的地址之間的對應關系;N為正整數;
[0159]釋放所述N個數據占用的全部內存。
[0160]以上所述,以上實施例僅用以對本發明的技術方案進行了詳細介紹,但以上實施例的說明只是用于幫助理解本發明的方法及其核心思想,不應理解為對本發明的限制。本技術領域的技術人員在本發明揭露的技術范圍內,可輕易想到的變化或替換,都應涵蓋在本發明的保護范圍之內。
【主權項】
1.一種分布式系統中的數據處理方法,應用于第一從節點中,所述分布式系統包括主節點和多個從節點,所述第一從節點為所述分布式系統中的任意一個從節點,所述方法包括: 接收所述主節點發送的第一任務;所述第一任務用于讀取第一數據; 確定所述第一數據是否存儲在公共內存中;所述公共內存為所述第一從節點的任意一個線程池均能夠訪問的內存; 若所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中;或,若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據; 從所述公共內存中讀取所述第一數據。2.如權利要求1所述的方法,其特征在于, 在所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中之后,還包括:記錄所述第一數據在所述公共內存中的地址;或,若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據,包括:若所述第一數據存儲在所述公共內存中,則獲取所述第一數據在所述公共內存中的地址; 讀取所述第一數據,包括: 根據所述第一數據在所述公共內存中的地址,讀取所述第一數據。3.如權利要求2所述的方法,其特征在于, 確定所述第一數據是否存儲在公共內存中,包括: 查詢是否記錄了所述第一數據的標識,所述第一數據的標識用于指示所述第一數據;若所述第一數據未存儲在所述公共內存中,則將所述第一數據從所述存儲設備加載到所述公共內存中,并記錄所述第一數據在所述公共內存中的地址,包括:若未記錄所述第一數據的標識,則將所述第一數據從所述存儲設備加載到所述公共內存中,并記錄所述第一數據的標識及所述第一數據在所述公共內存中的地址;或,若所述第一數據存儲在所述公共內存中,則獲取所述第一數據在所述公共內存中的地址,包括:若記錄了所述第一數據的標識,則根據所述第一數據的標識獲取對應的所述第一數據在所述公共內存中的地址。4.如權利要求3所述的方法,其特征在于,所述方法還包括: 若記錄信息中記錄的標識的數量超過第一預設值,則基于所述記錄信息,確定訪問次數少的前M個標識對應的M個數據;其中,所述記錄信息用于記錄已加載到所述公共內存中的數據的標識與已加載到所述公共內存中的數據在所述公共內存中的地址之間的對應關系;M為正整數; 釋放所述M個數據占用的全部內存。5.如權利要求3所述的方法,其特征在于,所述方法還包括:若記錄信息中記錄的標識的數量超過第二預設值,則基于所述記錄信息,分別確定訪問所述記錄信息包括的每個標識的線程池的數量,并確定訪問的線程池的數量少的前N個標識對應的N個數據;其中,所述記錄信息用于記錄已加載到所述公共內存中的數據的標識與已加載到所述公共內存中的數據在所述公共內存中的地址之間的對應關系;N為正整數;釋放所述N個數據占用的全部內存。6.—種計算節點,應用于分布式系統中,所述計算節點包括: 存儲器,包括公共內存;所述公共內存為所述計算節點的任意一個線程池均能夠訪問的內存; 處理器,與所述存儲器連接,用于: 接收所述分布式系統中的另一計算節點發送的第一任務;所述第一任務用于讀取第一數據; 確定所述第一數據是否存儲在所述公共內存中; 若所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中;或,若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據; 從所述公共內存中讀取所述第一數據。7.如權利要求6所述的計算節點,其特征在于,所述處理器還用于: 在所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中之后,記錄所述第一數據在所述公共內存中的地址;或,若所述第一數據存儲在所述公共內存中,則獲取所述第一數據在所述公共內存中的地址; 根據所述第一數據在所述公共內存中的地址,讀取所述第一數據。8.如權利要求7所述的計算節點,其特征在于,所述處理器用于: 查詢是否記錄了所述第一數據的標識,所述第一數據的標識用于指示所述第一數據; 若所述第一數據未存儲在所述公共內存中,則將所述第一數據從所述存儲設備加載到所述公共內存中,并記錄所述第一數據在所述公共內存中的地址,包括:若未記錄所述第一數據的標識,則將所述第一數據從所述存儲設備加載到所述公共內存中,并記錄所述第一數據的標識及所述第一數據在所述公共內存中的地址;或,若所述第一數據存儲在所述公共內存中,則獲取所述第一數據在所述公共內存中的地址,包括:若記錄了所述第一數據的標識,則根據所述第一數據的標識獲取對應的所述第一數據在所述公共內存中的地址。9.如權利要求8所述的計算節點,其特征在于,所述處理器還用于: 若記錄信息中記錄的標識的數量超過第一預設值,則基于所述記錄信息,確定訪問次數少的前M個標識對應的M個數據;其中,所述記錄信息用于記錄已加載到所述公共內存中的數據的標識與已加載到所述公共內存中的數據在所述公共內存中的地址之間的對應關系;M為正整數; 釋放所述M個數據占用的全部內存。10.如權利要求8所述的計算節點,其特征在于,所述處理器還用于: 若記錄信息中記錄的標識的數量超過第二預設值,則基于所述記錄信息,分別確定訪問所述記錄信息包括的每個標識的線程池的數量,并確定訪問的線程池的數量少的前N個標識對應的N個數據;其中,所述記錄信息用于記錄已加載到所述公共內存中的數據的標識與已加載到所述公共內存中的數據在所述公共內存中的地址之間的對應關系;N為正整數; 釋放所述N個數據占用的全部內存。11.一種計算節點,應用于分布式系統中,所述計算節點包括: 接收模塊,用于接收所述分布式系統中的另一計算節點發送的第一任務;所述第一任務用于讀取第一數據; 第一確定模塊,用于確定所述第一數據是否存儲在公共內存中;所述公共內存為所述計算節點的任意一個線程池均能夠訪問的內存; 加載模塊,用于若所述第一數據未存儲在所述公共內存中,則將所述第一數據從存儲設備加載到所述公共內存中;或, 第二確定模塊,用于若所述第一數據存儲在所述公共內存中,則在所述公共內存中確定所述第一數據; 讀取模塊,用于從所述公共內存中讀取所述第一數據。
【文檔編號】G06F9/50GK105868023SQ201610173862
【公開日】2016年8月17日
【申請日】2016年3月24日
【發明人】吳磊
【申請人】聯想(北京)有限公司