绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
AeroSpike 4.x 基本原理和读写流程
2022-04-14 10:37:22

AeroSpike 4.x 基本原理和读写流程

AeroSpike 是一个基于Hash的NoSQL,本质上是一个KV存储系统

简单的理解就是内存中存放了一个红黑树,红黑树里面存放的是索引,索引里面存放的是hash之后的值以及数据存放的位置

Index
......
// offset: 4
cf_digest keyd;//20 bytes
......
// offset: 47
uint64_t rblock_id: 37; // can address 2^37 * 16b = 2Tb drive
uint64_t n_rblocks: 19; // is enough for 8Mb/16b = 512K rblocks
uint64_t file_id: 7; // can spec 2^7 = 128 drives

......

索引中不会存放Key的值,而是存放一个hash值(通过key+set计算cf_digest_compute2),索引另外还存放了设备号(实际是文件)以及具体的rblock_id以及value的长度(n_rblocks)

大概的查询流程

st=>start: Start
find_index=>operation: 查内存索引
hit_index=>condition: 索引命中
find_swb=>operation: 查写入缓冲区(SWB)
find_ssd=>operation: 查磁盘
hit=>condition: 命中
e=>end

st->find_index->hit_index
hit_index(yes)->find_swb->hit
hit_index(no)->e
hit(yes)->e
hit(no)->find_ssd
find_ssd->e

理解 rblock,swb

设备(实际上是个文件描述符)

什么是rblock

我们把一个文件区域进行划分块,每一块大小为16byte

| rblock0 | rblock1 | rblock2 | ... | rblockn |

因此通过rblock_id 很容易就能确定value是在哪里存储

nblock是这条记录占用block的数量

什么是swb

swb 是写入缓冲区

因为写磁盘这个操作比较耗时,为了降低系统调用次数可以引入缓冲区,每次先写这个缓冲区,写满之后再刷盘

AeroSpike所有操作都是基于写入的,只会操作当前缓冲区,不会更改之前写入的记录,比如删除一条记录也是写入一条某个key被删除

缓冲区大小是 8M

的key处理

后台线程扫描文件,整理块

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Aerospike
创建时间:2022-04-14 10:06:31
Aerospike
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • LCR_
    专家
戳我,来吐槽~