亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種SSTable文件數(shù)據(jù)處理方法及其系統(tǒng)的制作方法

文檔序號:6363656閱讀:141來源:國知局
專利名稱:一種SSTable文件數(shù)據(jù)處理方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本申請涉及通信技術(shù)領(lǐng)域,特別是涉及一種SSTable文件數(shù)據(jù)處理方法及其系統(tǒng)。
背景技術(shù)
SSTable (Sorted String Table,排序字符串表),其本質(zhì)上是一種文件格式,用于存儲有序的Key-Value數(shù)據(jù)到磁盤上,每個(gè)SSTable文件由多個(gè)塊組成,一旦完成寫入,不能修改,只能讀取。目前在分布式數(shù)據(jù)庫中常用SSTable的格式存儲有序的Key-Value數(shù)據(jù),Key-Value數(shù)據(jù)都以字符串形式存儲,每個(gè)SSTable中包含許多行,一定數(shù)量的行構(gòu)成一個(gè)塊,每行包含一個(gè)主鍵(RowKey)和行數(shù)據(jù),行數(shù)據(jù)一般包含若干列,每列以列名為主鍵Key,列值為Value。圖1示出了一種SSTable文件的行數(shù)據(jù)存儲格式。SSTable文件一般只支持稀疏存儲格式。向SSTable文件寫入行數(shù)據(jù)時(shí),首先寫入行主鍵,然后寫入該行中列值不為空的列,列值為空的列不寫入,不占用存儲空間。這種稀疏存儲方式,每行中包含的列數(shù)量不確定,并且相同的列名在不同的行中反復(fù)被存儲多次,造成存儲空間的浪費(fèi),特別是對行中列數(shù)量確定,且每行中大多數(shù)的列都不為空的應(yīng)用。

發(fā)明內(nèi)容
本申請實(shí)施例提供了一種基于SSTable文件格式的數(shù)據(jù)處理方法及其系統(tǒng),用以解決現(xiàn)有SSTable文件數(shù)據(jù)存儲機(jī)制浪費(fèi)存儲空間的問題。本申請實(shí)施例提供的一種SSTable文件數(shù)據(jù)處理方法中,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該方法包括:讀取待寫入到SSTable文件的行數(shù)據(jù);在SSTable文件中寫入行主鍵,并根據(jù)所述SSTable文件的架構(gòu)表中定義的行數(shù)據(jù)的列順序和列屬性信息,對應(yīng)所述行主鍵寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù)。本申請實(shí)施例提供的另一種SSTable文件數(shù)據(jù)處理方法中,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該方法包括:接收對SSTable文件的數(shù)據(jù)查詢請求;根據(jù)所述SSTable文件中的架構(gòu)表,查詢所請求查詢的列數(shù)據(jù);返回查詢響應(yīng),其中攜帶有查詢到的列數(shù)據(jù)。本申請實(shí)施例提供的一種SSTable文件數(shù)據(jù)處理系統(tǒng)中,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該系統(tǒng)包括:讀取模塊,用于讀取待寫入到SSTable文件的行數(shù)據(jù);存儲模塊,用于在SSTable文件中寫入行主鍵,并根據(jù)所述SSTable文件的架構(gòu)表中定義的行數(shù)據(jù)的列順序和列屬性信息,對應(yīng)所述行主鍵寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù)。
本申請實(shí)施例提供的一種SSTable文件數(shù)據(jù)處理系統(tǒng)中,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該系統(tǒng)包括:接收模塊,用于接收對SSTable文件的數(shù)據(jù)查詢請求;查詢模塊,用于根據(jù)所述SSTable文件中的架構(gòu)表,查詢所請求查詢的列數(shù)據(jù);返回模塊,用于返回查詢響應(yīng),其中攜帶有查詢到的列數(shù)據(jù)。本申請的上述實(shí)施例中,由于SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,在對SSTable文件進(jìn)行數(shù)據(jù)處理時(shí),根據(jù)該架構(gòu)表進(jìn)行數(shù)據(jù)讀寫處理,從而實(shí)現(xiàn)了行數(shù)據(jù)的存儲只需存儲行主鍵和列值,列值按照架構(gòu)表中規(guī)定的順序進(jìn)行存放,不必存儲列名或列ID等信息,減少了存儲數(shù)據(jù)量。


