本發(fā)明涉及數(shù)據(jù)庫
技術(shù)領域:
,尤其涉及一種數(shù)據(jù)訪問方法、裝置及系統(tǒng)。
背景技術(shù):
:關系型數(shù)據(jù)庫(如oracle、mysql等)通常采用數(shù)據(jù)表的方式存儲數(shù)據(jù),應用(app)則可以通過數(shù)據(jù)庫提供的數(shù)據(jù)庫管理系統(tǒng)(databasemanagementsystem,dbms)接口,如java數(shù)據(jù)庫連接(javadatabaseconnectivity,jdbc)等,訪問數(shù)據(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ù)表可以包括索引,則app要訪問某個數(shù)據(jù)表時可以直接訪問,比如在訪問時可以獲取該數(shù)據(jù)表的索引,從而根據(jù)索引定位待訪問的數(shù)據(jù)。物理數(shù)據(jù)表類型是一種專用的數(shù)據(jù)表類型,即一個數(shù)據(jù)表中存儲的數(shù)據(jù)之間關聯(lián)性較強,比如可以將一個公司的工資表放在一個物理數(shù)據(jù)表類型的數(shù)據(jù)表中。這種數(shù)據(jù)存儲方式是當前比較常見的方式,操作簡單,訪問性能較好。但在這種數(shù)據(jù)存儲方式下,如果新增了數(shù)據(jù)表或者對已有的數(shù)據(jù)表中的字段結(jié)構(gòu)進行了修改等,都需要對app進行改造,比如修改app中的執(zhí)行代碼或是在app中植入新的代碼等,以使得app獲知更新后的數(shù)據(jù)表應該如何訪問,顯然實現(xiàn)較為復雜,靈活性較差。第二種存儲方式:以對象數(shù)據(jù)(objectdata)表類型的數(shù)據(jù)表存儲數(shù)據(jù)。在這種存儲方式下, 數(shù)據(jù)庫中還存儲有元數(shù)據(jù)表以及索引(index)表,元數(shù)據(jù)表中存儲的是元數(shù)據(jù)(metadata),元數(shù)據(jù)包括對數(shù)據(jù)庫中存儲的對象數(shù)據(jù)表中的表結(jié)構(gòu)的定義、字段結(jié)構(gòu)的定義、索引定義、表對象之間的關系的定義等,索引表中存儲的是相應字段所在的位置等。app在訪問時,可首先從元數(shù)據(jù)表中獲取相應的定義,之后通過索引表定位待訪問的數(shù)據(jù)。在這種訪問方式下,可以由元數(shù)據(jù)引擎根據(jù)元數(shù)據(jù)表中的定義來對數(shù)據(jù)庫進行訪問,無需app直接訪問數(shù)據(jù)庫,所以訪問方式較為靈活,基本無需改造app。但對象數(shù)據(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ù)時,是要在整張數(shù)據(jù)表中進行檢索,如果這種數(shù)據(jù)表中存儲的數(shù)據(jù)量過大,顯然會影響查詢速度,導致系統(tǒng)的性能受損??梢?,目前的兩種存儲方式都各有缺點,然而現(xiàn)在的數(shù)據(jù)庫都只能支持一種存儲方式,即要么支持第一種存儲方式要么支持第二種存儲方式,無法實現(xiàn)較好地存儲。技術(shù)實現(xiàn)要素:本申請?zhí)峁┮环N數(shù)據(jù)訪問方法、裝置及系統(tǒng),用以解決目前的數(shù)據(jù)庫無法實現(xiàn)較好地存儲的技術(shù)問題。第一方面,提供一種數(shù)據(jù)訪問方法,包括:接收數(shù)據(jù)訪問請求;確定所述數(shù)據(jù)訪問請求所訪問的數(shù)據(jù)表的存取類型;其中,數(shù)據(jù)表的存取類型包括物理數(shù)據(jù)表類型及以元數(shù)據(jù)形式存儲在數(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ù)表類型的數(shù)據(jù)表存儲數(shù)據(jù)量較小的數(shù)據(jù),另一方面也可以考慮數(shù)據(jù)量較大的數(shù)據(jù)的高訪問性能,比如可以采用物理數(shù)據(jù)表類型的數(shù)據(jù)表存儲數(shù)據(jù)量較大的數(shù)據(jù),等等,分別為不同的數(shù)據(jù)提供較為適合的存儲方式,使得數(shù)據(jù)庫中的存儲方式更為合理。在訪問數(shù)據(jù)時只需根據(jù)訪問請求確定所訪問的數(shù)據(jù)所在的數(shù)據(jù)表的類型即可實現(xiàn)對數(shù)據(jù)的訪問,實現(xiàn)較為簡單,便于推廣使用。結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,確定所述數(shù)據(jù)訪問請求所訪問的數(shù)據(jù)表的存取類型,包括:獲取所述數(shù)據(jù)訪問請求所攜帶的待訪問的第一數(shù)據(jù)表的信息及第二數(shù)據(jù)表的信息;根據(jù)存儲的數(shù)據(jù)表的信息與數(shù)據(jù)表的存取類型之間的對應關系確定所述第一數(shù)據(jù)表的存取類型為所述物理數(shù)據(jù)表類型,及所述第二數(shù)據(jù)表的存取類型為所述對象數(shù)據(jù)表類型??梢灶A先存儲數(shù)據(jù)表的信息與數(shù)據(jù)表的存取類型之間的對應關系,這樣在接收數(shù)據(jù)訪問請求后,只需獲取數(shù)據(jù)訪問請求中攜帶的待訪問的數(shù)據(jù)表的信息就可以確定待訪問的數(shù)據(jù)表的存取類型,這樣可以較為簡單地區(qū)分不同存取類型的數(shù)據(jù)表,避免混淆,保證后續(xù)能夠采用正確的方式訪問不同存取類型的數(shù)據(jù)表。結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,根據(jù)確定的數(shù)據(jù)表的存取類型,從所訪問的數(shù)據(jù)表中獲取所訪問的數(shù)據(jù),包括:根據(jù)所述數(shù)據(jù)訪問請求攜帶的針對所述第一數(shù)據(jù)表的第一訪問條件,從所述第一數(shù)據(jù)表中獲取符合所述第一訪問條件的m個第一數(shù)據(jù);根據(jù)所述數(shù)據(jù)訪問請求攜帶的針對所述第二數(shù)據(jù)表的第二訪問條件,從所述第二數(shù)據(jù)表中獲取符合所述第二訪問條件的n個第二數(shù)據(jù);m、n均為正整數(shù);在獲取所述n個第二數(shù)據(jù)的過程中,每獲取一個第二數(shù)據(jù),將獲取的第二數(shù)據(jù)與所述m個第一數(shù)據(jù)進行關聯(lián)操作,在進行n次關聯(lián)操作后,得到所訪問的數(shù)據(jù)。如果訪問的是不同存取類型的數(shù)據(jù)表,那么用戶可能想要得到的是將兩個數(shù)據(jù)表中的內(nèi)容進行關聯(lián)后的數(shù)據(jù),因此,可以將第一數(shù)據(jù)表中獲取的數(shù)據(jù)與第二數(shù)據(jù)表中獲取的數(shù)據(jù)進行關聯(lián)操作,這樣可以呈現(xiàn)給用戶較為有規(guī)律的數(shù)據(jù),無需用戶再自行進行組合。另外,在獲取第二數(shù)據(jù)的過程中,每獲取一個第二數(shù)據(jù)就可以將獲取的第二數(shù)據(jù)與m個第一數(shù)據(jù)進行關聯(lián)操作,關聯(lián)操作較為及時,有助于提高效率。結(jié)合第一方面的第二種可能的實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式中,將獲取的第二數(shù)據(jù)與所述m個第一數(shù)據(jù)進行關聯(lián)操作,包括:獲取所述數(shù)據(jù)訪問請求中攜帶的關聯(lián)條件;所述關聯(lián)條件用于將所述m個第一數(shù)據(jù)及所述n個第二數(shù)據(jù)進行關聯(lián)操作;確定所述獲取的第二數(shù)據(jù)是否與所述m個第一數(shù)據(jù)中的至少一個第一數(shù)據(jù)滿足所述關聯(lián)條件;若所述獲取的第二數(shù)據(jù)與所述至少一個第一數(shù)據(jù)滿足所述關聯(lián)條件,則得到包括所述獲取的第二數(shù)據(jù)與所述至少一個第一數(shù)據(jù)的一組關聯(lián)數(shù)據(jù)。提供了一種進行關聯(lián)操作的方式,根據(jù)數(shù)據(jù)訪問請求中攜帶的關聯(lián)條件進行關聯(lián)操作,既符合用戶的需求,操作過程也較為快捷。結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式至第三種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式中,所述方法還包括:若所述數(shù)據(jù)庫中存儲的第三數(shù)據(jù)表包括的數(shù)據(jù)量大于預設閾值,且所述第三數(shù)據(jù)表的類型為所述對象數(shù)據(jù)表類型,則輸出第一提示信息;所述第一提示信息用于指示將所述第三數(shù)據(jù)表的類型轉(zhuǎn)換為所述物理數(shù)據(jù)表類型。預設閾值可以是數(shù)據(jù)訪問裝置自行設定的,比如可以是系統(tǒng)根據(jù)學習經(jīng)驗 設定的,或者可以是用戶設定的,如果對象數(shù)據(jù)表類型的數(shù)據(jù)表(如第三數(shù)據(jù)表)包括的數(shù)據(jù)量大于預設閾值,那么在訪問第三數(shù)據(jù)表時就需要耗費較多的時間,可能會影響系統(tǒng)性能,因此如果第三數(shù)據(jù)表包括的數(shù)據(jù)量大于預設閾值,數(shù)據(jù)訪問裝置可以輸出第一提示信息,這樣用戶可以選擇是否要將第三數(shù)據(jù)表的存取類型轉(zhuǎn)換為物理數(shù)據(jù)表類型,以提高數(shù)據(jù)訪問性能。結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式至第四種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第一方面的第五種可能的實現(xiàn)方式中,所述方法還包括:接收用于請求建立第四數(shù)據(jù)表的請求消息;所述請求消息中攜帶所述第四數(shù)據(jù)表包括的數(shù)據(jù)量;若所述第四數(shù)據(jù)表包括的數(shù)據(jù)量大于預設閾值,輸出第二提示信息,所述第二提示信息用于指示以所述物理數(shù)據(jù)表類型建立所述第四數(shù)據(jù)表;或,若所述第四數(shù)據(jù)表包括的數(shù)據(jù)量小于等于預設閾值,輸出第二提示信息,所述第二提示信息用于指示以所述對象數(shù)據(jù)表類型建立所述第四數(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ù)訪問的靈活性。這樣,根據(jù)不同的數(shù)據(jù)量可以建立不同類型的數(shù)據(jù)表,使得數(shù)據(jù)庫中的存儲方式更為合理,盡量提高數(shù)據(jù)訪問性能。第二方面,提供一種數(shù)據(jù)訪問裝置,包括:存儲器,用于存儲指令;接收器,用于接收數(shù)據(jù)訪問請求;處理器,用于執(zhí)行所述指令,確定所述數(shù)據(jù)訪問請求所訪問的數(shù)據(jù)表的存取類型;其中,數(shù)據(jù)表的存取類型包括物理數(shù)據(jù)表類型及以元數(shù)據(jù)形式存儲在數(shù)據(jù)庫中的對象數(shù)據(jù)表類型;根據(jù)確定的數(shù)據(jù)表的存取類型,從所訪問的數(shù)據(jù) 表中獲取所訪問的數(shù)據(jù)。結(jié)合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述處理器用于:獲取所述數(shù)據(jù)訪問請求所攜帶的待訪問的第一數(shù)據(jù)表的信息及第二數(shù)據(jù)表的信息;根據(jù)存儲的數(shù)據(jù)表的信息與數(shù)據(jù)表的存取類型之間的對應關系確定所述第一數(shù)據(jù)表的存取類型為所述物理數(shù)據(jù)表類型,及所述第二數(shù)據(jù)表的存取類型為所述對象數(shù)據(jù)表類型。結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,所述處理器用于:根據(jù)所述數(shù)據(jù)訪問請求攜帶的針對所述第一數(shù)據(jù)表的第一訪問條件,從所述第一數(shù)據(jù)表中獲取符合所述第一訪問條件的m個第一數(shù)據(jù);根據(jù)所述數(shù)據(jù)訪問請求攜帶的針對所述第二數(shù)據(jù)表的第二訪問條件,從所述第二數(shù)據(jù)表中獲取符合所述第二訪問條件的n個第二數(shù)據(jù);m、n均為正整數(shù);在獲取所述n個第二數(shù)據(jù)的過程中,每獲取一個第二數(shù)據(jù),將獲取的第二數(shù)據(jù)與所述m個第一數(shù)據(jù)進行關聯(lián)操作,在進行n次關聯(lián)操作后,得到所訪問的數(shù)據(jù)。結(jié)合第二方面的第二種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,所述處理器用于:獲取所述數(shù)據(jù)訪問請求中攜帶的關聯(lián)條件;所述關聯(lián)條件用于將所述m個第一數(shù)據(jù)及所述n個第二數(shù)據(jù)進行關聯(lián)操作;確定所述獲取的第二數(shù)據(jù)是否與所述m個第一數(shù)據(jù)中的至少一個第一數(shù)據(jù)滿足所述關聯(lián)條件;若所述獲取的第二數(shù)據(jù)與所述至少一個第一數(shù)據(jù)滿足所述關聯(lián)條件,則得到包括所述獲取的第二數(shù)據(jù)與所述至少一個第一數(shù)據(jù)的一組關聯(lián)數(shù)據(jù)。結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式至第三種可能的實現(xiàn) 方式中的任一種可能的實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,所述裝置還包括發(fā)送器;所述處理器還用于:若確定所述數(shù)據(jù)庫中存儲的第三數(shù)據(jù)表存儲的數(shù)據(jù)量大于預設閾值,且所述第三數(shù)據(jù)表的類型為所述對象數(shù)據(jù)表類型,則通過所述發(fā)送器輸出第一提示信息;所述第一提示信息用于指示將所述第三數(shù)據(jù)表的類型轉(zhuǎn)換為所述物理數(shù)據(jù)表類型。結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式至第四種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第二方面的第五種可能的實現(xiàn)方式中,所述裝置還包括發(fā)送器;所述接收器還用于:接收用于請求建立第四數(shù)據(jù)表的請求消息;所述請求消息中攜帶所述第四數(shù)據(jù)表包括的數(shù)據(jù)量;所述處理器還用于:若確定所述第四數(shù)據(jù)表包括的數(shù)據(jù)量大于預設閾值,通過所述發(fā)送器輸出第二提示信息,所述第二提示信息用于指示以所述物理數(shù)據(jù)表類型建立所述第四數(shù)據(jù)表;或,若確定所述第四數(shù)據(jù)表包括的數(shù)據(jù)量小于等于預設閾值,通過所述發(fā)送器輸出第二提示信息,所述第二提示信息用于指示以所述對象數(shù)據(jù)表類型建立所述第四數(shù)據(jù)表。第三方面,提供一種數(shù)據(jù)訪問系統(tǒng),包括:數(shù)據(jù)庫,用于存儲數(shù)據(jù)表;其中,數(shù)據(jù)表的存取類型包括物理數(shù)據(jù)表類型及以元數(shù)據(jù)形式存儲在所述數(shù)據(jù)庫中的對象數(shù)據(jù)表類型;還包括如第二方面或第二方面的第一種可能的實現(xiàn)方式至第五種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式所述的數(shù)據(jù)訪問裝置,用于根據(jù)接收的數(shù)據(jù)訪問請求訪問所述數(shù)據(jù)庫,以從所訪問的數(shù)據(jù)表中獲取所訪問的數(shù)據(jù)。第四方面,提供另一種數(shù)據(jù)訪問裝置,該數(shù)據(jù)訪問裝置包括用于執(zhí)行第一方面的方法的模塊。本發(fā)明實施例中的數(shù)據(jù)庫同時支持如上的兩種數(shù)據(jù)存儲方式,這樣針對不同的數(shù)據(jù)可以選擇不同的存儲方式,而在訪問數(shù)據(jù)時只需根據(jù)訪問請求確定待 訪問的數(shù)據(jù)所在的數(shù)據(jù)表的類型就知道該如何訪問數(shù)據(jù),實現(xiàn)方式簡單,便于推廣利用。附圖說明為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對本發(fā)明實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面所介紹的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1a-圖1b為數(shù)據(jù)庫中的第一種存儲方式的兩種示意圖;圖2為數(shù)據(jù)庫中的第二種存儲方式示意圖;圖3為本發(fā)明實施例中數(shù)據(jù)庫中的存儲方式示意圖;圖4a-圖4b為本發(fā)明實施例中數(shù)據(jù)訪問裝置的結(jié)構(gòu)示意圖;圖5為本發(fā)明實施例中數(shù)據(jù)訪問系統(tǒng)的結(jié)構(gòu)示意圖;圖6為本發(fā)明實施例中的數(shù)據(jù)訪問方法的流程圖;圖7為本發(fā)明實施例中數(shù)據(jù)訪問裝置的結(jié)構(gòu)框圖。具體實施方式為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。首先簡單介紹數(shù)據(jù)庫的兩種數(shù)據(jù)存儲方式。第一種存儲方式:以物理數(shù)據(jù)表類型的數(shù)據(jù)表存儲數(shù)據(jù)。在建立物理數(shù)據(jù)表類型的數(shù)據(jù)表時,是用戶通過app直接在數(shù)據(jù)庫中建立,例如用戶在數(shù)據(jù)庫中建立了幾個物理數(shù)據(jù)表類型的數(shù)據(jù)表,請參見圖1a,分別為數(shù)據(jù)表1、數(shù)據(jù)表2和數(shù)據(jù)表3,當然,在建立一個數(shù)據(jù)表后,還要建立 該數(shù)據(jù)表對應的索引,索引一般跟數(shù)據(jù)表存儲在一起。以及,在建立一個數(shù)據(jù)表后,還要對該數(shù)據(jù)表中的表結(jié)構(gòu)、字段等進行定義,這些定義可以放在數(shù)據(jù)表的可擴展標記語言(xml)信息中,xml信息也可以跟數(shù)據(jù)表存儲在一起。app比如要訪問數(shù)據(jù)表1,則可以通過應用服務層的jdbc接口直接訪問數(shù)據(jù)表1,比如在訪問時可以先獲取數(shù)據(jù)表1的索引,從而根據(jù)索引定位待訪問的數(shù)據(jù)?;蛘?,app也可以不經(jīng)過應用服務層而直接訪問數(shù)據(jù)庫,請參見圖1b,例如用戶在數(shù)據(jù)庫中建立了幾個物理數(shù)據(jù)表類型的數(shù)據(jù)表,分別為數(shù)據(jù)表1、數(shù)據(jù)表2和數(shù)據(jù)表3,用戶可以通過操作app直接訪問這些數(shù)據(jù)表,而無需經(jīng)過應用服務層。其中,app和應用服務層可以看做兩個功能模塊,這兩個功能模塊一般通過軟件方式實現(xiàn),這兩個功能模塊可以位于同一設備中,或者也可以位于不同的設備中。jdbc接口一般是應用服務層提供的接口,供app訪問數(shù)據(jù)庫。另外,數(shù)據(jù)庫也可以看做功能模塊,一般可以通過設備中的存儲器件來實現(xiàn)。app、應用服務層和數(shù)據(jù)庫這三個功能模塊可以位于同一設備中,或者也可以分別位于不同的設備中,或者也可以其中的任意兩個功能模塊位于同一設備中,等等。第二種存儲方式:以對象數(shù)據(jù)表類型的數(shù)據(jù)表存儲數(shù)據(jù)。在建立對象數(shù)據(jù)表時,首先需建立元數(shù)據(jù)表,比如系統(tǒng)可以提供專門用于建立元數(shù)據(jù)表的界面,用戶可以直接在該界面中建立元數(shù)據(jù)表。用戶輸入完畢后可以選擇提交,例如請參見圖2,位于應用服務層的元數(shù)據(jù)驅(qū)動引擎可以根據(jù)用戶輸入的內(nèi)容在數(shù)據(jù)庫中建立元數(shù)據(jù)表,并根據(jù)用戶輸入的內(nèi)容生成元數(shù)據(jù)表中的元數(shù)據(jù),例如元數(shù)據(jù)可以包括即將建立的對象數(shù)據(jù)表中的表結(jié)構(gòu)的定義、字段結(jié)構(gòu)的定義、索引定義、表對象之間的關系的定義等,元數(shù)據(jù)驅(qū)動引擎還可以在數(shù)據(jù)庫中建立對應的對象數(shù)據(jù)表,以存儲數(shù)據(jù)。另外,元數(shù)據(jù)驅(qū)動引擎還可以在數(shù)據(jù)庫中建立用于查詢對象數(shù)據(jù)表中的數(shù)據(jù)的索引表。其中,一個對象數(shù)據(jù)表中可以存儲各種互不相關的數(shù)據(jù),因此,數(shù)據(jù)庫中 可以只需建立一個對象數(shù)據(jù)表即可,當然建立多個對象數(shù)據(jù)表的方案也在本發(fā)明實施例的保護范圍之內(nèi)。其中,如果數(shù)據(jù)庫中已經(jīng)建立了元數(shù)據(jù)表,那么元數(shù)據(jù)驅(qū)動引擎無需再建立新的元數(shù)據(jù)表,而直接根據(jù)用戶提交的內(nèi)容生成元數(shù)據(jù),并將元數(shù)據(jù)放入已生成的元數(shù)據(jù)表即可。如果數(shù)據(jù)庫中已經(jīng)建立了對象數(shù)據(jù)表,則元數(shù)據(jù)驅(qū)動引擎無需建立新的對象數(shù)據(jù)表,而將要存儲的數(shù)據(jù)放入已建立的對象數(shù)據(jù)表即可。如果數(shù)據(jù)庫中已經(jīng)建立了索引表,那么元數(shù)據(jù)驅(qū)動引擎無需再建立新的索引表,而直接將新的數(shù)據(jù)的索引加入已建立的索引表即可。app比如要訪問對象數(shù)據(jù)表,則可以通過元數(shù)據(jù)驅(qū)動引擎從元數(shù)據(jù)表中獲取對象數(shù)據(jù)表的表結(jié)構(gòu)等定義,再通過元數(shù)據(jù)驅(qū)動引擎根據(jù)索引表進行查詢,獲得對象數(shù)據(jù)表中的數(shù)據(jù)。本發(fā)明實施例中的數(shù)據(jù)庫同時支持如上的兩種數(shù)據(jù)存儲方式,這樣針對不同的數(shù)據(jù)可以選擇不同的存儲方式,而在訪問數(shù)據(jù)時只需根據(jù)訪問請求確定待訪問的數(shù)據(jù)所在的數(shù)據(jù)表的類型就知道該如何訪問數(shù)據(jù),實現(xiàn)方式簡單,便于推廣利用。請參見圖3,為本發(fā)明實施例中數(shù)據(jù)庫的存儲方式示意圖。圖3中,數(shù)據(jù)表1為物理數(shù)據(jù)表類型的數(shù)據(jù)表,數(shù)據(jù)表2為對象數(shù)據(jù)表類型的數(shù)據(jù)表,另外數(shù)據(jù)庫中還存儲了與數(shù)據(jù)表2對應的元數(shù)據(jù)表及索引表,其中數(shù)據(jù)表1的索引與數(shù)據(jù)表1存儲在一起,圖3中未畫出。另外,圖3中是以一個物理數(shù)據(jù)表類型的數(shù)據(jù)表為例,在實際應用中,數(shù)據(jù)庫中可能存儲多個物理數(shù)據(jù)表類型的數(shù)據(jù)表。另外,本發(fā)明實施例提供同樣位于應用服務層的混合引擎,混合引擎能夠分別與用于訪問對象數(shù)據(jù)表的元數(shù)據(jù)驅(qū)動引擎以及用于訪問物理數(shù)據(jù)表的物理數(shù)據(jù)表訪問引擎通信,混合引擎可以接收通過app輸入的訪問請求,在確定待訪問的數(shù)據(jù)所在的數(shù)據(jù)表究竟是哪種類型的數(shù)據(jù)表后,混合引擎可以調(diào)用相應的引擎(元數(shù)據(jù)驅(qū)動引擎或物理數(shù)據(jù)表訪問引擎)來響應訪問請求,元數(shù) 據(jù)驅(qū)動引擎或物理數(shù)據(jù)表訪問引擎獲得待訪問的數(shù)據(jù)后,可以直接反饋給app,不通過混合引擎,或者也可以將待訪問的數(shù)據(jù)反饋給混合引擎,由混合引擎反饋給app,從而實現(xiàn)對不同類型的數(shù)據(jù)表的訪問??蛇x的,元數(shù)據(jù)驅(qū)動引擎和物理數(shù)據(jù)表訪問引擎可以位于混合引擎中,即混合引擎可以包括元數(shù)據(jù)驅(qū)動引擎和物理數(shù)據(jù)表訪問引擎,當然混合引擎還可以包括其他的功能模塊,或者混合引擎、元數(shù)據(jù)驅(qū)動引擎和物理數(shù)據(jù)表訪問引擎也可以是三個獨立的模塊,混合引擎能夠分別與元數(shù)據(jù)驅(qū)動引擎和物理數(shù)據(jù)表訪問引擎進行通信(圖3以此為例)。其中,本發(fā)明實施例提供物理數(shù)據(jù)表訪問引擎,用于訪問物理數(shù)據(jù)表類型的數(shù)據(jù)表,物理數(shù)據(jù)表訪問引擎可以是jdbc接口,或者也可以是其他的用于訪問物理數(shù)據(jù)表類型的數(shù)據(jù)表的接口或引擎。下面結(jié)合附圖介紹本發(fā)明實施例提供的技術(shù)方案。請參見圖4a,本發(fā)明實施例提供一種數(shù)據(jù)訪問裝置,該數(shù)據(jù)訪問裝置可以包括存儲器401、處理器402和接收器403。其中,處理器402可以是中央處理器(cpu)或特定應用集成電路(applicationspecificintegratedcircuit,asic),可以是一個或多個用于控制程序執(zhí)行的集成電路,可以是使用現(xiàn)場可編程門陣列(fieldprogrammablegatearray,fpga)開發(fā)的硬件電路,可以是基帶芯片。存儲器401的數(shù)量可以是一個或多個。存儲器401可以包括只讀存儲器(readonlymemory,rom)、隨機存取存儲器(randomaccessmemory,ram)和磁盤存儲器。接收器403可以用于與外部設備進行通信,例如接收器403可以與app進行通信??蛇x的,請參見圖4b,該裝置還可以包括發(fā)送器404,可以用于與外部設備進行通信,例如發(fā)送器404也可以與app進行通信。發(fā)送器404和接收器403可以是同一實體模塊,例如可以是能夠?qū)崿F(xiàn)收發(fā) 功能的實體模塊,比如可以稱為收發(fā)器,或者發(fā)送器404和接收器403也可以是單獨的實體模塊。這些存儲器401、發(fā)送器404和接收器403可以通過總線與處理器402相連接(圖4a-圖4b以此為例),或者也可以通過專門的連接線分別與處理器402連接。通過對處理器402進行設計編程,將下面所示的方法所對應的代碼固化到芯片內(nèi),從而使芯片在運行時能夠執(zhí)行下面圖5所示的方法。如何對處理器402進行設計編程為本領域技術(shù)人員所公知的技術(shù),這里不再贅述。其中,該數(shù)據(jù)訪問裝置可以實現(xiàn)如圖3中的混合引擎的功能。該數(shù)據(jù)訪問裝置可以通過軟件方式實現(xiàn),比如可以是固化在設備中的一套軟件程序,或者也可以通過硬件方式實現(xiàn),比如可以是在設備中新增的硬件模塊,或者也可以利用設備中原有的硬件模塊實現(xiàn),比如處理器402可以由設備中的數(shù)據(jù)處理系統(tǒng)實現(xiàn),存儲器401可以由設備中的存儲器件實現(xiàn),或者存儲器401也可以由設備中的數(shù)據(jù)處理系統(tǒng)的內(nèi)部緩存實現(xiàn),發(fā)送器404和接收器403可以由設備中的數(shù)據(jù)收發(fā)系統(tǒng)實現(xiàn)。請參見圖5,基于同一發(fā)明構(gòu)思,本發(fā)明實施例還提供一種數(shù)據(jù)訪問系統(tǒng),該數(shù)據(jù)訪問系統(tǒng)可以包括數(shù)據(jù)庫,還可以包括如圖4a或圖4b所示的數(shù)據(jù)訪問裝置。其中,該系統(tǒng)中的數(shù)據(jù)庫和數(shù)據(jù)訪問裝置可以位于同一設備中(圖5以此為例),比如可以位于同一服務器中,或者也可以位于不同的設備中,比如可以位于不同的服務器中,或者也可以位于不同的其他類型的設備中。下面介紹本發(fā)明實施例提供的方法。請參見圖6,本發(fā)明實施例提供一種數(shù)據(jù)訪問方法,該方法可以由如前所述的數(shù)據(jù)訪問裝置來執(zhí)行,該方法的流程介紹如下。步驟601:接收數(shù)據(jù)訪問請求;步驟602:確定數(shù)據(jù)訪問請求所訪問的數(shù)據(jù)表的存取類型;其中,數(shù)據(jù)表的存取類型包括物理數(shù)據(jù)表類型及以元數(shù)據(jù)形式存儲在數(shù)據(jù)庫中的對象數(shù)據(jù) 表類型;步驟603:根據(jù)確定的數(shù)據(jù)表的存取類型,從所訪問的數(shù)據(jù)表中獲取所訪問的數(shù)據(jù)。接收器403可以接收app輸入的數(shù)據(jù)訪問請求,例如,app輸入的數(shù)據(jù)訪問請求可以是結(jié)構(gòu)化查詢語言(structuredquerylanguage,sql)語句??蛇x的,數(shù)據(jù)訪問請求中可以攜帶所訪問的數(shù)據(jù)表的信息,數(shù)據(jù)表的信息例如可以包括數(shù)據(jù)表的存取類型、名稱或身份標識號(identity,id)等。處理器402可以確定數(shù)據(jù)訪問請求所訪問的數(shù)據(jù)表的存取類型。可選的,如果數(shù)據(jù)訪問請求中直接攜帶了所訪問的數(shù)據(jù)表的存取類型,則處理器402可以直接根據(jù)數(shù)據(jù)訪問請求確定所訪問的數(shù)據(jù)表的存取類型,如果數(shù)據(jù)訪問請求中攜帶的是數(shù)據(jù)表的其他信息,例如攜帶的是數(shù)據(jù)表的id或數(shù)據(jù)表的名稱等,則處理器402還需確定所訪問的數(shù)據(jù)表的存取類型。因此,存儲器401中可以預先存儲數(shù)據(jù)表的信息與數(shù)據(jù)表的存取類型之間的對應關系,這樣處理器402接收數(shù)據(jù)訪問請求后,可以獲取數(shù)據(jù)訪問請求中攜帶的數(shù)據(jù)表的信息,再根據(jù)存儲的數(shù)據(jù)表的信息與數(shù)據(jù)表的存取類型之間的對應關系確定待訪問的數(shù)據(jù)表的類型。例如,存儲器401中預先存儲的是數(shù)據(jù)表的id與數(shù)據(jù)表的存取類型之間的對應關系,那么,app發(fā)送的數(shù)據(jù)訪問請求中攜帶的也應該是數(shù)據(jù)表的id,這樣處理器402接收數(shù)據(jù)訪問請求后,可以獲取數(shù)據(jù)訪問請求中攜帶的數(shù)據(jù)表的id,再根據(jù)存儲的數(shù)據(jù)表的id與數(shù)據(jù)表的存取類型之間的對應關系確定待訪問的數(shù)據(jù)表的存取類型。以下通過兩個例子來介紹本發(fā)明實施例中的數(shù)據(jù)存儲及訪問方法。例1:例如,需要在數(shù)據(jù)庫中增加兩個數(shù)據(jù)表,分別為綜合賬單表(例如稱為bill_sum)和細節(jié)賬單表(例如稱為bill_detail),用于記錄客戶產(chǎn)生的賬單記錄。例如bill_sum的數(shù)據(jù)規(guī)模為6千萬條,bill_sum的表結(jié)構(gòu)請參考表 1:表1字段名稱編碼數(shù)據(jù)類型長度必選字段帳戶標識acct_idnumber(16)16true地市編碼eparchy_codechaar(4)4false綜合帳目標識sum_item_codenumber(5)5true實際費用feenumber(12)12false優(yōu)惠費用adjust_beforenumber(12)12false賬單標志statusvarchar2(2)2false賬單周期bill_cyclevarchar2(6)6true例如bill_detail的數(shù)據(jù)規(guī)模是bill_sum的10倍,估計是6億條數(shù)據(jù),bill_detail的表結(jié)構(gòu)請參考表2:表2物理數(shù)據(jù)表類型的數(shù)據(jù)表較為靈活,訪問速度較快,但經(jīng)常需改造app,比較麻煩,對象數(shù)據(jù)表類型的數(shù)據(jù)表在訪問時基本無需改造app,但因為包括的數(shù)據(jù)過多,訪問速度相較于物理數(shù)據(jù)表類型的數(shù)據(jù)表來說較慢,因此,本發(fā)明實施例中,針對不同的數(shù)據(jù)可以采用不同的存儲方式,針對數(shù)據(jù)量較小的數(shù)據(jù)可以采用對象數(shù)據(jù)表類型的數(shù)據(jù)表存儲,因為數(shù)據(jù)量較小,訪問速度也不是太慢,還可以盡量利用對象數(shù)據(jù)表類型的數(shù)據(jù)表無需改造app的優(yōu)勢,針對數(shù)據(jù)量較大的數(shù)據(jù),如果采用對象數(shù)據(jù)表類型的數(shù)據(jù)表進行存儲的話可能訪問速度會受到影響,因此可以考慮采用物理數(shù)據(jù)表類型的數(shù)據(jù)表存儲,以盡量提升訪問速度,避免系統(tǒng)性能受損。可選的,可以預先設置預設閾值,并將設置的預設閾值存儲在存儲器401中,如果需存儲的數(shù)據(jù)量小于等于該預設閾值,則可以將這些數(shù)據(jù)存儲在對象數(shù)據(jù)表類型的數(shù)據(jù)表中,如果需存儲的數(shù)據(jù)量大于該預設閾值,則可以將這些數(shù)據(jù)存儲在物理數(shù)據(jù)表類型的數(shù)據(jù)表中。預設閾值可以由處理器402自行設定,比如處理器402可以根據(jù)存儲經(jīng)驗進行設定,或者也可以由用戶設定。例如在例1中,該預設閾值為8千萬,那么顯然,bill_sum的類型可以是對象數(shù)據(jù)表類型,bill_detail的類型可以是物理數(shù)據(jù)表類型。例如,存儲器401中可以存儲數(shù)據(jù)表的其他信息與數(shù)據(jù)表的存取類型之間的對應關系(例如將該對應關系存儲在一個名為對象類型表的數(shù)據(jù)表中),比如例1中存儲的是數(shù)據(jù)表的名稱與數(shù)據(jù)表的存取類型之間的對應關系,請參見表3:表3對象類型表中除了存儲數(shù)據(jù)表的名稱與數(shù)據(jù)表的存取類型之間的對應關系外,還可以存儲不同的數(shù)據(jù)表的數(shù)據(jù)規(guī)模、數(shù)據(jù)表結(jié)構(gòu)信息等信息,可繼續(xù)參考表3,對象類型表只要能夠用于令處理器402確定數(shù)據(jù)訪問請求所請求訪問的數(shù)據(jù)表的存取類型即可,對于對象類型表中存儲的其他信息本發(fā)明實施例不作限制。在app需要訪問bill_detail或bill_sum中的數(shù)據(jù)時,可以向數(shù)據(jù)訪問裝置發(fā)送數(shù)據(jù)訪問請求,該數(shù)據(jù)訪問請求可以是通用的sql訪問請求,例1中,數(shù)據(jù)訪問請求中可以攜帶待訪問的數(shù)據(jù)表的名稱,接收器403接收訪問請求后,處理器402可以根據(jù)對象類型表確定待訪問的數(shù)據(jù)表的存取類型。如果數(shù)據(jù)訪問請求中攜帶的數(shù)據(jù)表的名稱為bill_detail,則處理器402確定待訪問的數(shù)據(jù)表的存取類型為物理數(shù)據(jù)表類型,處理器402可以調(diào)用物理數(shù)據(jù)表訪問引擎。物理數(shù)據(jù)表訪問引擎獲取該數(shù)據(jù)訪問請求,獲取該數(shù)據(jù)訪問請求所請求訪問的表結(jié)構(gòu)、字段等信息,根據(jù)bill_detail的xml信息確定根據(jù)獲取的表結(jié)構(gòu)、字段等信息的定義,再通過bill_detail的索引在bill_detail中訪問所需的數(shù)據(jù)。其中,如果數(shù)據(jù)訪問請求中未攜帶表結(jié)構(gòu)、字段等信息,則物理數(shù)據(jù)表訪問引擎可能認為需訪問所有表結(jié)構(gòu)、字段等對應的數(shù)據(jù),那么物理數(shù)據(jù)表訪問引擎可以根據(jù)bill_detail的xml信息對該數(shù)據(jù)訪問請求進行重新拼裝,在該數(shù)據(jù)訪問請求中添加bill_detail的所有的表結(jié)構(gòu)、字段等信息,再通過bill_detail的索引在bill_detail中訪問所需的數(shù)據(jù)。之后,物理數(shù)據(jù)表訪問引擎可以直接將所訪問的數(shù)據(jù)反饋給app,或者,物理數(shù)據(jù)表訪問引擎也可以將所訪問的數(shù)據(jù)反饋給數(shù)據(jù)訪問裝置,由處理器402通過發(fā)送器404反饋給app。如果數(shù)據(jù)訪問請求中攜帶的數(shù)據(jù)表的名稱為bill_sum,則處理器402確 定待訪問的數(shù)據(jù)表的存取類型為對象數(shù)據(jù)表類型,處理器402可以調(diào)用元數(shù)據(jù)驅(qū)動引擎。元數(shù)據(jù)驅(qū)動引擎獲取該數(shù)據(jù)訪問請求,獲取該數(shù)據(jù)訪問請求所請求訪問的表結(jié)構(gòu)、字段等信息,根據(jù)元數(shù)據(jù)表確定根據(jù)獲取的表結(jié)構(gòu)、字段等信息的定義,再通過索引表在bill_sum中訪問所需的數(shù)據(jù)。之后,元數(shù)據(jù)驅(qū)動引擎可以直接將所訪問的數(shù)據(jù)反饋給app,或者,元數(shù)據(jù)驅(qū)動引擎也可以將所訪問的數(shù)據(jù)反饋給數(shù)據(jù)訪問裝置,由處理器402通過發(fā)送器404反饋給app。例2:例如,需要在數(shù)據(jù)庫中新增賬單類型表(例如稱為bill_type)和細節(jié)賬單表(例如稱為bill_detail),其中,建立bill_detail的方式可參考例1的描述。例如bill_type的數(shù)據(jù)量不大,小于預設閾值(例如預設閾值為8千萬),因此可以考慮采用對象數(shù)據(jù)表類型的數(shù)據(jù)表進行存儲。因為數(shù)據(jù)庫中已經(jīng)存儲了元數(shù)據(jù)表、對象數(shù)據(jù)表類型的數(shù)據(jù)表及索引,那么可以直接將bill_type的元數(shù)據(jù)放入元數(shù)據(jù)表、將bill_type中的數(shù)據(jù)放入對象數(shù)據(jù)表、及將bill_type中的數(shù)據(jù)的索引信息放入索引表即可。例如bill_type的表結(jié)構(gòu)可參考表4:表4字段名稱編碼數(shù)據(jù)類型長度必選字段帳目標識bill_item_codenumber(5)5true帳目類型item_typenumber(5)5true帳目名稱bill_item_namevarchar2(32)32false存儲器401存儲的對象類型表可參考表5::表5數(shù)據(jù)表名稱存取類型數(shù)據(jù)規(guī)模數(shù)據(jù)表結(jié)構(gòu)信息bill_typemetadata1千元數(shù)據(jù)bill_detail物理數(shù)據(jù)表類型6億xml表結(jié)構(gòu)信息在app需要訪問bill_detail或bill_type中的數(shù)據(jù)時,可以向數(shù)據(jù)訪問裝置發(fā)送數(shù)據(jù)訪問請求,該數(shù)據(jù)訪問請求可以是通用的sql訪問請求,數(shù)據(jù)訪問請求中可以攜帶待訪問的數(shù)據(jù)表的名稱,接收器403接收訪問請求后,處理器402根據(jù)對象類型表確定待訪問的數(shù)據(jù)表的存取類型。例如app發(fā)送的數(shù)據(jù)訪問請求為sql查詢請求,該sql查詢請求例如為:selecta.*,b.bill_item_namefrombill_detaila、bill_typebwherea.acct_id=11332anda.bill_item_code=b.bill_item_code(+)。很明顯,這個sql查詢請求需查詢兩種不同存取類型的數(shù)據(jù)表中的數(shù)據(jù)。那么可選的,對于兩個數(shù)據(jù)表中的數(shù)據(jù)可以進行關聯(lián)(join)操作,將關聯(lián)操作的結(jié)果作為反饋給app的數(shù)據(jù)訪問結(jié)果。在進行關聯(lián)操作時,首先可以根據(jù)數(shù)據(jù)訪問請求確定所訪問的數(shù)據(jù)表中哪個是主表哪個是從表,比如根據(jù)上面的數(shù)據(jù)訪問請求,處理器402可以確定bill_detail為主表,bill_type為從表,則處理器402可以將從表中獲取的數(shù)據(jù)分別與主表中獲取的數(shù)據(jù)進行關聯(lián)操作。下面介紹關聯(lián)過程。處理器402調(diào)用物理數(shù)據(jù)表訪問引擎,通過物理數(shù)據(jù)表訪問引擎獲得bill_detail中的待訪問的數(shù)據(jù),例如獲得m個第一數(shù)據(jù),處理器402可以將m個第一數(shù)據(jù)先存儲在緩存中,緩存可以由存儲器401提供,或者也可以由處理器402提供。處理器402還需要調(diào)用元數(shù)據(jù)驅(qū)動引擎,以通過元數(shù)據(jù)驅(qū)動引擎獲得bill_type中的待訪問的數(shù)據(jù),那么,如果處理器402直接通過元數(shù)據(jù)驅(qū)動引擎一次性獲得bill_type中的待訪問的全部數(shù)據(jù)(例如將從bill_type中獲取的待訪問數(shù)據(jù)稱為第二數(shù)據(jù),比如共可以獲得n個第二數(shù)據(jù))之后再進行關聯(lián)操作,就需要將m個第一數(shù)據(jù)和n個第二數(shù)據(jù)一起存儲在緩存中,這樣需要占用較大的空間,比較浪費資源,也需要數(shù)據(jù)訪問裝置具有較好的性能,因此,可選的,在獲得m個第一數(shù)據(jù)后,處理器402可以調(diào)用元數(shù)據(jù)驅(qū)動引擎從bill_type中依次獲得第二數(shù)據(jù),比如,每獲得一個第二 數(shù)據(jù),處理器402就可以按照關聯(lián)條件將獲得的第二數(shù)據(jù)與m個第一數(shù)據(jù)進行關聯(lián),看獲得的第二數(shù)據(jù)是否能與m個第一數(shù)據(jù)中的至少一個第一數(shù)據(jù)關聯(lián)起來,如果獲得的第二數(shù)據(jù)能與至少一個第一數(shù)據(jù)關聯(lián),即獲得的第二數(shù)據(jù)與至少一個第一數(shù)據(jù)能夠滿足關聯(lián)條件,則處理器402就獲得了一組關聯(lián)數(shù)據(jù),這組關聯(lián)數(shù)據(jù)包括該獲得的第二數(shù)據(jù)與至少一個第一數(shù)據(jù),這組關聯(lián)數(shù)據(jù)就是待訪問的數(shù)據(jù)中的數(shù)據(jù),相當于處理器402需進行n次關聯(lián)操作,在從bill_type中獲得最后一個第二數(shù)據(jù)(即第n個第二數(shù)據(jù))后,處理器402進行第n次關聯(lián)操作,在第n次關聯(lián)操作完畢后,處理器402可以得到待訪問的數(shù)據(jù),待訪問的數(shù)據(jù)可以包括k組關聯(lián)數(shù)據(jù),k為小于等于n且大于等于0的整數(shù),這k組關聯(lián)數(shù)據(jù)就是待訪問的數(shù)據(jù)。其中,從數(shù)據(jù)表中獲得第一數(shù)據(jù)和第二數(shù)據(jù)的方式可參考如前實施例的描述,不多贅述。關聯(lián)條件可以是數(shù)據(jù)訪問請求中攜帶的,處理器402可以通過解析數(shù)據(jù)訪問請求獲得關聯(lián)條件,從而對m個第一數(shù)據(jù)和n個第二數(shù)據(jù)進行關聯(lián)。下面再通過一個例子來介紹關聯(lián)操作的過程。比如數(shù)據(jù)訪問請求為:selecta.telnumber,a.name,a.productid,b.product_namefromuser_ordera,productbwherea.telnumber=“13912345678”,b.product_type=“全球通”,a.productid=b.productid。其中a表(即user_order)包括1億條數(shù)據(jù),a表的存取類型為物理數(shù)據(jù)表類型,b表(即product)包括5000條數(shù)據(jù),b表的存取類型為對象數(shù)據(jù)表類型,a表中符合a.telnumber=“13912345678”條件的數(shù)據(jù)比如有200條,b表中符合product_type=“全球通”條件的數(shù)據(jù)比如有300條。處理器402首先可以根據(jù)數(shù)據(jù)訪問請求確定數(shù)據(jù)表的主從關系,例如規(guī)則可以是將數(shù)據(jù)量大的數(shù)據(jù)表作為主表,將其他數(shù)據(jù)表作為從表,即將a表作為主表,將b表作為從表。在確定主從關系后,處理器402首先根據(jù)數(shù)據(jù)訪問請求確定主表中的數(shù)據(jù)的獲取條件,即確定數(shù)據(jù)訪問請求中攜帶的針對主表的訪問條件,例如按照上面的 數(shù)據(jù)訪問請求可知,a.telnumber=“13912345678”為針對主表的訪問條件,處理器402調(diào)用物理數(shù)據(jù)表訪問引擎,從主表中提取符合第一訪問條件的數(shù)據(jù),處理器402再根據(jù)數(shù)據(jù)訪問請求確定從表中的數(shù)據(jù)的獲取條件,即確定數(shù)據(jù)訪問請求中攜帶的針對從表的訪問條件,例如按照上面的數(shù)據(jù)訪問請求可知,product_type=“全球通”為針對從表的訪問條件??蛇x的,每從從表中提取一個數(shù)據(jù),就可以將提取的數(shù)據(jù)與主表中的數(shù)據(jù)進行關聯(lián)操作,關聯(lián)條件可以攜帶在數(shù)據(jù)訪問請求中,比如該例的數(shù)據(jù)訪問請求中,a.productid=b.productid即為關聯(lián)條件。其中,從表中獲取的一個數(shù)據(jù)可能與主表中的至少一個數(shù)據(jù)具有關聯(lián)關系,那么可以將從表中的該數(shù)據(jù)與主表中獲取的至少一個數(shù)據(jù)作為一組關聯(lián)數(shù)據(jù),或者,從表中的某些數(shù)據(jù)也可能與主表中獲取的任何數(shù)據(jù)都不具有關聯(lián)關系,即都不滿足關聯(lián)條件,那么從表中獲取的無法與主表中獲取的任何數(shù)據(jù)關聯(lián)的數(shù)據(jù)可能不是app要訪問的數(shù)據(jù),可以丟棄這部分數(shù)據(jù),這樣也有利于節(jié)省存儲空間??蛇x的,在得到所有的關聯(lián)數(shù)據(jù)后,可以僅將得到的關聯(lián)數(shù)據(jù)作為所訪問的數(shù)據(jù)進行反饋,而對于從表中獲取的無法與主表中獲取的任何數(shù)據(jù)關聯(lián)的數(shù)據(jù),以及對于主表中獲取的無法與從表中獲取的任何數(shù)據(jù)關聯(lián)的數(shù)據(jù),都可以丟棄。或者,在得到所有的關聯(lián)數(shù)據(jù)后,不僅可以將得到的關聯(lián)數(shù)據(jù)作為所訪問的數(shù)據(jù)進行反饋,還可以將主表中獲取的無法與從表中獲取的任何數(shù)據(jù)關聯(lián)的數(shù)據(jù)也作為所訪問的數(shù)據(jù)進行反饋,這樣用戶得到的數(shù)據(jù)更完整。在得到所訪問的數(shù)據(jù)后,處理器402可以通過發(fā)送器404將所訪問的數(shù)據(jù)反饋給app,或者在得到所訪問的數(shù)據(jù)后,處理器402也可以對所訪問的數(shù)據(jù)進行排序(比如例2中可以按照賬單類型進行排序),之后再通過發(fā)送器404反饋給app。前面的幾個例子介紹了分開訪問以及關聯(lián)訪問,即本發(fā)明實施例提供的技術(shù)方案根據(jù)不同的數(shù)據(jù)訪問請求能夠提供不同的訪問結(jié)果,以滿足不同的需求??蛇x的,處理器402還可以掃描數(shù)據(jù)庫中存儲的各種類型的數(shù)據(jù)表,比如可以定時或周期性掃描,或者也可以在用戶的觸發(fā)下進行掃描。比如掃描確定數(shù)據(jù)庫中存儲的第三數(shù)據(jù)表中包括的數(shù)據(jù)量大于預設閾值,處理器402可以確定第三數(shù)據(jù)表的存取類型,例如第三數(shù)據(jù)表的存取類型為對象數(shù)據(jù)表類型,那么為了提高數(shù)據(jù)庫的訪問性能,處理器402可以向app發(fā)送消息,app可以向用戶輸出第一提示信息,第一提示信息可以用于指示將第三數(shù)據(jù)表的存取類型轉(zhuǎn)換為物理數(shù)據(jù)表類型。用戶接收第一提示信息后,如果接受建議,則可以重新以物理數(shù)據(jù)表類型存儲第三數(shù)據(jù)表中包括的數(shù)據(jù)??蛇x的,用戶在需建立數(shù)據(jù)表時,可以先通過app向數(shù)據(jù)訪問裝置發(fā)送請求消息,例如用戶需建立第四數(shù)據(jù)表,則用戶通過app向數(shù)據(jù)訪問裝置發(fā)送請求消息,該請求消息中可以攜帶第四數(shù)據(jù)表包括的數(shù)據(jù)量。接收器403接收app發(fā)送的請求消息,處理器402可以確定第四數(shù)據(jù)表的數(shù)據(jù)量是否大于存儲器401中存儲的預設閾值,從而給出針對第四數(shù)據(jù)表的存儲指示,例如如果第四數(shù)據(jù)表包括的數(shù)據(jù)量大于預設閾值,則處理器402可以指示以物理數(shù)據(jù)表類型的存儲方式建立第四數(shù)據(jù)表,如果第四數(shù)據(jù)表包括的數(shù)據(jù)量小于等于預設閾值,則處理器402可以指示以對象數(shù)據(jù)表類型的存儲方式建立第四數(shù)據(jù)表,發(fā)送器404可以將處理器402的指示發(fā)送給app,app可以輸出第二提示信息。例如,如果第四數(shù)據(jù)表包括的數(shù)據(jù)量大于預設閾值,則第二提示信息可以用于指示以物理數(shù)據(jù)表類型的存儲方式建立第四數(shù)據(jù)表,如果第四數(shù)據(jù)表包括的數(shù)據(jù)量小于等于預設閾值,則第二提示信息可以用于指示以對象數(shù)據(jù)表類型的存儲方式建立第四數(shù)據(jù)表,用戶后續(xù)可以根據(jù)第二提示信息來建立第四數(shù)據(jù)表。這樣,根據(jù)不同的數(shù)據(jù)量可以建立不同類型的數(shù)據(jù)表,使得數(shù)據(jù)庫中的存儲方式更為合理,盡量提高訪問性能。請參見圖7,基于同一發(fā)明構(gòu)思,本發(fā)明實施例還提供一種數(shù)據(jù)訪問裝置,該裝置可以包括接收模塊701和處理模塊702,可選的,該裝置還可以包括發(fā)送模塊703。在實際應用中,該裝置可以通過軟件方式實現(xiàn),或者也可以通過硬件方式實現(xiàn),比如,該裝置中的處理模塊702對應的實體設備可以是圖4a-圖4b中的處理器402,接收模塊701對應的實體設備可以是圖4a-圖4b中的接收器403,發(fā)送模塊703對應的實體設備可以是圖4b中的發(fā)送器404。該裝置可以用于執(zhí)行上述圖6所述的方法,因此,對于該裝置中的各單元所實現(xiàn)的功能等,可參考如前方法部分的描述,不多贅述。本發(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ù),另一方面也可以考慮數(shù)據(jù)量較大的數(shù)據(jù)的高訪問性能,比如可以采用物理數(shù)據(jù)表類型的數(shù)據(jù)表存儲數(shù)據(jù)量較大的數(shù)據(jù),等等,分別為不同的數(shù)據(jù)提供較為適合的存儲方式,使得數(shù)據(jù)庫中的存儲方式更為合理。在訪問數(shù)據(jù)時只需根據(jù)訪問請求確定所訪問的數(shù)據(jù)所在的數(shù)據(jù)表的類型即可實現(xiàn)對數(shù)據(jù)的訪問,實現(xiàn)較為簡單,便于推廣使用。在本發(fā)明中,應該理解到,所揭露的裝置、系統(tǒng)和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元或單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性或其它的形式。所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本發(fā)明實施例。在本發(fā)明實施例中的各功能單元可以集成在一個處理單元中,或者各個單元也可以均是獨立的物理模塊。所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)或處理器(processor)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:通用串行總線閃存盤(universalserialbusflashdrive)、移動硬盤、rom、ram、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。以上所述,以上實施例僅用以對本發(fā)明的技術(shù)方案進行了詳細介紹,但以上實施例的說明只是用于幫助理解本發(fā)明實施例的方法,不應理解為對本發(fā)明實施例的限制。本
技術(shù)領域:
的技術(shù)人員可輕易想到的變化或替換,都應涵蓋在本發(fā)明實施例的保護范圍之內(nèi)。當前第1頁12