專利名稱:內(nèi)存對象加載裝置和內(nèi)存對象加載方法
技術領域:
本發(fā)明涉及計算機技術領域,具體而言,涉及一種內(nèi)存對象加載裝置和一種內(nèi)存對象加載方法。
背景技術:
現(xiàn)代管理系統(tǒng)多采用數(shù)據(jù)訪問層的方式,通過ORMapping進行內(nèi)存實體對象的加載和持久化。這種方式帶來的好處是內(nèi)存對象與存儲系統(tǒng)之間有一層數(shù)據(jù)訪問層,解耦了實體對象與存儲系統(tǒng),便于實現(xiàn)存儲系統(tǒng)無關的系統(tǒng)。同時,業(yè)務邏輯層完全面向對象,其內(nèi)存對象具有完整的現(xiàn)實世界對象的完整概念,代碼可讀性和易維護性都更強。目前的對象加載是一種全字段映射的加載,即為了從存儲系統(tǒng)加載一個實體對象,會不論場景加載其所有字段。而特定場景對一個對象的訪問,往往只需要訪問其部分屬性。這就造成了屬性字段的冗余加載,冗余加載的屬性從時間上和空間上都是對特定場景系統(tǒng)性能 的浪費。例如,銷售訂單有100個字段(FrFlOO),銷售訂單提交場景需要訪問其中30個字段(Fl F30),銷售訂單審核需要訪問40個字段(F11 F40),而采用目前的加載方式都會加載100個字段。為避免屬性冗余加載,目前的處理主要方式有(I)直接訪問存儲系統(tǒng)(如SQL查詢的方式),加載相應的數(shù)據(jù)信息。這種方式加載的數(shù)據(jù)是非結構化的,打破了對象的完整定義。(2)定義原始對象類的子屬性集合的類,并建立新的映射關系。這種方式,需要定義大量的子屬性集的類。同時,上述兩種方式在特定場景的不同分支時,都需要修改代碼。例如銷售訂單提交場景,分支I需要訪問30個字段,而在新加分支2需要訪問31個字段時,方式(I)需要調(diào)整SQL查詢;而方式(2)需要調(diào)整子屬性集合的類定義。因此,需要一種內(nèi)存對象加載技術,能夠避免屬性冗余加載,提升系統(tǒng)性能。
發(fā)明內(nèi)容
本發(fā)明正是基于上述問題,提出了一種內(nèi)存對象加載技術,能夠避免屬性冗余加載,實現(xiàn)簡易。有鑒于此,根據(jù)本發(fā)明的一個方面,提供了一種內(nèi)存對象加載裝置,包括讀取單元,在需從存儲系統(tǒng)加載實體對象時,讀取預設的屬性加載關系,其中所述屬性加載對應關系包括不同場景與所述實體對象在所述不同場景下的屬性的對應關系;加載單元,根據(jù)當前場景的所述屬性加載對應關系,從所述存儲系統(tǒng)中獲取所述實體對象在所述當前場景下的屬性的屬性值,以完成所述實體對象的加載。預設了屬性加載關系。在不同場景下,相同的實體對象具有不同的加載方案(即前述屬性加載關系的方案)。在當前場景下,可讀取與當前場景和當前實體對象類型相對應的加載方案,根據(jù)加載方案僅加載需要加載的屬性的屬性值,而不加載非必要屬性的屬性值,這樣就避免了冗余屬性的加載,節(jié)約了內(nèi)存空間的占用。在上述技術方案中,優(yōu)選的,所述讀取單元讀取的所述屬性加載對應關系包括主數(shù)據(jù)關系和明細關系,所述主數(shù)據(jù)關系包括實體對象標識、實體對象類型、場景和是否采用虛加載屬性之間的對應關系,所述明細關系包括實體對象標識、屬性和是否加載屬性之間的對應關系。虛加載屬性即是否要進行本發(fā)明的加載方案,若虛加載屬性為是,則僅加載需要的屬性的屬性值,若虛加載屬性為否,則按照相關技術進行屬性的全部加載。在上述技術方案中,優(yōu)選的,所述加載單元還用于在訪問所述實體對象中的屬性時,若被訪問的屬性未加載相應的屬性值,則補充加載所述實體對象中所有未加載的屬性的屬性值。如果本次訪問的屬性超出了上次訪問的屬性的最大范圍,則需將所有未加載的屬性值均加載,以便能夠訪問到所有屬性的屬性值,避免發(fā)生訪問錯誤。在上述技術方案中,優(yōu)選的,所述加載單元包括標記子單元,為所述所有未加載的屬性中被訪問的屬性添加完善標記;更新子單元,根據(jù)所述完善標記更新所述屬性加載對應關系,將所述實體對象中標記有所述完善標記的屬性的是否加載屬性設置為是。 由于本次訪問超出了上次訪問的屬性的最大范圍,因此需要更新屬性的訪問范圍,將超出部分的屬性對應的虛加載屬性設置為是,完成屬性加載對應關系的更新,逐步完善屬性加載對應關系的明細數(shù)據(jù)。這樣在下次訪問時,可同時加載該超出部分的屬性的屬性值,在保證訪問正確的同時,也保證從存儲系統(tǒng)中讀取盡可能少的信息。在上述技術方案中,優(yōu)選的,所述加載單元還用于在所述實體對象的虛加載屬性為否時,從所述存儲系統(tǒng)中獲取所述實體對象的所有屬性的屬性值。根據(jù)本發(fā)明的又一方面,提供了一種內(nèi)存對象加載方法,包括以下步驟在需從存儲系統(tǒng)加載實體對象時,讀取預設的屬性加載關系,其中所述屬性加載對應關系包括不同場景與所述實體對象在所述不同場景下的屬性的對應關系;根據(jù)當前場景的所述屬性加載對應關系,從所述存儲系統(tǒng)中獲取所述實體對象在所述當前場景下的屬性的屬性值,以完成所述實體對象的加載。預設了屬性加載關系。在不同場景下,相同的實體對象具有不同的加載方案,在當前場景下,可讀取與當前場景和當前實體對象類型相對應的加載方案,根據(jù)加載方案僅加載需要加載的屬性的屬性值,而不加載非必要屬性的屬性值,這樣就避免了冗余屬性的加載,節(jié)約了內(nèi)存空間的占用。在上述技術方案中,優(yōu)選的,所述屬性加載對應關系包括主數(shù)據(jù)關系和明細關系,所述主數(shù)據(jù)關系包括實體對象標識、實體對象類型、場景和是否采用虛加載屬性之間的對應關系,所述明細關系包括實體對象標識、屬性和是否加載屬性之間的對應關系。虛加載屬性即是否要進行本發(fā)明的加載方案,若虛加載屬性為是,則僅加載需要的屬性的屬性值,若虛加載屬性為否,則按照相關技術加載全部屬性的屬性值。在上述技術方案中,優(yōu)選的,進一步可以包括訪問所述實體對象中的屬性,若被訪問的屬性未加載相應的屬性值,則補充加載所述實體對象中所有未加載的屬性的屬性值。如果本次訪問的屬性超出了上次訪問的屬性的最大范圍,則需將所有未加載的屬性值均加載,以便能夠訪問到所有屬性的屬性值,避免發(fā)生訪問錯誤。在上述技術方案中,優(yōu)選的,還可以包括為所述所有未加載的屬性中被訪問的屬性添加完善標記;根據(jù)所述完善標記更新所述屬性加載對應關系,將所述實體對象中標記有所述完善標記的屬性的是否加載屬性設置為是。由于本次訪問超出了上次訪問的屬性的最大范圍,因此需要更新屬性的訪問范圍,將超出部分的屬性對應的是否加載屬性設置為是,完成屬性加載對應關系的更新,逐步完善屬性加載對應關系的明細數(shù)據(jù)。這樣在下次訪問時,可同時加載該超出部分的屬性的屬性值,在保證訪問正確的同時,也保證從存儲系統(tǒng)中讀取盡可能少的信息。在上述任一技術方案中,優(yōu)選的,在所述實體對象的虛加載屬性為否時,從所述存儲系統(tǒng)中獲取所述實體對象的所有屬性的屬性值。本發(fā)明改進了現(xiàn)有實體對象加載技術,減少了冗余加載內(nèi)容,節(jié)約了內(nèi)存空間的占用,進而減少了 IO訪問和網(wǎng)絡傳輸,提升了系統(tǒng)性能。
圖I示出了根據(jù)本發(fā)明的實施例的內(nèi)存對象加載裝置的框圖;圖2示出了根據(jù)本發(fā)明的一個實施例的內(nèi)存對象加載方法的流程圖;圖3示出了根據(jù)本發(fā)明的又一實施例的內(nèi)存對象加載方法的流程圖;圖4示出了根據(jù)本發(fā)明的又一實施例的內(nèi)存對象加載方法的流程圖。
具體實施例方式為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點,下面結合附圖和具體實施方式
對本發(fā)明進行進一步的詳細描述。在下面的描述中闡述了很多具體細節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來實施,因此,本發(fā)明并不限于下面公開的具體實施例的限制。圖I示出了根據(jù)本發(fā)明的實施例的內(nèi)存對象加載裝置的框圖。如圖I所示,根據(jù)本發(fā)明的實施例的內(nèi)存對象加載裝置100包括讀取單元102,在需從存儲系統(tǒng)加載實體對象時,讀取預設的屬性加載關系,其中所述屬性加載對應關系包括不同場景與所述實體對象在所述不同場景下的屬性的對應關系;加載單元104,根據(jù)當前場景的所述屬性加載對應關系,從所述存儲系統(tǒng)中獲取所述實體對象在所述當前場景下的屬性的屬性值,以完成所述實體對象的加載。預設了屬性加載關系。在不同場景下,相同的實體對象具有不同的加載方案,在當前場景下,可讀取與當前場景和當前實體對象類型相對應的加載方案,根據(jù)加載方案僅加載需要加載的屬性的屬性值,而不加載非必要屬性的屬性值,這樣就避免了冗余屬性的加載,節(jié)約了內(nèi)存空間的占用。在上述技術方案中,優(yōu)選的,所述讀取單元102讀取的所述屬性加載對應關系包括主數(shù)據(jù)關系和明細關系,所述主數(shù)據(jù)關系包括實體對象標識、實體對象類型、場景和是否采用虛加載屬性之間的對應關系,所述明細關系包括實體對象標識、屬性和是否加載屬性之間的對應關系。虛加載屬性即是否要進行本發(fā)明的加載方案,若虛加載屬性為是,則僅加載需要的屬性的屬性值,若虛加載屬性為否,則按照相關技術進行屬性的全部加載。
在上述技術方案中,優(yōu)選的,所述加載單元104還用于在訪問所述實體對象中的屬性時,若被訪問的屬性未加載相應的屬性值,則補充加載所述實體對象中所有未加載的屬性的屬性值。如果本次訪問的屬性超出了上次訪問的屬性的最大范圍,則需將所有未加載的屬性值均加載,以便能夠訪問到所有屬性的屬性值,避免發(fā)生訪問錯誤。在上述技術方案中,優(yōu)選的,所述加載單元104包括標記子單元1042,為所述所有未加載的屬性中被訪問的屬性添加完善標記;更新子單元1044,根據(jù)所述完善標記更新所述屬性加載對應關系,將所述實體對象中標記有所述完善標記的屬性對應的是否加載屬性設置為是。由于本次訪問超出了上次訪問的屬性的最大范圍,因此需要更新屬性的訪問范圍,將超出部分的屬性對應的是否加載屬性設置為是,完成屬性加載對應關系的更新,逐步完善屬性加載對應關系的明細數(shù)據(jù)。這樣在下次訪問時,可同時加載該超出部分的屬性的 屬性值,在保證訪問正確的同時,也保證從存儲系統(tǒng)中讀取盡可能少的信息。在上述技術方案中,優(yōu)選的,所述加載單元104還用于在所述實體對象的虛加載屬性為否時,從所述存儲系統(tǒng)中獲取所述實體對象的所有屬性的屬性值。根據(jù)本發(fā)明的內(nèi)存對象加載裝置改進了現(xiàn)有實體對象加載技術,減少了冗余加載內(nèi)容,節(jié)約了內(nèi)存空間的占用,進而減少了 IO訪問和網(wǎng)絡傳輸,提升了系統(tǒng)性能。圖2示出了根據(jù)本發(fā)明的一個實施例的內(nèi)存對象加載方法的流程圖。如圖2所示,根據(jù)本發(fā)明的實施例的內(nèi)存對象加載方法,包括以下步驟步驟202,在需從存儲系統(tǒng)加載實體對象時,讀取預設的屬性加載關系,其中屬性加載對應關系包括不同場景與實體對象在不同場景下的屬性的對應關系;步驟204,根據(jù)當前場景的屬性加載對應關系,從存儲系統(tǒng)中獲取實體對象在當前場景下的屬性的屬性值,以完成實體對象的加載。預設了屬性加載關系,在不同場景下,相同的實體對象具有不同的加載方案,在當前場景下,可讀取與當前場景和當前實體對象類型相對應的加載方案,根據(jù)加載方案僅加載需要加載的屬性的屬性值,而不加載非必要屬性的屬性值,這樣就避免了冗余屬性的加載,節(jié)約了內(nèi)存空間的占用。在上述技術方案中,優(yōu)選的,所述屬性加載對應關系包括主數(shù)據(jù)關系和明細關系,所述主數(shù)據(jù)關系包括實體對象標識、實體對象類型、場景和是否采用虛加載屬性之間的對應關系,所述明細關系包括實體對象標識、屬性和是否加載屬性之間的對應關系。虛加載屬性即是否要進行本發(fā)明的加載方案,若虛加載屬性為是,則僅加載需要的屬性的屬性值,若虛加載屬性為否,則按照相關技術加載全部屬性的屬性值。在上述技術方案中,優(yōu)選的,進一步可以包括訪問所述實體對象中的屬性,若被訪問的屬性未加載相應的屬性值,則補充加載所述實體對象中所有未加載的屬性的屬性值。如果本次訪問的屬性超出了上次訪問的屬性的最大范圍,則需將所有未加載的屬性值均加載,以便能夠訪問到所有屬性的屬性值,避免發(fā)生訪問錯誤。在上述技術方案中,優(yōu)選的,還可以包括為所述所有未加載的屬性中被訪問的屬性添加完善標記;根據(jù)所述完善標記更新所述屬性加載對應關系,將所述實體對象中標記有所述完善標記的屬性的是否加載屬性設置為是。由于本次訪問超出了上次訪問的屬性的最大范圍,因此需要更新屬性的訪問范圍,將超出部分的屬性對應的是否加載屬性設置為是,完成屬性加載對應關系的更新,逐步完善屬性加載對應關系的明細數(shù)據(jù)。這樣在下次訪問時,可同時加載該超出部分的屬性的屬性值,在保證訪問正確的同時,也保證從存儲系統(tǒng)中讀取盡可能少的信息。在上述任一技術方案中,優(yōu)選的,在所述實體對象的虛加載屬性為否時,從所述存儲系統(tǒng)中獲取所述實體對象的所有屬性的屬性值。圖3示出了根據(jù)本發(fā)明的又一實施例的內(nèi)存對象加載方法的流程圖。根據(jù)本發(fā)明的內(nèi)存對象加載方法與相關技術中的加載方式的顯著差異在于在加載實體對象時,依據(jù)加載的不同場景,只加載當前場景所必要的屬性構建完整概念的對象,當前場景無需訪問的屬性值置為空。場景與加載屬性的對應關系,稱之為“屬性加載方案”或“屬性加載關系”。對象虛加載時,按此關系進行首次加載,例如銷售訂單提交場景,按“屬性加載方案”,加載Fl. . F30共30個字段。當特定場景的進入不同分支時,例如銷售訂單提交進入分支2,需要訪問第31個字段時,此時進行銷售訂單的補充加載。會加載完整的100個字段,并啟動自完善過程。當整個分支2結束后,若監(jiān)控到總體多訪問了 3個字段,則將銷售訂單提交場景的“屬性加載方案”完善為33個字段。這樣下次銷售訂單提交場景的首次加載,就會加載33個字段值構建完整概念的對象了。根據(jù)本發(fā)明的內(nèi)存對象加載方法的整體處理過程如下步驟302,加載實體對象;步驟304,訪問實體對象的屬性;步驟306,完善屬性加載方案。下面結合圖4來詳細說明圖3的處理流程。在步驟402,讀取屬性加載對應關系(即屬性加載方案)。從存儲系統(tǒng)加載對象前,按[實體對象類型]和[場景]讀取“屬性加載方案”?!皩傩约虞d方案”描述了場景與對象屬性的關系。如下表“屬性加載方案”所示屬性加載方案主數(shù)據(jù)
權利要求
1.一種內(nèi)存對象加載裝置,其特征在于,包括 讀取單元,在需從存儲系統(tǒng)加載實體對象時,讀取預設的屬性加載關系,其中所述屬性加載對應關系包括不同場景與所述實體對象在所述不同場景下的屬性的對應關系; 加載單元,根據(jù)當前場景的所述屬性加載對應關系,從所述存儲系統(tǒng)中獲取所述實體對象在所述當前場景下的屬性的屬性值,以完成所述實體對象的加載。
2.根據(jù)權利要求I所述的內(nèi)存對象加載裝置,其特征在于,所述讀取單元讀取的所述屬性加載對應關系包括主數(shù)據(jù)關系和明細關系,所述主數(shù)據(jù)關系包括實體對象標識、實體對象類型、場景和是否采用虛加載屬性之間的對應關系,所述明細關系包括實體對象標識、屬性和是否加載屬性之間的對應關系。
3.根據(jù)權利要求2所述的內(nèi)存對象加載裝置,其特征在于,所述加載單元還用于在訪問所述實體對象中的屬性時,若被訪問的屬性未加載相應的屬性值,則補充加載所述實體對象中所有未加載的屬性的屬性值。
4.根據(jù)權利要求3所述的內(nèi)存對象加載裝置,其特征在于,所述加載單元包括 標記子單元,為所述所有未加載的屬性中被訪問的屬性添加完善標記; 更新子單元,根據(jù)所述完善標記更新所述屬性加載對應關系,將所述實體對象中標記有所述完善標記的屬性的是否加載屬性設置為是。
5.根據(jù)權利要求2至4中任一項所述的內(nèi)存對象加載裝置,其特征在于,所述加載單元還用于在所述實體對象的虛加載屬性為否時,從所述存儲系統(tǒng)中獲取所述實體對象的所有屬性的屬性值。
6.一種內(nèi)存對象加載方法,其特征在于,包括以下步驟 在需從存儲系統(tǒng)加載實體對象時,讀取預設的屬性加載關系,其中所述屬性加載對應關系包括不同場景與所述實體對象在所述不同場景下的屬性的對應關系; 根據(jù)當前場景的所述屬性加載對應關系,從所述存儲系統(tǒng)中獲取所述實體對象在所述當前場景下的屬性的屬性值,以完成所述實體對象的加載。
7.根據(jù)權利要求6所述的內(nèi)存對象加載方法,其特征在于,所述屬性加載對應關系包括主數(shù)據(jù)關系和明細關系,所述主數(shù)據(jù)關系包括實體對象標識、實體對象類型、場景和是否采用虛加載屬性之間的對應關系,所述明細關系包括實體對象標識、屬性和是否加載屬性之間的對應關系。
8.根據(jù)權利要求7所述的內(nèi)存對象加載方法,其特征在于,進一步包括訪問所述實體對象中的屬性,若被訪問的屬性未加載相應的屬性值,則補充加載所述實體對象中所有未加載的屬性的屬性值。
9.根據(jù)權利要求8所述的內(nèi)存對象加載方法,其特征在于,還包括 為所述所有未加載的屬性中被訪問的屬性添加完善標記; 根據(jù)所述完善標記更新所述屬性加載對應關系,將所述實體對象中標記有所述完善標記的屬性的是否加載屬性設置為是。
10.根據(jù)權利要求7至9中任一項所述的內(nèi)存對象加載方法,其特征在于,在所述實體對象的虛加載屬性為否時,從所述存儲系統(tǒng)中獲取所述實體對象的所有屬性的屬性值。
全文摘要
本發(fā)明提供了一種內(nèi)存對象加載裝置,包括讀取單元,在需從存儲系統(tǒng)加載實體對象時,讀取預設的屬性加載關系,其中所述屬性加載對應關系包括不同場景與所述實體對象在所述不同場景下的屬性的對應關系;加載單元,根據(jù)當前場景的所述屬性加載對應關系,從所述存儲系統(tǒng)中獲取所述實體對象在所述當前場景下的屬性的屬性值,以完成所述實體對象的加載。根據(jù)本發(fā)明的技術方案,改進了實體對象加載技術,減少了冗余加載內(nèi)容,節(jié)約了內(nèi)存空間的占用,也減少了IO訪問和網(wǎng)絡傳輸量。本發(fā)明還提供了一種內(nèi)存對象加載方法。
文檔編號G06F9/445GK102902565SQ20121037109
公開日2013年1月30日 申請日期2012年9月28日 優(yōu)先權日2012年9月28日
發(fā)明者周運祿 申請人:用友軟件股份有限公司