圖1為現(xiàn)有技術(shù)中SSTable文件的行數(shù)據(jù)存儲格式示意圖;圖2為本申請實(shí)施例提供的SSTable文件數(shù)據(jù)存儲格式示意圖;圖3為本申請實(shí)施例提供的結(jié)構(gòu)表的存儲格式示意圖;圖4為本申請實(shí)施例提供的向SSTable文件寫入數(shù)據(jù)的流程示意圖;圖5為本申請實(shí)施例提供的從SSTable文件讀取數(shù)據(jù)的流程示意圖;圖6為本申請實(shí)施例提供的SSTable文件數(shù)據(jù)處理系統(tǒng)結(jié)構(gòu)圖之一;圖7為本申請實(shí)施例提供的SSTable文件數(shù)據(jù)處理系統(tǒng)結(jié)構(gòu)圖之二 ;圖8為本申請實(shí)施例提供的SSTable文件數(shù)據(jù)處理系統(tǒng)結(jié)構(gòu)圖之三。
具體實(shí)施例方式現(xiàn)有SSTable文件只支持稀疏格式存儲,但許多情況下,業(yè)務(wù)數(shù)據(jù)其實(shí)是稠密的結(jié)構(gòu)化數(shù)據(jù),需要稠密格式存儲。所謂稠密格式存儲是指:存儲行數(shù)據(jù)時(shí),行中不為空的列存儲該列值,為空的列,用空值對象填充,即行中的每列都要存儲一個(gè)列值。比如,從數(shù)據(jù)庫MySql或Oracle遷移過來的業(yè)務(wù)數(shù)據(jù),每張表的列數(shù)量確定,列變更不頻繁,表中大多數(shù)列都不為空,并且業(yè)務(wù)經(jīng)常對整行進(jìn)行讀寫。對于這種應(yīng)用,采用現(xiàn)有SSTable文件的稀疏格式存儲方式,將造成比較大的空間浪費(fèi),并且讀寫效率不高。為解決上述問題,本申請實(shí)施例對SSTable文件所使用的存儲格式進(jìn)行了改進(jìn),并相應(yīng)改進(jìn)了數(shù)據(jù)存儲流程和數(shù)據(jù)查詢流程。具體的,本申請實(shí)施例的SSTable文件存儲格式中增加了結(jié)構(gòu)表,用于描述行數(shù)據(jù)所包含的列,即,該結(jié)構(gòu)表用于定義SSTable文件中行數(shù)據(jù)中各列的列順序并進(jìn)一步定義列屬性信息。該結(jié)構(gòu)表中可定義SSTable文件數(shù)據(jù)表的相關(guān)信息以及數(shù)據(jù)表中的行數(shù)據(jù)所包含的列的相關(guān)信息。如,結(jié)構(gòu)表定義了表名、表ID,以及表中行數(shù)據(jù)所包含的列、列的順序、每列的列名、列ID、列值的數(shù)據(jù)類型等。其中,列的順序可用序列號標(biāo)識出,也可通過結(jié)構(gòu)表中各列的相關(guān)信息的排列順序表不。參見圖2,為本申請實(shí)施例提供的一種支持稠密存儲方式的SSTable文件存儲格式示意圖。其中,SSTable文件使用塊保存有序的Key-Value數(shù)據(jù),每個(gè)塊的大小可以配置,一般每個(gè)塊的大小在8KB 64KB之間。
整個(gè)SSTable文件按主鍵Key有序存儲Key-Value數(shù)據(jù),其中,Key為行主鍵,Value為行數(shù)據(jù)。行數(shù)據(jù)的存儲支持稠密格式:行主鍵Key+列值數(shù)組。其中,行主鍵Key由行主鍵長度+行主鍵字符串組成,列值數(shù)組為該行全部列的值(value),其數(shù)量、順序和數(shù)據(jù)類型由SSTable文件的結(jié)構(gòu)表定義,包括空值對象,但不包含列名或列ID等列屬性信息。對于為空的列值,以空值對象填充,從而保證每行中的列順序和列數(shù)據(jù)與結(jié)構(gòu)表中的定義保持一致。結(jié)構(gòu)表頭部保存了整個(gè)結(jié)構(gòu)表中列的數(shù)量,結(jié)構(gòu)表主要定義每行的列順序和列的一些屬性,比如表ID、列ID、列值的數(shù)據(jù)類型(如整型、字符串型)等,每行中存儲的列數(shù)據(jù)與結(jié)構(gòu)表中定義的列順序和列的其它屬性保持一致。結(jié)構(gòu)表的存儲格式的參考實(shí)現(xiàn)可如圖3所示。其中,結(jié)構(gòu)表頭部(結(jié)構(gòu)表Header)記錄了整個(gè)結(jié)構(gòu)表中列的數(shù)量;結(jié)構(gòu)表中存儲了多個(gè)表信息,Column Definition定義了列所屬的表ID,以及列ID和列值類型,列值類型包括數(shù)值、字符串、時(shí)間等;所有表的結(jié)構(gòu)表存儲在一起,整個(gè)Column Definition數(shù)組按(表ID,列ID)順序存儲。優(yōu)選的,每個(gè)塊內(nèi)還可以建立行索引,行索引記錄了每行在塊中的起始位置。行索引可以是一個(gè)包含了(行數(shù)量+1)個(gè)元素的數(shù)組,每個(gè)元素是一個(gè)int型(整型)數(shù)值,記錄了每行行首相對于所在塊起始點(diǎn)的相對偏移值。最后一個(gè)元素指向最后一行的尾部,由于沒有保存每行的長度,需要相鄰的行的起始位置相減來獲得行長度,這樣設(shè)計(jì)是為了節(jié)省存儲空間。當(dāng)然,行索引的形式并不僅限于此,凡是能夠標(biāo)識行數(shù)據(jù)在其所在塊中的位置,能夠索引到行數(shù)據(jù)的索引數(shù)據(jù)形式,都應(yīng)包含在本申請的保護(hù)范圍內(nèi)。由于在塊內(nèi)建立了行索引,在數(shù)據(jù)檢索時(shí),可以使用二分查找在塊內(nèi)部迅速定位某個(gè)Key ;而現(xiàn)有的SSTable文件不支持塊內(nèi)建行索引,在數(shù)據(jù)檢索時(shí)需要在塊內(nèi)遍歷查詢??梢姡旧暾垖?shí)施例通過行索引可提高數(shù)據(jù)檢索效率。塊頭部中存儲了塊的行數(shù)量,在塊內(nèi)建立行索引的情況下,還可以存儲行索引的
位置等信息。通過本申請實(shí)施例提供的SSTable文件存儲格式可以看出,行數(shù)據(jù)的存儲只需存儲行主鍵和列值數(shù)組,列值按照結(jié)構(gòu)表中規(guī)定的順序進(jìn)行存放,不必存儲列名或列ID,減少了存儲數(shù)據(jù)量。基于本申請實(shí)施例提供的SSTable文件存儲格式,在向SSTable文件寫入數(shù)據(jù)時(shí),以整行為單位寫入。每寫入一行時(shí),首先寫入行主鍵,然后根據(jù)SSTable文件的結(jié)構(gòu)表中定義的行數(shù)據(jù)的列順序和列屬性信息,對應(yīng)該行主鍵寫入該行數(shù)據(jù)的各列數(shù)據(jù),寫入的列數(shù)據(jù)中不包括列的屬性信息(如列名、列ID等)。每個(gè)行數(shù)據(jù)以稠密格式存儲:行主鍵Key+列值數(shù)組,對于為空的列值,以空值對象填充。具體的,在寫入一行數(shù)據(jù)的過程中,寫入行主鍵后,對應(yīng)該行主鍵,按照SSTable文件的結(jié)構(gòu)表中定義的列順序,寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù),寫入的行數(shù)據(jù)中各列數(shù)據(jù)的順序,與結(jié)構(gòu)表中定義的列順序一致;其中,若待寫入的列數(shù)據(jù)的列屬性與結(jié)構(gòu)表中定義的相應(yīng)列的列屬性不一致,則當(dāng)前行數(shù)據(jù)寫入失敗。進(jìn)一步的,在完成一條行數(shù)據(jù)的寫入之后,針對其所在的塊建立行索引,行索引用于標(biāo)識該行數(shù)據(jù)在該塊中的位置,如該行索引為該行數(shù)據(jù)在該塊中的起始位置?;谝陨蠑?shù)據(jù)存儲原則,圖4示出了本申請實(shí)施例提供的一種向SSTable文件寫入數(shù)據(jù)的流程,該流程僅為本申請實(shí)施例的一種具體實(shí)現(xiàn),凡是能夠體現(xiàn)上述原則的流程均應(yīng)在本申請的保護(hù)范圍之內(nèi)。如圖4所示,當(dāng)讀取到待寫入SSTable文件的行數(shù)據(jù)后,該流程可包括:步驟401,判斷是否所有行數(shù)據(jù)已寫完,若是,轉(zhuǎn)入步驟406 ;否則,轉(zhuǎn)入步驟402 ;步驟402,寫入行主鍵,轉(zhuǎn)入步驟403 ;步驟403,判斷本行數(shù)據(jù)是否已寫完,若是,則轉(zhuǎn)入步驟401 ;否則,轉(zhuǎn)入步驟404 ;步驟404,根據(jù)SSTable文件的結(jié)構(gòu)表所定義的列,對當(dāng)前行的當(dāng)前列進(jìn)行檢驗(yàn),即是否與結(jié)構(gòu)表的定義一致,若檢驗(yàn)通過,若檢驗(yàn)通過,則轉(zhuǎn)入步驟405 ;否則,當(dāng)前行寫入失敗,流程結(jié)束;其中,若當(dāng)前列的屬性與結(jié)構(gòu)表定義的列屬性一致,則可認(rèn)為檢驗(yàn)通過。例如,當(dāng)前列的數(shù)據(jù)類型與結(jié)構(gòu)表的定義一致,則當(dāng)前列檢驗(yàn)通過;又例如,當(dāng)前列在待寫入行數(shù)據(jù)中的位置與結(jié)構(gòu)表定義的列順序一致,則當(dāng)前列檢驗(yàn)通過。通過該方式可以實(shí)現(xiàn)對待寫入數(shù)據(jù)的強(qiáng)制校驗(yàn),以避免錯(cuò)誤數(shù)據(jù)寫入SSTable文件。步驟405,向SSTable文件寫入當(dāng)前列數(shù)據(jù),然后轉(zhuǎn)入步驟403 ;步驟406,向SSTable文件寫入元數(shù)據(jù),然后結(jié)束本次寫數(shù)據(jù)流程。其中,本申請實(shí)施例中的元數(shù)據(jù)定義可與現(xiàn)有技術(shù)中的定義一致。通過本申請實(shí)施例提供的向SSTable文件寫入數(shù)據(jù)的流程可以看出,在向SSTable文件寫入數(shù)據(jù)過程中,可以按照原有的數(shù)據(jù)類型寫入Key-Value,返回的數(shù)據(jù)也是其本身的數(shù)據(jù)類型,不需進(jìn)行“字符串_>數(shù)值”或“數(shù)值_>字符串”的轉(zhuǎn)換,方便了業(yè)務(wù)使用,縮短了操作時(shí)間,提高了寫操作效率。寫入過程中還可以根據(jù)結(jié)構(gòu)表做強(qiáng)制類型校驗(yàn),以避免將錯(cuò)誤數(shù)據(jù)寫入SSTable,提高了數(shù)據(jù)寫入的準(zhǔn)確性。基于本申請實(shí)施例提供的SSTable文件存儲格式,從SSTable查詢所需的列數(shù)據(jù)時(shí),首先從SSTable中讀取結(jié)構(gòu)表,根據(jù)該結(jié)構(gòu)表查詢所請求查詢的列數(shù)據(jù)。具體的,根據(jù)結(jié)構(gòu)表查詢所請求查詢的列數(shù)據(jù)的過程中,可首先讀取整行數(shù)據(jù),然后根據(jù)結(jié)構(gòu)表和所請求查詢的列信息,再從整行數(shù)據(jù)中過濾出所要查詢的列數(shù)據(jù)。進(jìn)一步的,根據(jù)結(jié)構(gòu)表查詢所請求查詢的列數(shù)據(jù)的過程中,在過濾出所要查詢的列數(shù)據(jù)之后,判斷該列數(shù)據(jù)是否與結(jié)構(gòu)表中定義的相應(yīng)列的屬性(如列值的數(shù)據(jù)類型)一致,若一致,則將查詢到的列數(shù)據(jù)作為查詢結(jié)果,否則,本次查詢失敗,終止查詢。對于查詢的列在結(jié)構(gòu)表不存在的情況,可以根據(jù)應(yīng)用需求處理。進(jìn)一步的,在查詢到所請求查詢的列數(shù)據(jù)之后,還可根據(jù)結(jié)構(gòu)表所定義的列屬性(如列值的數(shù)據(jù)類型),對查詢到的列數(shù)據(jù)進(jìn)行統(tǒng)計(jì)或分析處理。由于結(jié)構(gòu)表中包含了列的數(shù)據(jù)類型信息,在查詢的時(shí)候可以方便地根據(jù)數(shù)據(jù)類型,對數(shù)據(jù)進(jìn)行過濾和分析,比如只返回修改時(shí)間為某個(gè)時(shí)間點(diǎn)以后的數(shù)據(jù)?;谝陨蠑?shù)據(jù)查詢原則,圖4示出了本申請實(shí)施例提供的一種從SSTable文件查詢數(shù)據(jù)的流程,該流程僅為本申請實(shí)施例的一種具體實(shí)現(xiàn),凡是能夠體現(xiàn)上述原則的流程均應(yīng)在本申請的保護(hù)范圍之內(nèi)。如圖5所示,當(dāng)接收到對SSTable文件的數(shù)據(jù)進(jìn)行查詢的請求后,該流程可包括:步驟501,讀取SSTable文件中的結(jié)構(gòu)表;步驟502,根據(jù)讀取到的結(jié)構(gòu)表對請求查詢的列進(jìn)行檢驗(yàn),即,判斷所請求查詢的列是否與結(jié)構(gòu)表一致,若檢驗(yàn)通過,則轉(zhuǎn)入步驟503,否則結(jié)束本次查詢流程;步驟503,判斷所請求查詢的行數(shù)據(jù)是否已經(jīng)讀取完成,若是,則結(jié)束本次查詢流程,否則轉(zhuǎn)入步驟504;步驟504,讀入一行數(shù)據(jù)并遍歷列;其中,在讀入行數(shù)據(jù)時(shí),可根據(jù)行索引快速定位到行數(shù)據(jù)進(jìn)行讀?。徊襟E505,判斷列數(shù)據(jù)是否已經(jīng)遍歷完成,若是,則轉(zhuǎn)入步驟503,否則轉(zhuǎn)入步驟506 ;步驟506,遍歷下一列;步驟507,根據(jù)查詢請求判斷當(dāng)前遍歷到的列數(shù)據(jù)是否需要返回,若是,則轉(zhuǎn)入步驟508,否則轉(zhuǎn)入步驟505;其中,若當(dāng)前遍歷到的列數(shù)據(jù)是請求查詢的列,則需要返回。步驟508,將所請求查詢的列數(shù)據(jù)寫入到輸出隊(duì)列準(zhǔn)備作為查詢結(jié)果輸出,并轉(zhuǎn)入步驟505。通過本申請實(shí)施例提供的從SSTable文件查詢數(shù)據(jù)的流程可以看出,讀取整行時(shí),直接返回列值數(shù)組,即使只是讀取行中的某些列,可以將整行讀出再做過濾,以得到所請求查詢的列數(shù)據(jù)。由于這種稠密存儲方式存儲的總數(shù)據(jù)量比稀疏格式存儲的數(shù)據(jù)量小,所以即使進(jìn)行過濾也會更高效。另外,SSTable的數(shù)據(jù)查詢流程中根據(jù)結(jié)構(gòu)表進(jìn)行強(qiáng)制校驗(yàn),從而保證列數(shù)據(jù)與結(jié)構(gòu)表的一致性。基于相同的技術(shù)構(gòu)思,本申請實(shí)施例還提供了一種SSTable文件數(shù)據(jù)處理系統(tǒng)。參見圖6,為本申請實(shí)施例提供的SSTable文件數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖,其中,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該系統(tǒng)包括:讀取模塊601,用于讀取待寫入到SSTable文件的行數(shù)據(jù);存儲模塊602,用于在SSTable文件中寫入行主鍵,并根據(jù)所述SSTable文件的架構(gòu)表中定義的行數(shù)據(jù)的列順序和列屬性信息,對應(yīng)所述行主鍵寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù)。具體的,存儲模塊601在存儲行數(shù)據(jù)時(shí),對應(yīng)所述行主鍵,按照SSTable文件的架構(gòu)表中定義的所述SSTable文件行數(shù)據(jù)的列順序,寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù);其中,若待寫入的列數(shù)據(jù)的列屬性與所述架構(gòu)表中定義的相應(yīng)列的列屬性不一致,則當(dāng)前行數(shù)據(jù)寫入失敗。具體的,存儲模塊601在寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù)的過程中,對于為空的列,寫入空值對象。進(jìn)一步的,存儲模塊601寫入行數(shù)據(jù)后,針對所述行數(shù)據(jù)所在的塊,創(chuàng)建所述行數(shù)據(jù)的行索引,所述行索引用于標(biāo)識所述行數(shù)據(jù)在該塊中的位置。參見圖7,為本申請另一實(shí)施例提供的SSTable文件數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖。其中,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該系統(tǒng)包括:接收模塊701,用于接收對SSTable文件的數(shù)據(jù)查詢請求;查詢模塊702,用于根據(jù)所述SSTable文件中的架構(gòu)表,查詢所請求查詢的列數(shù)據(jù);
返回模塊703,用于返回查詢響應(yīng),其中攜帶有查詢到的列數(shù)據(jù)。具體的,查詢模塊702在查詢數(shù)據(jù)的過程中,根據(jù)所述SSTable文件中的架構(gòu)表和所請求查詢的列信息,讀取目標(biāo)行數(shù)據(jù)中相應(yīng)列的數(shù)據(jù);判斷讀取到的列數(shù)據(jù)的屬性是否與所述架構(gòu)表中定義的相應(yīng)列的屬性一致,若一致,則將查詢到的列數(shù)據(jù)作為查詢結(jié)果,否貝U,本次查詢失敗。進(jìn)一步的,該系統(tǒng)還可包括分析處理模塊704,用于在查詢模塊702查詢到所請求查詢的列數(shù)據(jù)之后,根據(jù)所述SSTable文件中的架構(gòu)表所定義的列屬性,對查詢到的列數(shù)據(jù)進(jìn)行統(tǒng)計(jì)或分析處理。具體的,所述SSTable文件中還包括行索引信息,所述行索引用于標(biāo)識行數(shù)據(jù)在其所在塊中的位置。相應(yīng)的,查詢模塊702可在根據(jù)SSTable文件中的架構(gòu)表,查詢所請求查詢的列數(shù)據(jù)之前,根據(jù)所述行索引信息確定目標(biāo)行數(shù)據(jù)的位置,并根據(jù)確定出的位置讀取相應(yīng)行數(shù)據(jù)。如圖8所示,在具體實(shí)施時(shí),SSTable文件數(shù)據(jù)處理系統(tǒng)通常包含圖6和圖7所示的功能模塊,即,SSTable文件數(shù)據(jù)處理系統(tǒng)通常既能夠?qū)崿F(xiàn)數(shù)據(jù)的存儲,又能夠?qū)崿F(xiàn)數(shù)據(jù)的查詢。綜上所述,本申請實(shí)施例的SSTable存儲格式中包含了類似關(guān)系數(shù)據(jù)庫的結(jié)構(gòu)表,結(jié)構(gòu)表中定義了表名,表ID,表中行包含的列,列的順序,每列的列名,列ID,列值類型等;行數(shù)據(jù)的存儲只需存儲行主鍵和列值數(shù)組,列值按照結(jié)構(gòu)表中規(guī)定的順序進(jìn)行存放,不必存儲列名或列ID,減少了存儲數(shù)據(jù)量;寫入時(shí)以整行為單位,可以根據(jù)結(jié)構(gòu)表定義的列順序等信息做強(qiáng)制校驗(yàn),避免錯(cuò)誤數(shù)據(jù)寫入SSTable ;讀取整行時(shí),直接返回列值數(shù)組,即使只是讀取行中的某些列,可以將整行讀出再做過濾。由于這種稠密存儲方式存儲的總數(shù)據(jù)量比稀疏格式存儲的數(shù)據(jù)量小,所以即使做過濾也會更高效。SSTable支持稠密存儲格式的讀與,對基于整行讀與的應(yīng)用,是簡單聞效的解決方案。應(yīng)該認(rèn)識到,本申請系統(tǒng)的各個(gè)模塊可以集成于一體,也可以分離部署。上述模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個(gè)存儲介質(zhì)中,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個(gè)實(shí)施例所述的方法。本領(lǐng)域技術(shù)人員可以理解附圖只是一個(gè)優(yōu)選實(shí)施例的示意圖,附圖中的模塊或流程并不一定是實(shí)施本申請所必須的。以上所述僅是本申請的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本申請?jiān)淼那疤嵯?,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視本申請的保護(hù)范圍。
權(quán)利要求
1.一種排序字符串表SSTable文件數(shù)據(jù)處理方法,其特征在于,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該方法包括: 讀取待寫入到SSTable文件的行數(shù)據(jù); 在SSTable文件中寫入行主鍵,并根據(jù)所述SSTable文件的架構(gòu)表中定義的行數(shù)據(jù)的列順序和列屬性信息,對應(yīng)所述行主鍵寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù)。
2.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)SSTable文件的架構(gòu)表中定義的行數(shù)據(jù)的列順序和列屬性信息,對應(yīng)所述行主鍵寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù),包括: 對應(yīng)所述行主鍵,按照SSTable文件的架構(gòu)表中定義的所述SSTable文件行數(shù)據(jù)的列順序,寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù);其中,若待寫入的列數(shù)據(jù)的列屬性與所述架構(gòu)表中定義的相應(yīng)列的列屬性不一 致,則當(dāng)前行數(shù)據(jù)寫入失敗。
3.如權(quán)利要求1所述的方法,其特征在于,在寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù)的過程中,對于為空的列,寫入空值對象。
4.如權(quán)利要求1所述的方法,其特征在于,寫入行數(shù)據(jù)后還包括: 針對所述行數(shù)據(jù)所在的塊,創(chuàng)建所述行數(shù)據(jù)的行索引,所述行索引用于標(biāo)識所述行數(shù)據(jù)在該塊中的位置。
5.一種排序字符串表SSTable文件數(shù)據(jù)處理方法,其特征在于,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該方法包括: 接收對SSTable文件的數(shù)據(jù)查詢請求; 根據(jù)所述SSTable文件中的架構(gòu)表,查詢所請求查詢的列數(shù)據(jù); 返回查詢響應(yīng),其中攜帶有查詢到的列數(shù)據(jù)。
6.如權(quán)利要求5所述的方法,其特征在于,所述根據(jù)SSTable文件中的架構(gòu)表,查詢所請求查詢的列數(shù)據(jù),包括: 根據(jù)所述SSTable文件中的架構(gòu)表和所請求查詢的列信息,讀取目標(biāo)行數(shù)據(jù)中相應(yīng)列的數(shù)據(jù); 判斷讀取到的列數(shù)據(jù)的屬性是否與所述架構(gòu)表中定義的相應(yīng)列的屬性一致,若一致,則將查詢到的列數(shù)據(jù)作為查詢結(jié)果,否則,本次查詢失敗。
7.如權(quán)利要求5所述的方法,其特征在于,在查詢到所請求查詢的列數(shù)據(jù)之后,還包括:根據(jù)所述SSTable文件中的架構(gòu)表所定義的列屬性,對查詢到的列數(shù)據(jù)進(jìn)行統(tǒng)計(jì)或分析處理。
8.如權(quán)利要求5-7之任一所述的方法,其特征在于,所述SSTable文件中還包括行索引信息,所述行索引用于標(biāo)識行數(shù)據(jù)在其所在塊中的位置; 所述根據(jù)SSTable文件中的架構(gòu)表,查詢所請求查詢的列數(shù)據(jù)之前,還包括:根據(jù)所述行索引信息確定目標(biāo)行數(shù)據(jù)的位置,并根據(jù)確定出的位置讀取相應(yīng)行數(shù)據(jù)。
9.一種排序字符串表SSTable文件數(shù)據(jù)處理系統(tǒng),其特征在于,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該系統(tǒng)包括: 讀取模塊,用于讀取待寫入到SSTable文件的行數(shù)據(jù); 存儲模塊,用于在SSTable文件中寫入行主鍵,并根據(jù)所述SSTable文件的架構(gòu)表中定義的行數(shù)據(jù)的列順序和列屬性信息,對應(yīng)所述行主鍵寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù)。
10.一種排序字符串表SSTable文件數(shù)據(jù)處理系統(tǒng),其特征在于,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該系統(tǒng)包括: 接收模塊,用于接收對SSTable文件的數(shù)據(jù)查詢請求; 查詢模塊,用于根據(jù)所述SSTable文件中的架構(gòu)表,查詢所請求查詢的列數(shù)據(jù); 返回模塊, 用于返回查詢響應(yīng),其中攜帶有查詢到的列數(shù)據(jù)。
全文摘要
本申請公開了一種SSTable文件數(shù)據(jù)處理方法及其系統(tǒng),其中,SSTable文件中設(shè)置有架構(gòu)表,其中定義有所述SSTable文件行數(shù)據(jù)的列順序和列屬性信息,該方法包括讀取待寫入到SSTable文件的行數(shù)據(jù);在SSTable文件中寫入行主鍵,并根據(jù)所述SSTable文件的架構(gòu)表中定義的行數(shù)據(jù)的列順序和列屬性信息,對應(yīng)所述行主鍵寫入讀取到的行數(shù)據(jù)的各列數(shù)據(jù)。采用本申請?jiān)趯STable文件進(jìn)行數(shù)據(jù)處理時(shí),根據(jù)該架構(gòu)表進(jìn)行數(shù)據(jù)讀寫處理,從而實(shí)現(xiàn)了行數(shù)據(jù)的存儲只需存儲行主鍵和列值,列值按照架構(gòu)表中規(guī)定的順序進(jìn)行存放,不必存儲列名或列ID等信息,減少了存儲數(shù)據(jù)量。
文檔編號G06F17/30GK103218365SQ20121001850
公開日2013年7月24日 申請日期2012年1月20日 優(yōu)先權(quán)日2012年1月20日
發(fā)明者莊明強(qiáng) 申請人:阿里巴巴集團(tuán)控股有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1