本發(fā)明涉及信息技術(shù)領(lǐng)域,并且更具體地,涉及存儲數(shù)據(jù)的方法和裝置。
背景技術(shù):
鍵值(KeyValue)類型分布式數(shù)據(jù)庫作為分布式列存儲數(shù)據(jù)庫具有高可伸縮性和魯棒性,已經(jīng)在越來越多的系統(tǒng)中得到了廣泛的使用。KeyValue類型分布式數(shù)據(jù)庫的用戶表通常被設(shè)計用來存放數(shù)據(jù)格式相對簡單,關(guān)系簡單但可能是海量的數(shù)據(jù),例如:用來存儲網(wǎng)頁地址信息,用來存儲通話記錄信息,用來存儲上網(wǎng)記錄信息,等等。它能夠根據(jù)數(shù)據(jù)記錄的行鍵(RowKey)提供快速的查詢,無關(guān)數(shù)據(jù)量的大小。它能夠在當前的存儲空間使用率達到一定閾值的時候動態(tài)的擴充物理節(jié)點。
在企業(yè)現(xiàn)有數(shù)據(jù)庫應(yīng)用中,通常關(guān)聯(lián)很多個用戶數(shù)據(jù)表,這些數(shù)據(jù)表的大小不一,并且表與表之間的數(shù)據(jù)可能存在內(nèi)在的關(guān)聯(lián)。而基于稀疏矩陣的KeyValue類型的分布式數(shù)據(jù)庫適合存放大數(shù)據(jù)量表,如果原樣將這些表導入到KeyValue類型分布式數(shù)據(jù)庫中,則存在過多的小表,不僅難以實現(xiàn)跨表的關(guān)聯(lián)查詢,而且會增加管理上的復雜度。也就是說,當將傳統(tǒng)應(yīng)用中的數(shù)據(jù)遷移到KeyValue類型的分布式數(shù)據(jù)庫中,為了完成用戶表與用戶表之間的關(guān)聯(lián)查詢,需要查詢不同的表,不斷進行數(shù)據(jù)定位導致效率低下。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種存儲數(shù)據(jù)的方法和裝置,能夠提高查詢數(shù)據(jù)的效率。
第一方面,提供了一種存儲數(shù)據(jù)的方法,包括:確定待存儲到KeyValue類型分布式數(shù)據(jù)庫中的至少兩個數(shù)據(jù)對象的相同的列屬性;確定該至少兩個數(shù)據(jù)對象中的每個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的格式,其中,該行標識的格式包括該相同的列屬性和數(shù)據(jù)對象標識,該至少兩個數(shù)據(jù)對象中的不同數(shù)據(jù)對象的數(shù)據(jù)對象標識在該行標識的格式中的位置相同且位于該相同的列屬性之后;根據(jù)確定的該每個數(shù)據(jù)對象的該行標識的格式,確定該每個數(shù)據(jù)對象的每條數(shù)據(jù)記錄的行標識的值;在該KeyValue類型分布式數(shù)據(jù)庫中存儲該每條數(shù)據(jù)記錄的行標識的值和該每條數(shù)據(jù)記錄,其中,該每條數(shù)據(jù)記錄的行標識的值作為該每條數(shù)據(jù)記錄在該KeyValue類型分布式數(shù)據(jù)庫中的主索引。
在第一種可能的實現(xiàn)方式中,該方法還包括:針對該每條數(shù)據(jù)記錄的行標識的值,按照第一順序?qū)υ撁織l數(shù)據(jù)記錄進行排序,使該至少兩個數(shù)據(jù)對象的所有數(shù)據(jù)記錄形成聚簇表。
結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,該第一順序為字典順序。
結(jié)合第一方面或第一方面的第一或二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,該方法還包括:接收數(shù)據(jù)請求,該數(shù)據(jù)請求指示對該至少兩個數(shù)據(jù)對象中的數(shù)據(jù)記錄進行查詢或獲??;根據(jù)該行標識的格式,構(gòu)造在該KeyValue類型分布式數(shù)據(jù)庫中進行查詢的查詢信息,其中,該查詢信息包括該相同的列屬性;根據(jù)該查詢信息,導出該KeyValue類型分布式數(shù)據(jù)庫中主索引包含該查詢信息的數(shù)據(jù)記錄。
結(jié)合第一方面或第一方面的第一至三種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,確定該至少兩個數(shù)據(jù)對象中的每個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的格式,包括:為該至少兩個數(shù)據(jù)對象指定在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的第一前綴,其中,該第一前綴為常量;確定該至少兩個數(shù)據(jù)對象中的第一數(shù)據(jù)對象的該行標識的格式包括該第一前綴、該相同的列屬性和該第一數(shù)據(jù)對象的數(shù)據(jù)對象標識;或者,確定該至少兩個數(shù)據(jù)對象中的第二數(shù)據(jù)對象的該行標識的格式包括該第一前綴、該相同的列屬性、該第二數(shù)據(jù)對象的數(shù)據(jù)對象標識和該第二數(shù)據(jù)對象的列屬性中能區(qū)分該第二數(shù)據(jù)對象的所有數(shù)據(jù)記錄的列屬性。
結(jié)合第一方面的第四種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,該查詢信息包括該第一前綴和該相同的列屬性。
結(jié)合第一方面的第四或五種可能的實現(xiàn)方式,在第六種可能的實現(xiàn)方式中,該方法還包括:確定該至少兩個數(shù)據(jù)對象中任一個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的二級索引的格式為第二前綴,第二屬性和該相同的列屬性,其中,該第二屬性為該任一個數(shù)據(jù)對象的列屬性中不同于該相同屬性的列屬性,該第二前綴為與該第一前綴不同的常量;根據(jù)該任一個數(shù)據(jù)對象的該二級索引的格式確定該任一個數(shù)據(jù)對象的二級索引;在該KeyValue類型分布式數(shù)據(jù)庫中存儲該任一個數(shù)據(jù)對象的二級索引。
結(jié)合第一方面或第一方面的第一至六種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第七種可能的實現(xiàn)方式中,該行標識的格式中的各個字段之間設(shè)置分隔符,或者,該各個字段具有固定長度。
第二方面,提供了一種存儲數(shù)據(jù)的裝置,包括:確定模塊,用于確定待存儲到鍵值KeyValue類型分布式數(shù)據(jù)庫中的至少兩個數(shù)據(jù)對象的相同的列屬性,確定該至少兩個數(shù)據(jù)對象中的每個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的格式,其中,該行標識的格式包括該相同的列屬性和數(shù)據(jù)對象標識,該至少兩個數(shù)據(jù)對象中的不同數(shù)據(jù)對象的數(shù)據(jù)對象標識在該行標識的格式中的位置相同且位于該相同的列屬性之后,根據(jù)確定的該每個數(shù)據(jù)對象的該行標識的格式,確定該每個數(shù)據(jù)對象的每條數(shù)據(jù)記錄的行標識的值;存儲模塊,用于在該KeyValue類型分布式數(shù)據(jù)庫中存儲該每條數(shù)據(jù)記錄的行標識的值和該每條數(shù)據(jù)記錄,其中,該每條數(shù)據(jù)記錄的行標識的值作為該每條數(shù)據(jù)記錄在該KeyValue類型分布式數(shù)據(jù)庫中的主索引。
在第一種可能的實現(xiàn)方式中,該存儲模塊還用于,針對該每條數(shù)據(jù)記錄的行標識的值,按照第一順序?qū)υ撁織l數(shù)據(jù)記錄進行排序,使該至少兩個數(shù)據(jù)對象的所有數(shù)據(jù)記錄形成聚簇表。
結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,該第一順序為字典順序。
結(jié)合第二方面或第二方面的第一或二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,該裝置還包括:接收模塊,用于接收數(shù)據(jù)請求,該數(shù)據(jù)請求指示對該至少兩個數(shù)據(jù)對象中的數(shù)據(jù)記錄進行查詢或獲??;查詢模塊,用于根據(jù)該行標識的格式,構(gòu)造在該KeyValue類型分布式數(shù)據(jù)庫中進行查詢的查詢信息,其中,該查詢信息包括該相同的列屬性,根據(jù)該查詢信息,導出該KeyValue類型分布式數(shù)據(jù)庫中主索引包含該查詢信息的數(shù)據(jù)記錄。
結(jié)合第二方面或第二方面的第一至三種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,該確定模塊具體用于,為該至少兩個數(shù)據(jù)對象指定在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的第一前綴,其中,該第一前綴為常量,確定該至少兩個數(shù)據(jù)對象中的第一數(shù)據(jù)對象的該行標識的格式包括該第一前綴、該相同的列屬性和該第一數(shù)據(jù)對象的數(shù)據(jù)對象標識,或者,確定該至少兩個數(shù)據(jù)對象中的第二數(shù)據(jù)對象的該行標識的格式包括該第一前綴、該相同的列屬性、該第二數(shù)據(jù)對象的數(shù)據(jù)對象標識和該第二數(shù)據(jù)對象的列屬性中能區(qū)分該第二數(shù)據(jù)對象的所有數(shù)據(jù)記錄的列屬性。
結(jié)合第二方面的第四種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,該查詢信息包括該第一前綴和該相同的列屬性。
結(jié)合第二方面的第四或五種可能的實現(xiàn)方式,在第六種可能的實現(xiàn)方式中,該確定模塊還用于,確定該至少兩個數(shù)據(jù)對象中任一個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的二級索引的格式為第二前綴,第二屬性和該相同的列屬性,其中,該第二屬性為該任一個數(shù)據(jù)對象的列屬性中不同于該相同屬性的列屬性,該第二前綴為與該第一前綴不同的常量,根據(jù)該任一個數(shù)據(jù)對象的該二級索引的格式確定該任一個數(shù)據(jù)對象的二級索引;該存儲模塊還用于在該KeyValue類型分布式數(shù)據(jù)庫中存儲該任一個數(shù)據(jù)對象的二級索引。
結(jié)合第二方面或第二方面的第一至六種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第七種可能的實現(xiàn)方式中,該行標識的格式中的各個字段之間設(shè)置分隔符,或者,該各個字段具有固定長度。
基于上述技術(shù)方案,本發(fā)明實施例的存儲數(shù)據(jù)的方法和裝置,通過將相關(guān)聯(lián)的數(shù)據(jù)對象采用包括相同的列屬性的行標識的格式存儲到KeyValue類型分布式數(shù)據(jù)庫中,可以實現(xiàn)對多個數(shù)據(jù)對象進行關(guān)聯(lián)查詢,從而能夠提高查詢數(shù)據(jù)的效率。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對本發(fā)明實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是根據(jù)本發(fā)明實施例的存儲數(shù)據(jù)的方法的示意性流程圖。
圖2是根據(jù)本發(fā)明實施例的確定行標識的格式的方法的示意性流程圖。
圖3是根據(jù)本發(fā)明另一實施例的存儲數(shù)據(jù)的方法的示意性流程圖
圖4是根據(jù)本發(fā)明又一實施例的存儲數(shù)據(jù)的方法的示意性流程圖
圖5是根據(jù)本發(fā)明實施例的存儲數(shù)據(jù)的裝置的示意性框圖。
圖6是根據(jù)本發(fā)明另一實施例的存儲數(shù)據(jù)的裝置的示意性框圖。
圖7是根據(jù)本發(fā)明實施例的存儲數(shù)據(jù)的裝置的結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明的一部分實施例,而不是全部實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都應(yīng)屬于本發(fā)明保護的范圍。
本發(fā)明實施例的技術(shù)方案可以應(yīng)用于KeyValue類型分布式數(shù)據(jù)庫。
在本發(fā)明實施例中,數(shù)據(jù)對象為數(shù)據(jù)表(也簡稱為表)或者具有數(shù)據(jù)表格式的一類數(shù)據(jù)。例如,該類數(shù)據(jù)可以是通話記錄數(shù)據(jù)或者上網(wǎng)記錄數(shù)據(jù),等等。為了描述方便,下述實施例將以數(shù)據(jù)表為例進行說明。
圖1示出了根據(jù)本發(fā)明實施例的存儲數(shù)據(jù)的方法100的示意性流程圖。圖1的方法由存儲數(shù)據(jù)的裝置執(zhí)行。如圖1所示,該方法100包括:
S110,確定待存儲到KeyValue類型分布式數(shù)據(jù)庫中的至少兩個數(shù)據(jù)對象的相同的列屬性;
S120,確定該至少兩個數(shù)據(jù)對象中的每個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的格式,其中,該行標識的格式包括該相同的列屬性和數(shù)據(jù)對象標識,該至少兩個數(shù)據(jù)對象中的不同數(shù)據(jù)對象的數(shù)據(jù)對象標識在該行標識的格式中的位置相同且位于該相同的列屬性之后;
S130,根據(jù)確定的該每個數(shù)據(jù)對象的該行標識的格式,確定該每個數(shù)據(jù)對象的每條數(shù)據(jù)記錄的行標識的值;
S140,在該KeyValue類型分布式數(shù)據(jù)庫中存儲該每條數(shù)據(jù)記錄的行標識的值和該每條數(shù)據(jù)記錄,其中,該每條數(shù)據(jù)記錄的行標識的值作為該每條數(shù)據(jù)記錄在該KeyValue類型分布式數(shù)據(jù)庫中的主索引。
在本發(fā)明實施例中,在多個(即至少兩個)數(shù)據(jù)對象相關(guān)聯(lián)時,即多個數(shù)據(jù)對象具有相同的列屬性時,為了方便對多個數(shù)據(jù)對象的關(guān)聯(lián)查詢,存儲數(shù)據(jù)的裝置將多個數(shù)據(jù)對象存儲到KeyValue類型分布式數(shù)據(jù)庫的一個表中。存儲數(shù)據(jù)的裝置基于該相同的列屬性確定每個數(shù)據(jù)對象在KeyValue類型分布式數(shù)據(jù)庫中的行標識(如RowKey)的格式,其中,該行標識的格式包括該相同的列屬性和數(shù)據(jù)對象標識,該至少兩個數(shù)據(jù)對象中的不同數(shù)據(jù)對象的數(shù)據(jù)對象標識在該行標識的格式中的位置相同且位于該相同的列屬性之后。也就是說,每個數(shù)據(jù)對象的行標識的格式都包括該相同的列屬性以便于查詢,另外,還包括與數(shù)據(jù)對象對應(yīng)的數(shù)據(jù)對象標識以區(qū)別不同數(shù)據(jù)對象。不同數(shù)據(jù)對象的數(shù)據(jù)對象標識在行標識的格式中的位置相同且位于相同的列屬性之后以使不同數(shù)據(jù)對象的行標識的格式保持相一致的結(jié)構(gòu)。然后,存儲數(shù)據(jù)的裝置根據(jù)確定的行標識的格式確定每個數(shù)據(jù)對象中的每條數(shù)據(jù)記錄的行標識的值,再在KeyValue類型分布式數(shù)據(jù)庫中存儲每條數(shù)據(jù)記錄的行標識的值和每條數(shù)據(jù)記錄,其中,每條數(shù)據(jù)記錄的行標識的值作為每條數(shù)據(jù)記錄在KeyValue類型分布式數(shù)據(jù)庫中的主索引。由于相關(guān)聯(lián)的多個數(shù)據(jù)對象采用了一致的行標識的格式,這樣,在查詢數(shù)據(jù)時,按照行標識的格式構(gòu)造查詢信息,可以實現(xiàn)在一個數(shù)據(jù)表中對多個數(shù)據(jù)對象進行關(guān)聯(lián)查詢,從而能夠提高查詢數(shù)據(jù)的效率。
因此,本發(fā)明實施例的存儲數(shù)據(jù)的方法,通過將相關(guān)聯(lián)的數(shù)據(jù)對象采用包括相同的列屬性的行標識的格式存儲到KeyValue類型分布式數(shù)據(jù)庫中,可以實現(xiàn)對多個數(shù)據(jù)對象進行關(guān)聯(lián)查詢,從而能夠提高查詢數(shù)據(jù)的效率。
應(yīng)理解,在本發(fā)明實施例中,行標識為每一行數(shù)據(jù)的標識。行標識可以表述為RowKey,也可以表述為Key,本發(fā)明對此并不限定。為了描述方便,下述實施例以RowKey為例進行說明。
下面結(jié)合具體的例子對本發(fā)明實施例進行詳細描述。應(yīng)注意,其中的例子只是為了幫助本領(lǐng)域技術(shù)人員更好地理解本發(fā)明實施例,而非限制本發(fā)明實施例的范圍。
在S110中,存儲數(shù)據(jù)的裝置確定待存儲到KeyValue類型分布式數(shù)據(jù)庫中的至少兩個數(shù)據(jù)對象的相同的列屬性
多個數(shù)據(jù)對象具有相同的列屬性即多個數(shù)據(jù)對象相關(guān)聯(lián)。
例如,數(shù)據(jù)對象A,以記錄學生信息的表1為例,其屬性信息包括姓名(Name),學號(Id),性別(Sex),班級(Dept)等列(Column)屬性。
表1
數(shù)據(jù)對象B,以記錄學生選課信息的表2為例,其屬性信息包括編號(No),學號(Id),課程(course)等列屬性。
表2
表1和表2都有Id列,也就是說,表1和表2有相同的列屬性Id,因此,表1和表2為相關(guān)聯(lián)的數(shù)據(jù)對象。
在S120中,存儲數(shù)據(jù)的裝置確定該至少兩個數(shù)據(jù)對象中的每個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的格式。
該行標識的格式包括該相同的列屬性和數(shù)據(jù)對象標識,該至少兩個數(shù)據(jù)對象中的不同數(shù)據(jù)對象的數(shù)據(jù)對象標識在該行標識的格式中的位置相同且位于該相同的列屬性之后。
具體而言,在本發(fā)明實施例中,為了提高查詢數(shù)據(jù)的效率,并不將每個數(shù)據(jù)對象采用一個獨立的表進行保存,而是將多個數(shù)據(jù)對象按照統(tǒng)一的的格式存儲到一個表中,由此實現(xiàn)關(guān)聯(lián)查詢。為了實現(xiàn)將多個數(shù)據(jù)對象的存儲到一個表中,需要預(yù)先配置行標識的格式,以預(yù)先設(shè)計RowKey的格式為例,即預(yù)先指明RowKey是由哪些組成元素,以及組成元素如何組合。在本實施例中,行標識的組成元素包含:至少兩個數(shù)據(jù)對象的相同的列屬性以及數(shù)據(jù)對象標識。該相同的列屬性用于將該至少兩個數(shù)據(jù)對象關(guān)聯(lián)存儲起來,該數(shù)據(jù)對象標識用于表示每行數(shù)據(jù)來源于哪個數(shù)據(jù)對象。其中,數(shù)據(jù)對象標識位于相同的列屬性之后,每個數(shù)據(jù)對象的數(shù)據(jù)對象標識在行標識的格式中的位置相同。具體地,不同數(shù)據(jù)對象的數(shù)據(jù)對象標識可以為不同的常量,用來區(qū)分不同的數(shù)據(jù)對象。
在本發(fā)明實施例中,可選地,如圖2所示,S120包括:
S121,為該至少兩個數(shù)據(jù)對象指定在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的第一前綴,其中,該第一前綴為常量;
S122,確定該至少兩個數(shù)據(jù)對象中的第一數(shù)據(jù)對象的該行標識的格式包括該第一前綴、該相同的列屬性和該第一數(shù)據(jù)對象的數(shù)據(jù)對象標識;或者,
S123,確定該至少兩個數(shù)據(jù)對象中的第二數(shù)據(jù)對象的該行標識的格式包括該第一前綴、該相同的列屬性、該第二數(shù)據(jù)對象的數(shù)據(jù)對象標識和該第二數(shù)據(jù)對象的列屬性中能區(qū)分該第二數(shù)據(jù)對象的所有數(shù)據(jù)記錄的列屬性。
具體而言,在本實施例中,行標識中包含一個相同的前綴(表示為第一前綴)。以RowKey為例,即RowKey采用如下格式:
RowKey=第一前綴+相同的列屬性+數(shù)據(jù)對象標識(+其他屬性)。
在本實施例中,對于不同數(shù)據(jù)對象,RowKey格式采用相同的第一前綴和相同屬性,這樣,在按照RowKey值的順序存放數(shù)據(jù)記錄時,不同的數(shù)據(jù)對象的數(shù)據(jù)記錄能夠相鄰存放(稱為聚簇存放)。再通過每個數(shù)據(jù)對象對應(yīng)的數(shù)據(jù)對象標識區(qū)分不同的數(shù)據(jù)對象。另外,在該相同的列屬性能夠區(qū)分一個數(shù)據(jù)對象(表示為第一數(shù)據(jù)對象)的所有數(shù)據(jù)記錄時,例如,表1中Id屬性能夠區(qū)分表1的所有數(shù)據(jù)記錄,第一數(shù)據(jù)對象的RowKey格式不再包括其他屬性;在該相同屬性不能區(qū)分一個數(shù)據(jù)對象(表示為第二數(shù)據(jù)對象)的所有數(shù)據(jù)記錄時,例如,表2中Id屬性不能區(qū)分表2的所有數(shù)據(jù)記錄,第二數(shù)據(jù)對象的RowKey格式還要包括第二數(shù)據(jù)對象的其他列屬性中能區(qū)分該第二數(shù)據(jù)對象的所有數(shù)據(jù)記錄的屬性,例如,表2的No屬性。
以表1和表2為例,它們的相同的列屬性為Id。對于表1,Id能夠區(qū)分表1的所有數(shù)據(jù)記錄,因此,表1的RowKey格式可以為:
A(第一前綴)+Id+M(M為表1對應(yīng)的數(shù)據(jù)對象標識)。
對于表2,Id不能區(qū)分表2的所有數(shù)據(jù)記錄,No能區(qū)分表2的所有數(shù)據(jù)記錄,因此,表2的RowKey格式可以為:
A(第一前綴)+Id+N(N為表2對應(yīng)的數(shù)據(jù)對象標識)+No。
在本發(fā)明實施例中,可選地,該行標識的格式中的各個字段之間設(shè)置分隔符,或者,該各個字段具有固定長度。
也就是說,上述RowKey格式中的“+”可以為分隔符?;蛘撸琑owKey格式的各個字段可以設(shè)置固定長度,在這種情況下“+”實際并不存在。
在S130中,存儲數(shù)據(jù)的裝置根據(jù)確定的該每個數(shù)據(jù)對象的該行標識的格式,確定該每個數(shù)據(jù)對象的每條數(shù)據(jù)記錄的行標識的值。
具體地,以RowKey為例,存儲數(shù)據(jù)的裝置根據(jù)確定的RowKey的格式確定每個數(shù)據(jù)對象中的每條數(shù)據(jù)記錄的RowKey值。
例如,對于數(shù)據(jù)對象A中的第一條數(shù)據(jù)記錄,RowKey值為A0001M;對于數(shù)據(jù)對象B中的第一條數(shù)據(jù)記錄,RowKey值為A0001N1,以此類推。
在S140中,存儲數(shù)據(jù)的裝置在該KeyValue類型分布式數(shù)據(jù)庫中存儲該每條數(shù)據(jù)記錄的行標識的值和該每條數(shù)據(jù)記錄。
該每條數(shù)據(jù)記錄的行標識的值作為該每條數(shù)據(jù)記錄在該KeyValue類型分布式數(shù)據(jù)庫中的主索引。
在本發(fā)明實施例中,可選地,如圖3所示,該方法100還包括:
S150,針對該每條數(shù)據(jù)記錄的行標識的值,按照第一順序?qū)υ撁織l數(shù)據(jù)記錄進行排序,使該至少兩個數(shù)據(jù)對象的所有數(shù)據(jù)記錄形成聚簇表。
本發(fā)明實施例按行標識的值的順序?qū)?shù)據(jù)記錄存放到KeyValue類型分布式數(shù)據(jù)庫中,使多個數(shù)據(jù)對象的數(shù)據(jù)記錄形成聚簇表。這種聚簇表存放方式能夠?qū)⑿袠俗R的值的范圍與分區(qū)對應(yīng),即一條數(shù)據(jù)記錄的行標識的值屬于哪個范圍,該數(shù)據(jù)記錄就在哪個范圍對應(yīng)的分區(qū),因而可以支持按范圍查詢。
該第一順序可以是字典順序,例如,可以按RowKey值的字典順序?qū)⒚織l數(shù)據(jù)記錄在KeyValue類型分布式數(shù)據(jù)庫中排列。該第一順序還可以是其他順序,例如,大小順序,即可以按照RowKey值的大小順序依次存放數(shù)據(jù)記錄,RowKey值小的存放在前,RowKey值大的存放在后,或者,RowKey值大的存放在前,RowKey值小的存放在后。本發(fā)明實施例對該第一順序并不限定。為了便于描述,下述實施例將以RowKey值的字典順序為例進行說明。
以表1和表2為例,按照RowKey值的字典順序在KeyValue類型分布式數(shù)據(jù)庫中存放得到表3。
表3
(包含斜線的列,表示本行數(shù)據(jù)無此列,在存儲上不占據(jù)任何空間,下同)
采用本發(fā)明實施例的存儲數(shù)據(jù)的方法,相關(guān)聯(lián)的不同數(shù)據(jù)對象的數(shù)據(jù)記錄可以相鄰存放,形成聚簇表。例如,表3中的第1條數(shù)據(jù)記錄為原表1的第1條記錄,表3中的第2-4條記錄為原表2的第1-3條記錄,這些數(shù)據(jù)記錄因為有相同的Id而在KeyValue類型分布式數(shù)據(jù)庫中被相鄰存放。通過相鄰存放可以加快數(shù)據(jù)訪問速率,進一步提高查詢效率。
下面描述對按照上述存儲方法得到的數(shù)據(jù)表進行查詢的實施方式。
在本發(fā)明實施例中,可選地,如圖4所示,該方法100還包括:
S160,接收數(shù)據(jù)請求,該數(shù)據(jù)請求指示對該至少兩個數(shù)據(jù)對象中的數(shù)據(jù)記錄進行查詢或獲??;
S170,根據(jù)該行標識的格式,構(gòu)造在該KeyValue類型分布式數(shù)據(jù)庫中進行查詢的查詢信息,其中,該查詢信息包括該相同的列屬性;
S180,根據(jù)該查詢信息,導出該KeyValue類型分布式數(shù)據(jù)庫中主索引包含該查詢信息的數(shù)據(jù)記錄。
具體而言,在接收到查詢或獲取數(shù)據(jù)記錄的數(shù)據(jù)請求時,存儲數(shù)據(jù)的裝置根據(jù)行標識的格式,構(gòu)造查詢信息,該查詢信息要包括相同的列屬性,然后,存儲數(shù)據(jù)的裝置采用構(gòu)造的查詢信息進行查詢,得到KeyValue類型分布式數(shù)據(jù)庫中主索引包含該查詢信息的數(shù)據(jù)記錄。
可選地,在行標識的格式包括第一前綴時,該查詢信息包括該第一前綴和該相同的列屬性。
例如,當通過學生學號(Id=0001)來獲取學生信息和學生選課信息時,可以構(gòu)造查詢信息:A0001,通過范圍查詢即可在表3中查詢得到學生學號(Id=0001)的學生信息和學生選課信息。得到的查詢結(jié)果如表4所示。在查詢過程中,僅需要查詢一張表,完成一次用戶數(shù)據(jù)的定位,學生信息和學生選課信息相鄰存放可以快速返回。
表4
因此,本發(fā)明實施例的存儲數(shù)據(jù)的方法,通過將相關(guān)聯(lián)的數(shù)據(jù)對象采用包括相同的列屬性的行標識的格式存儲到KeyValue類型分布式數(shù)據(jù)庫中,可以將相關(guān)聯(lián)的數(shù)據(jù)對象聚簇存放到一個數(shù)據(jù)表中,實現(xiàn)在一個數(shù)據(jù)表中進行關(guān)聯(lián)查詢,從而能夠提高查詢數(shù)據(jù)的效率。
在本發(fā)明實施例中,可選地,該方法100還包括:
確定該至少兩個數(shù)據(jù)對象中任一個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的二級索引的格式為第二前綴,第二屬性和該相同的列屬性,其中,該第二屬性為該任一個數(shù)據(jù)對象的列屬性中不同于該相同屬性的列屬性,該第二前綴為與該第一前綴不同的常量;
根據(jù)該任一個數(shù)據(jù)對象的該二級索引的格式確定該任一個數(shù)據(jù)對象的二級索引;
在該KeyValue類型分布式數(shù)據(jù)庫中存儲該任一個數(shù)據(jù)對象的二級索引。具體而言,為了滿足復雜查詢場景,可以對數(shù)據(jù)對象構(gòu)建二級索引信息。同一個數(shù)據(jù)對象的主索引與二級索引的數(shù)據(jù)存放在同一個表中,但采用不同的行標識的格式,實現(xiàn)在同一個表內(nèi)的數(shù)據(jù)隔離。同時可以通過二級索引信息完成關(guān)聯(lián)查詢。二級索引的行標識的格式為第二前綴,第二屬性和該相同屬性。第二前綴不同于第一前綴以實現(xiàn)數(shù)據(jù)隔離;該第二屬性為不同于該相同屬性的屬性,以便于根據(jù)該第二屬性構(gòu)造查詢信息;該相同屬性用于與主索引相關(guān)聯(lián)。
例如,在將數(shù)據(jù)對象表1和數(shù)據(jù)對象表2存儲到KeyValue類型分布式數(shù)據(jù)庫中時,表1的主索引RowKey格式可以為:A+Id+M;表2的主索引RowKey格式可以為:A+Id+N+No;表1的二級索引RowKey格式可以為:B+Name+Id。這樣,按照RowKey值的字典順序在KeyValue類型分布式數(shù)據(jù)庫中存放得到表5。
表5
應(yīng)理解,與二級索引RowKey對應(yīng)的各列中,也可以存儲列信息,例如個別關(guān)鍵的列信息,本發(fā)明實施例對此并不限定。
當通過學生姓名(Name=張三)來獲取學生信息和學生選課信息時,可以構(gòu)造查詢信息:B張三,通過范圍查詢即可在表5中查詢得到完整的二級索引RowKey信息:B張三0001。解析二級索引RowKey,得到Id=0001。再構(gòu)造查詢信息:A0001,進行再次查詢即可在表5中得到學生信息和學生選課信息。這樣便于在用戶只知道Name不知道Id時進行查詢。
因此,本發(fā)明實施例的存儲數(shù)據(jù)的方法,通過在KeyValue類型分布式數(shù)據(jù)庫中存儲數(shù)據(jù)對象的二級索引,可以提供給用戶更豐富多樣的查詢場景,方便用戶查詢,從而能夠提高查詢數(shù)據(jù)的效率。
在本發(fā)明實施例中,多個數(shù)據(jù)對象的行標識的格式還可以有其他實現(xiàn)方式,例如,不同數(shù)據(jù)對象的行標識的格式可以采用不同的前綴,或者,不使用前綴。
例如,不使用前綴時,RowKey采用如下格式:
RowKey=相同的列屬性+數(shù)據(jù)對象標識(+其他屬性)。
通過相同的列屬性實現(xiàn)不同的數(shù)據(jù)對象的數(shù)據(jù)記錄能夠相鄰存放,再通過每個數(shù)據(jù)對象對應(yīng)的數(shù)據(jù)對象標識區(qū)分不同的數(shù)據(jù)對象。另外,在該相同的列屬性能夠區(qū)分一個數(shù)據(jù)對象(表示為第一數(shù)據(jù)對象)的所有數(shù)據(jù)記錄時,第一數(shù)據(jù)對象的RowKey格式不再包括其他屬性;在該相同的列屬性不能區(qū)分一個數(shù)據(jù)對象(表示為第二數(shù)據(jù)對象)的所有數(shù)據(jù)記錄時,第二數(shù)據(jù)對象的RowKey格式還要包括第二數(shù)據(jù)對象的其他列屬性中能區(qū)分該第二數(shù)據(jù)對象的所有數(shù)據(jù)記錄的屬性。
以表1和表2為例,它們的相同的列屬性為Id。對于表1,Id能夠區(qū)分表1的所有數(shù)據(jù)記錄,因此,表1的RowKey格式可以為:
Id+M。
對于表2,Id不能區(qū)分表2的所有數(shù)據(jù)記錄,No能區(qū)分表2的所有數(shù)據(jù)記錄,因此,表2的RowKey格式可以為:
Id+N+No。
這樣,按照RowKey值的字典順序在KeyValue類型分布式數(shù)據(jù)庫中存放得到表6。
表6
當通過學生學號(Id=0001)來獲取學生信息和學生選課信息時,可以構(gòu)造查詢信息:0001,通過范圍查詢即可查詢得到學生學號(Id=0001)學生信息和學生選課信息。在查詢過程中,僅需要查詢一張表,完成一次用戶數(shù)據(jù)的定位,學生信息和學生選課信息相鄰存放可以快速返回。
不同數(shù)據(jù)對象采用不同的前綴時,RowKey采用如下格式:
RowKey=數(shù)據(jù)對象對應(yīng)的前綴)+相同的列屬性(+其他屬性)。
不同的數(shù)據(jù)對象采用不同的前綴實現(xiàn)不同數(shù)據(jù)對象的分區(qū)存放。另外,在該相同的列屬性能夠區(qū)分一個數(shù)據(jù)對象(表示為第一數(shù)據(jù)對象)的所有數(shù)據(jù)記錄時,第一數(shù)據(jù)對象的RowKey格式不再包括其他屬性;在該相同的列屬性不能區(qū)分一個數(shù)據(jù)對象(表示為第二數(shù)據(jù)對象)的所有數(shù)據(jù)記錄時,第二數(shù)據(jù)對象的RowKey格式還要包括第二數(shù)據(jù)對象的其他列屬性中能區(qū)分該第二數(shù)據(jù)對象的所有數(shù)據(jù)記錄的屬性。
以表1和表2為例,它們的相同的列屬性為Id。對于表1,Id能夠區(qū)分表1的所有數(shù)據(jù)記錄,因此,表1的RowKey格式可以為:
A+Id。
對于表2,Id不能區(qū)分表2的所有數(shù)據(jù)記錄,No能標識表2的所有數(shù)據(jù)記錄,因此,表2的RowKey格式可以為:
B+Id+No。
這樣,按照RowKey值的字典順序在KeyValue類型分布式數(shù)據(jù)庫中存放得到表7。
表7
通過不同數(shù)據(jù)對象的RowKey格式采用不同的前綴,可以實現(xiàn)不同數(shù)據(jù)對象在KeyValue類型分布式數(shù)據(jù)庫中的分區(qū)存放。
應(yīng)理解,在本發(fā)明的各種實施例中,上述各過程的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對本發(fā)明實施例的實施過程構(gòu)成任何限定。
本發(fā)明實施例的存儲數(shù)據(jù)的方法,通過將多個數(shù)據(jù)對象按照統(tǒng)一的行標識的格式存儲到KeyValue類型分布式數(shù)據(jù)庫中的一個數(shù)據(jù)表中,能夠方便數(shù)據(jù)庫的管理,提高查詢數(shù)據(jù)的效率。
上文詳細描述了根據(jù)本發(fā)明實施例的存儲數(shù)據(jù)的方法,下面將描述根據(jù)本發(fā)明實施例的存儲數(shù)據(jù)的裝置。
圖5示出了根據(jù)本發(fā)明實施例的存儲數(shù)據(jù)的裝置500的示意性框圖。如圖5所示,該裝置500包括:
確定模塊510,用于確定待存儲到鍵值KeyValue類型分布式數(shù)據(jù)庫中的至少兩個數(shù)據(jù)對象的相同的列屬性,確定該至少兩個數(shù)據(jù)對象中的每個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的格式,其中,該行標識的格式包括該相同的列屬性和數(shù)據(jù)對象標識,該至少兩個數(shù)據(jù)對象中的不同數(shù)據(jù)對象的數(shù)據(jù)對象標識在該行標識的格式中的位置相同且位于該相同的列屬性之后,根據(jù)確定的該每個數(shù)據(jù)對象的該行標識的格式,確定該每個數(shù)據(jù)對象的每條數(shù)據(jù)記錄的行標識的值;
存儲模塊520,用于在該KeyValue類型分布式數(shù)據(jù)庫中存儲該每條數(shù)據(jù)記錄的行標識的值和該每條數(shù)據(jù)記錄,其中,該每條數(shù)據(jù)記錄的行標識的值作為該每條數(shù)據(jù)記錄在該KeyValue類型分布式數(shù)據(jù)庫中的主索引。
在多個(即至少兩個)數(shù)據(jù)對象相關(guān)聯(lián)時,即多個數(shù)據(jù)對象具有相同的列屬性時,為了方便對多個數(shù)據(jù)對象的關(guān)聯(lián)查詢,存儲數(shù)據(jù)的裝置500將多個數(shù)據(jù)對象存儲到KeyValue類型分布式數(shù)據(jù)庫的一個表中。確定模塊510基于該相同的列屬性確定每個數(shù)據(jù)對象在KeyValue類型分布式數(shù)據(jù)庫中的行標識(如RowKey)的格式,其中,該行標識的格式包括該相同的列屬性和數(shù)據(jù)對象標識,該至少兩個數(shù)據(jù)對象中的不同數(shù)據(jù)對象的數(shù)據(jù)對象標識在該行標識的格式中的位置相同且位于該相同的列屬性之后。也就是說,每個數(shù)據(jù)對象的行標識的格式都包括該相同的列屬性以便于查詢,另外,還包括與數(shù)據(jù)對象對應(yīng)的數(shù)據(jù)對象標識以區(qū)別不同數(shù)據(jù)對象。不同數(shù)據(jù)對象的數(shù)據(jù)對象標識在行標識的格式中的位置相同且位于相同的列屬性之后以使不同數(shù)據(jù)對象的行標識的格式保持相一致的結(jié)構(gòu)。然后,確定模塊510根據(jù)確定的行標識的格式確定每個數(shù)據(jù)對象中的每條數(shù)據(jù)記錄的行標識的值。存儲模塊520在KeyValue類型分布式數(shù)據(jù)庫中存儲每條數(shù)據(jù)記錄的行標識的值和每條數(shù)據(jù)記錄,其中,每條數(shù)據(jù)記錄的行標識的值作為每條數(shù)據(jù)記錄在KeyValue類型分布式數(shù)據(jù)庫中的主索引。由于相關(guān)聯(lián)的多個數(shù)據(jù)對象采用了一致的行標識的格式,這樣,在查詢數(shù)據(jù)時,按照行標識的格式構(gòu)造查詢信息,可以實現(xiàn)在一個數(shù)據(jù)表中對多個數(shù)據(jù)對象進行關(guān)聯(lián)查詢,從而能夠提高查詢數(shù)據(jù)的效率。
因此,本發(fā)明實施例的存儲數(shù)據(jù)的裝置,通過將相關(guān)聯(lián)的數(shù)據(jù)對象采用包括相同的列屬性的對多個數(shù)據(jù)對象格式存儲到KeyValue類型分布式數(shù)據(jù)庫中,可以實現(xiàn)對多個數(shù)據(jù)對象進行關(guān)聯(lián)查詢,從而能夠提高查詢數(shù)據(jù)的效率。
在本發(fā)明實施例中,可選地,該存儲模塊520還用于,針對該每條數(shù)據(jù)記錄的行標識的值,按照第一順序?qū)υ撁織l數(shù)據(jù)記錄進行排序,使該至少兩個數(shù)據(jù)對象的所有數(shù)據(jù)記錄形成聚簇表。
在本發(fā)明實施例中,可選地,該第一順序為字典順序。
在本發(fā)明實施例中,可選地,該確定模塊510具體用于,為該至少兩個數(shù)據(jù)對象指定在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的第一前綴,其中,該第一前綴為常量,確定該至少兩個數(shù)據(jù)對象中的第一數(shù)據(jù)對象的該行標識的格式包括該第一前綴、該相同的列屬性和該第一數(shù)據(jù)對象的數(shù)據(jù)對象標識,或者,確定該至少兩個數(shù)據(jù)對象中的第二數(shù)據(jù)對象的該行標識的格式包括該第一前綴、該相同的列屬性、該第二數(shù)據(jù)對象的數(shù)據(jù)對象標識和該第二數(shù)據(jù)對象的列屬性中能區(qū)分該第二數(shù)據(jù)對象的所有數(shù)據(jù)記錄的列屬性。
在本發(fā)明實施例中,可選地,如圖6所示,該裝置500還包括:
接收模塊530,用于接收數(shù)據(jù)請求,該數(shù)據(jù)請求指示對該至少兩個數(shù)據(jù)對象中的數(shù)據(jù)記錄進行查詢或獲?。?/p>
查詢模塊540,用于根據(jù)該行標識的格式,構(gòu)造在該KeyValue類型分布式數(shù)據(jù)庫中進行查詢的查詢信息,其中,該查詢信息包括該相同的列屬性,根據(jù)該查詢信息,導出該KeyValue類型分布式數(shù)據(jù)庫中主索引包含該查詢信息的數(shù)據(jù)記錄。
可選地,在行標識的格式包括第一前綴時,該查詢信息包括該第一前綴和該相同的列屬性。
在本發(fā)明實施例中,可選地,該確定模塊510還用于,確定該至少兩個數(shù)據(jù)對象中任一個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的二級索引的格式為第二前綴,第二屬性和該相同的列屬性,其中,該第二屬性為該任一個數(shù)據(jù)對象的列屬性中不同于該相同屬性的列屬性,該第二前綴為與該第一前綴不同的常量,根據(jù)該任一個數(shù)據(jù)對象的該二級索引的格式確定該任一個數(shù)據(jù)對象的二級索引;
該存儲模塊520還用于在該KeyValue類型分布式數(shù)據(jù)庫中存儲該任一個數(shù)據(jù)對象的二級索引。
本發(fā)明實施例的存儲數(shù)據(jù)的裝置,通過在KeyValue類型分布式數(shù)據(jù)庫中存儲數(shù)據(jù)對象的二級索引,可以提供給用戶更豐富多樣的查詢場景,方便用戶查詢,從而能夠提高查詢數(shù)據(jù)的效率。
在本發(fā)明實施例中,可選地,該行標識的格式中的各個字段之間設(shè)置分隔符,或者,該各個字段具有固定長度。
根據(jù)本發(fā)明實施例的存儲數(shù)據(jù)的裝置500可對應(yīng)于根據(jù)本發(fā)明實施例的的方法中的存儲數(shù)據(jù)的裝置,并且存儲數(shù)據(jù)的裝置500中的各個模塊的上述和其它操作和/或功能分別為了實現(xiàn)圖1至圖4中的各個方法的相應(yīng)流程,為了簡潔,在此不再贅述。
本發(fā)明實施例的存儲數(shù)據(jù)的裝置,通過將多個數(shù)據(jù)對象按照統(tǒng)一的行標識的格式存儲到KeyValue類型分布式數(shù)據(jù)庫中的一個數(shù)據(jù)表中,能夠方便數(shù)據(jù)庫的管理,提高查詢數(shù)據(jù)的效率。
圖7示出了本發(fā)明另一個實施例提供的存儲數(shù)據(jù)的裝置的結(jié)構(gòu),包括至少一個處理器702(例如CPU),至少一個網(wǎng)絡(luò)接口705或者其他通信接口,存儲器706,和至少一個通信總線703,用于實現(xiàn)這些裝置之間的連接通信。處理器702用于執(zhí)行存儲器706中存儲的可執(zhí)行模塊,例如計算機程序。存儲器706可能包含高速隨機存取存儲器(RAM:Random Access Memory),也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。通過至少一個網(wǎng)絡(luò)接口705(可以是有線或者無線)實現(xiàn)與至少一個其他網(wǎng)元之間的通信連接。
在一些實施方式中,存儲器706存儲了程序7061,程序7061可以被處理器702執(zhí)行,這個程序包括:
確定待存儲到KeyValue類型分布式數(shù)據(jù)庫中的至少兩個數(shù)據(jù)對象的相同的列屬性;
確定該至少兩個數(shù)據(jù)對象中的每個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的格式,其中,該行標識的格式包括該相同的列屬性和數(shù)據(jù)對象標識,該至少兩個數(shù)據(jù)對象中的不同數(shù)據(jù)對象的數(shù)據(jù)對象標識在該行標識的格式中的位置相同且位于該相同的列屬性之后;
根據(jù)確定的該每個數(shù)據(jù)對象的該行標識的格式,確定該每個數(shù)據(jù)對象的每條數(shù)據(jù)記錄的行標識的值;
在該KeyValue類型分布式數(shù)據(jù)庫中存儲該每條數(shù)據(jù)記錄的行標識的值和該每條數(shù)據(jù)記錄,其中,該每條數(shù)據(jù)記錄的行標識的值作為該每條數(shù)據(jù)記錄在該KeyValue類型分布式數(shù)據(jù)庫中的主索引。
可選地,還包括:
針對該每條數(shù)據(jù)記錄的行標識的值,按照第一順序?qū)υ撁織l數(shù)據(jù)記錄進行排序,使該至少兩個數(shù)據(jù)對象的所有數(shù)據(jù)記錄形成聚簇表。
可選地,該第一順序為字典順序。
可選地,還包括:
接收數(shù)據(jù)請求,該數(shù)據(jù)請求指示對該至少兩個數(shù)據(jù)對象中的數(shù)據(jù)記錄進行查詢或獲?。?/p>
根據(jù)該行標識的格式,構(gòu)造在該KeyValue類型分布式數(shù)據(jù)庫中進行查詢的查詢信息,其中,該查詢信息包括該相同的列屬性;
根據(jù)該查詢信息,導出該KeyValue類型分布式數(shù)據(jù)庫中主索引包含該查詢信息的數(shù)據(jù)記錄。
可選地,確定該至少兩個數(shù)據(jù)對象中的每個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的格式,包括:
為該至少兩個數(shù)據(jù)對象指定在該KeyValue類型分布式數(shù)據(jù)庫中的行標識的第一前綴,其中,該第一前綴為常量;
確定該至少兩個數(shù)據(jù)對象中的第一數(shù)據(jù)對象的該行標識的格式包括該第一前綴、該相同的列屬性和該第一數(shù)據(jù)對象的數(shù)據(jù)對象標識;或者,
確定該至少兩個數(shù)據(jù)對象中的第二數(shù)據(jù)對象的該行標識的格式包括該第一前綴、該相同的列屬性、該第二數(shù)據(jù)對象的數(shù)據(jù)對象標識和該第二數(shù)據(jù)對象的列屬性中能區(qū)分該第二數(shù)據(jù)對象的所有數(shù)據(jù)記錄的列屬性。
可選地,該查詢信息包括該第一前綴和該相同的列屬性。
可選地,還包括:
確定該至少兩個數(shù)據(jù)對象中任一個數(shù)據(jù)對象在該KeyValue類型分布式數(shù)據(jù)庫中的二級索引的格式為第二前綴,第二屬性和該相同的列屬性,其中,該第二屬性為該任一個數(shù)據(jù)對象的列屬性中不同于該相同屬性的列屬性,該第二前綴為與該第一前綴不同的常量;
根據(jù)該任一個數(shù)據(jù)對象的該二級索引的格式確定該任一個數(shù)據(jù)對象的二級索引;
在該KeyValue類型分布式數(shù)據(jù)庫中存儲該任一個數(shù)據(jù)對象的二級索引。
可選地,該行標識的格式中的各個字段之間設(shè)置分隔符,或者,該各個字段具有固定長度。
從本發(fā)明實施例提供的以上技術(shù)方案可以看出,本發(fā)明實施例通過將相關(guān)聯(lián)的數(shù)據(jù)對象采用包括相同的列屬性的行標識的格式存儲到KeyValue類型分布式數(shù)據(jù)庫中,可以實現(xiàn)對多個數(shù)據(jù)對象進行關(guān)聯(lián)查詢,從而能夠提高查詢數(shù)據(jù)的效率。
應(yīng)理解,在本發(fā)明實施例中,術(shù)語“和/或”僅僅是一種描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系。例如,A和/或B,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。另外,本文中字符“/”,一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。
本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本發(fā)明的范圍。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為了描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另外,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口、裝置或單元的間接耦合或通信連接,也可以是電的,機械的或其它的形式連接。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本發(fā)明實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以是兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分,或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到各種等效的修改或替換,這些修改或替換都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)以權(quán)利要求的保護范圍為準。