一種新型的kv分布式數(shù)據(jù)存儲方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種分布式的存儲系統(tǒng),特別涉及一種新型的KV分布式數(shù)據(jù)存儲方 法。
【背景技術(shù)】
[0002] 關(guān)系型數(shù)據(jù)庫是支持關(guān)系模型的數(shù)據(jù)庫,是目前使用最廣泛的數(shù)據(jù)庫系統(tǒng),其中 結(jié)構(gòu)化查詢語言SQL是最重要的關(guān)系數(shù)據(jù)庫操作語言,SQL語言簡潔、簡單好學(xué),有強(qiáng)大的 數(shù)據(jù)分析能力(分組、聯(lián)表、嵌套查詢等),大部分?jǐn)?shù)據(jù)都可以很方便地寫入關(guān)系型數(shù)據(jù)庫 中,也可以用SQL強(qiáng)大的表達(dá)能力進(jìn)行多方面數(shù)據(jù)處理與分析,從而大大簡化系統(tǒng)的復(fù)雜 度和開發(fā)部署難度,因此也使其應(yīng)用相當(dāng)廣泛。對于數(shù)據(jù)量不大,例如千萬級的統(tǒng)計(jì)系統(tǒng), SQL是相對比較好的解決方案。但對于海量的存儲系統(tǒng),SQL單機(jī)運(yùn)行的特性將成為整個系 統(tǒng)的瓶頸,主要表現(xiàn)在容量和速度兩個方面。若繼續(xù)使用關(guān)系型數(shù)據(jù)庫,其付出的硬件和運(yùn) 行維護(hù)的成本要遠(yuǎn)遠(yuǎn)高出其帶來的便利性。
[0003] 鍵-值(Key-Value)存儲型數(shù)據(jù)庫是非關(guān)系數(shù)據(jù)庫中應(yīng)用較廣的一種。典型的 KV存儲系統(tǒng)可以說與關(guān)系型數(shù)據(jù)庫完全相反,不支持復(fù)雜表結(jié)構(gòu),不支持復(fù)雜查詢,但易擴(kuò) 展、查詢速度快、支持大數(shù)據(jù)量高速寫入查詢等特點(diǎn),這也是在海量信息時代KV系統(tǒng)越來 越多的被使用的原因。但是典型KV系統(tǒng)更多的側(cè)重在Key與Value的存儲,而有時候我們 也還需要關(guān)注Key本身的一些信息,例如要按"學(xué)院+年級+課程"統(tǒng)計(jì)學(xué)生及格率,如何 羅列這些所有的組合呢?如果是用SQL系統(tǒng),那么用GROUPBY語句就能完成要求。而在KV 的情況下,顯然"學(xué)院+年級+課程"的每一個組合都對應(yīng)一個Key,通過枚舉所有的組合并 不是一個可行的方案,因?yàn)?學(xué)院+年級+課程"都是在不斷變化的,所以就需要有一套數(shù) 據(jù)結(jié)構(gòu),專門來維持類似SQL中的這些關(guān)系信息。關(guān)系數(shù)據(jù)庫之所以強(qiáng)大就在于提供了在 指定關(guān)系上處理數(shù)據(jù)的能力,而典型KV系統(tǒng)卻完全丟棄了關(guān)系信息,使得其應(yīng)用場景遠(yuǎn)低 于關(guān)系型數(shù)據(jù)庫。
【發(fā)明內(nèi)容】
[0004] 為了克服現(xiàn)有技術(shù)存在的缺點(diǎn)與不足,本發(fā)明提供一種新型的KV分布式數(shù)據(jù)存 儲方法。
[0005] 本發(fā)明采用如下技術(shù)方案:
[0006] -種新型的KV分布式數(shù)據(jù)存儲方法,包括如下步驟:
[0007] S1分布化存儲,具體為:將每一行數(shù)據(jù)分為定性字段及定量字段,然后對數(shù)據(jù)表 按照定性字段及定量字段進(jìn)行拆分,由定性字段構(gòu)成的表稱為鍵表即KT,定量字段構(gòu)成的 表稱為值表即VT,并在兩個表之間引入中間Key,所述中間Key是通過唯一序列發(fā)生器得 至IJ,例如遞增序列,將KT、中間key保存在關(guān)系型數(shù)據(jù)表中,VT保存在KV存儲系統(tǒng)中,進(jìn)而 完成了整個系統(tǒng)的分布化存儲;
[0008] S2對分布化存儲的數(shù)據(jù)進(jìn)行查詢操作,包括如下步驟:
[0009] S2. 1查詢鍵表,得到定性字段的關(guān)系表及中間key列表;
[0010] S2. 2查詢值表,具體為,在KV存儲系統(tǒng)中,Key和存儲節(jié)點(diǎn)是固定映射關(guān)系,根據(jù) 該映射關(guān)系將中間key列表按照存儲節(jié)點(diǎn)并行下發(fā)到各個數(shù)據(jù)存儲節(jié)點(diǎn)進(jìn)行查詢,得到數(shù) 據(jù)集;
[0011] S2. 3根據(jù)中間Key列表對關(guān)系表和數(shù)據(jù)集進(jìn)行聯(lián)合,得到合并表;
[0012] S2. 4在合并表上做分組及匯總操作。
[0013] 所述S1中還包括KT同構(gòu)及VT同構(gòu)化處理過程。
[0014] 所述S2.4具體為:
[0015] 分組下發(fā)查詢與匯總同時下發(fā),不下發(fā)匯總得到數(shù)據(jù)集記錄條數(shù)為N,下發(fā)匯總后 的記錄條數(shù)為M,則N> =M,下發(fā)匯總后,數(shù)據(jù)集操作條數(shù)降為原來?xiàng)l數(shù)的M/N,所述M、N均 為正整數(shù)。
[0016] 所述中間key是通過唯一序列發(fā)生器得到。
[0017] 本發(fā)明的有益效果:
[0018] (1)本發(fā)明充分結(jié)合了SQL數(shù)據(jù)庫系統(tǒng)和KV存儲系統(tǒng)的優(yōu)點(diǎn),支持復(fù)雜的數(shù)據(jù)結(jié) 構(gòu)和復(fù)雜查詢,普通KV型存儲只支持少量的數(shù)據(jù)結(jié)構(gòu),和類似GET/SET這樣的簡單查詢,但 本發(fā)明可以支持任意的復(fù)雜數(shù)據(jù)結(jié)構(gòu)和類似SQL的復(fù)雜查詢方式;
[0019] (2)支持橫向擴(kuò)展和海量數(shù)據(jù)存儲,通常SQL數(shù)據(jù)庫系統(tǒng)一般是運(yùn)行在單一機(jī)器 上的,當(dāng)數(shù)據(jù)量增大的時候就會遇到空間和性能的瓶頸,本發(fā)明可以在橫向上像普通KV存 儲系統(tǒng)那樣任意的擴(kuò)展機(jī)器,理論上不會遇到空間和性能的瓶頸;
[0020] (3)高速的查詢性能,本發(fā)明可以在查詢階段利用并行計(jì)算,在各個存儲節(jié)點(diǎn)上并 行執(zhí)行查詢,因而大大加快了數(shù)據(jù)的查詢速度。
【附圖說明】
[0021] 圖1是本發(fā)明數(shù)據(jù)表拆分圖;
[0022] 圖2是本發(fā)明的S-KV系統(tǒng)結(jié)構(gòu)圖;
[0023] 圖3是本發(fā)明的KT樹形結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0024] 下面結(jié)合實(shí)施例及附圖,對本發(fā)明作進(jìn)一步地詳細(xì)說明,但本發(fā)明的實(shí)施方式不 限于此。
[0025] 實(shí)施例
[0026] -種新型的KV分布式數(shù)據(jù)存儲方法,包括如下步驟:
[0027] 對于關(guān)系數(shù)據(jù)庫中的某一行數(shù)據(jù)來說,數(shù)據(jù)字段可能會很多,但基本上可以分成 兩類,即定性字段和定量字段。數(shù)據(jù)庫名和表名是一張表所有行共有的屬性,則實(shí)際上是兩 個隱含的定性字段,定性字段表示了該行是什么,而定量字段則表示有多少。對于SQL查詢 來說,關(guān)系操作(分組、聯(lián)合等)基本上都是針對定性字段,匯總操作(SUM、C0UNT等)則基 本都在定量字段上進(jìn)行。如果將定性字段稱之為鍵,定量字段稱之為值,那么傳統(tǒng)的關(guān)系型 數(shù)據(jù)也可以看成是一種形式的KV數(shù)據(jù)。
[0028] S1分布化存儲,具體為:在實(shí)際應(yīng)用中,定性字段和定量字段的數(shù)據(jù)量差別是非 常大的。例如一個博客系統(tǒng),定性字段為欄目加作者,定量字段為博主發(fā)表的每一篇文章, 后者的數(shù)據(jù)量比前者高了兩個數(shù)量級,而如果用關(guān)系型數(shù)據(jù)庫來存儲這些數(shù)據(jù)的話,實(shí)際 上定性字段會有非常多冗余。在S-KV系統(tǒng)中,我們對典型的數(shù)據(jù)表做了拆分,定性字段和 定量字段分為兩張表,并引入一個中間Key,如圖1所示,將定性字段構(gòu)成的表稱為鍵表(下 稱KT),右邊由定量字段構(gòu)成的表稱為值表(下稱VT),則原表可看作是KT和VT根據(jù)中間 key聯(lián)表所得。因?yàn)殛P(guān)系操作都在KT,而KT的數(shù)據(jù)量小,因此KT和中間key類似一個關(guān)系 型數(shù)據(jù)庫,;而VT的結(jié)構(gòu)類似于一個典型的KV系統(tǒng),可以將KT、中間key保存在關(guān)系型數(shù) 據(jù)庫中,VT保存在KV存儲系統(tǒng)中,進(jìn)而完成了整個系統(tǒng)的分布化存儲。
[0029] 分布化存儲后往往存在多張數(shù)據(jù)表的,