国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

pika nemo引擎數(shù)據(jù)存儲格式

2018-09-27 10:21 更新

nemo本質(zhì)上是對rocksdb的改造和封裝,使其支持多數(shù)據(jù)結構的存儲(rocksdb只支持kv存儲)??偟膩碚f,nemo支持五種數(shù)據(jù)結構類型的存儲:KV鍵值對(為了區(qū)分,nemo的的鍵值對結構用大寫的“KV”表示)、Hash結構、List結構、Set結構和ZSet結構。因為rocksdb的存儲方式只有kv一種結構,所以以上所說的5種數(shù)據(jù)結構的存儲最終都要落盤到rocksdb的kv存儲方式上。

1. KV鍵值對的存儲。

KV存儲沒有添加額外的元信息,只是在value的結尾加上8個字節(jié)的附加信息(前4個字節(jié)表示version,后 4個字節(jié)表示ttl)作為最后落盤kv的值部分。具體如下圖:

pika nemo引擎數(shù)據(jù)存儲格式

version字段用于對該鍵值對進行標記,以便后續(xù)的處理,如刪除一個鍵值對時,可以在該version進行標記,后續(xù)再進行真正的刪除,這樣可以減少刪除操作所導致的服務阻塞時間。

2. Hash結構的存儲

對于每一個Hash存儲,它包括hash鍵(key),hash鍵下的域名(field)和存儲的值 (value)。nemo的存儲方式是將key和field組合成為一個新的key,將這個新生成的key與所要存儲的value組成最終落盤的kv鍵值對。同時,對于每一個hash鍵,nemo還為它添加了一個存儲元信息的落盤kv,它保存的是對應hash鍵下的所有域值對的個數(shù)。下面的是具體的實現(xiàn)方式:

  • 每個hash鍵、field、value到落盤kv的映射轉(zhuǎn)換 

nemo引擎數(shù)據(jù)存儲格式

  • 每個hash鍵的元信息的落盤kv的存儲格式 

pika nemo引擎數(shù)據(jù)存儲格式

  • 中前面的橫條對應落盤kv的鍵部分,從前到后,第一個字段是一個字符’h’,表示的是hash結構的key;第二個字段是hash鍵的字符串長度,用一個字節(jié)(uint8_t類型)來表示;第三個字段是hash鍵的內(nèi)容,因為第二個字段是一個字節(jié),所以這里限定hash鍵的最大字符串長度是254個字節(jié);第四個字段是field的內(nèi)容。a中后面的橫條代表的是落盤kv鍵值對的值部分,和KV結構存儲一樣,它是存入的value值加上8個字節(jié)的version字段和8個字節(jié)的ttl字段得到的。 b中前面的橫條代表的存儲每個hash鍵的落盤kv鍵值對的鍵部分,它有兩字段組成,第一個字段是一個’H’字符,表示這存儲時hash鍵的元信息,第二個字段是對應的hash鍵的字符串內(nèi)容;b中后面的橫條代表的該元信息的值,它表示對應的hash鍵中的域值對(field-value)的數(shù)量,大小為8個字節(jié)(類型是int64_t)。

3. List結構的存儲

顧名思義,每個List結構的底層存儲也是采用鏈表結構來完成的。對于每個List鍵,它的每個元素都落盤為一個kv鍵值對,作為一個鏈表的一個節(jié)點,稱為元素節(jié)點。和hash一樣,每個List鍵也擁有自己的元信息。

a. 每個元素節(jié)點對應的落盤kv存儲格式 

pika nemo引擎數(shù)據(jù)存儲格式

b.每個元信息的落盤kv的存儲格式 

pika nemo引擎數(shù)據(jù)存儲格式

a中前面橫條代表的是最終落盤kv結構的鍵部分,總共4個字段,前面三個字符段分別為一個字符’l’(表明是List結構的結存),List鍵的字符串長度(1個字節(jié))、List鍵的字符串內(nèi)容(最多254個字節(jié)),第四個字段是該元素節(jié)點所對應的索引值,用8個字節(jié)表示(int64_t類型),對于每個元素節(jié)點,這個索引(sequence)都是唯一的,是其他元素節(jié)點訪問該元素節(jié)點的唯一媒介;往一個空的List鍵內(nèi)添加一個元素節(jié)點時,該添加的元素節(jié)點的sequence為1,下次一次添加的元素節(jié)點的sequence為2,依次順序遞增,即使中間有元素被刪除了,被刪除的元素的sequence也不會被之后新插入的元素節(jié)點使用,這就保證了每個元素節(jié)點的sequence都是唯一的。b中后面的橫條代表的是具體落盤kv結構的值,它有5個字段,后面的三個字段分別為存入的value值、version、ttl,這和前面的hash結構存儲是類似的;前兩個字段分別表示的是前一個元素節(jié)點的sequence、和后一個元素節(jié)點的sequence、通過這兩個sequence,就可以知道前一個元素節(jié)點和后一個元素節(jié)點的羅盤kv的鍵內(nèi)容,從而實現(xiàn)了一個雙向鏈表的結構。

b中的前面橫條表示存儲元信息的落盤kv的鍵部分,和前面的hash結構是類似的;后面的橫條表示存儲List鍵的元信息,它有四個字段,從前到后分別為該List鍵內(nèi)的元素個數(shù)、最左邊的元素 節(jié)點的sequence(相當于鏈表頭)、最右邊的元素節(jié)點的sequence(相當于鏈表尾)、下一個要插入元素節(jié)點所應該使用的sequence。

4. Set結構的存儲

a.每個元素節(jié)點對應的落盤kv存儲格式 

pika nemo引擎數(shù)據(jù)存儲格式

b.每個Set鍵的元信息對應的落盤kv存儲格式 

pika nemo引擎數(shù)據(jù)存儲格式

Set結構的存儲和hash結構基本是相同的,只是Set中每個元素對應的落盤kv中,值的部分只有version和ttl,沒有value字段。

5. ZSet結構的存儲

ZSet存儲結構是一個有序Set,所以對于每個元素,增加了一個落盤kv,在這個增加的羅盤 kv的鍵部分,把該元素對應的score值整合進去,這樣便于依據(jù)Score值進行排序(因為從rocksdb內(nèi)拿出的數(shù)據(jù)時按鍵排序的),下面是落盤kv的存儲形式。 

a. score值在value部分的落盤kv存儲格式 

pika nemo引擎數(shù)據(jù)存儲格式

b. score值在key部分的落盤kv存儲格式 

pika nemo引擎數(shù)據(jù)存儲格式

c.存儲元信息的落盤kv的存儲格式 

pika nemo引擎數(shù)據(jù)存儲格式

a、c與前面的幾種數(shù)據(jù)結構類似,不再贅述。b中的score是從double類型轉(zhuǎn)變過來的int64_t類型,這樣做是為了可以讓原來的浮點型的score直接參與到字符串的排序當中(浮點型的存儲格式與字符串的比較方式不兼容)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號