BigArray算法核心

几个Object: logical array, index page files, data page files


Logical Array: 

1) head index: next array index to append

2) tail index: start index of the array, typically 0, if not wrapped

这两个是logical array的metadata, 是其他一些metadata的源,需要persist。


index files

固定大小的entry(index item),每个index page file装多少个index项是固定的,index page file大小也是固定的

给定一个array index 如何映射到 index page file + offset ?

index page file number = array index / index count per index page

offset = (array index % number of index per page) * size of index item


index entry/ 大小固定 12 bytes

1) data page file number, 4 bytes, 最多支持 2^32个 data page,

2) offset in data page, 2 bytes, data page最大 2^16 bytes, 64K,和系统page 吻合

3) data length, 2 bytes,数据最大允许64K,

4) data time-stamp, 4 bytes,时间


data files (data pages)

最多 4G个 data file,每个data file 最大64K,每个数据项大小不固定,


append的逻辑:

1)系统启动初始化好head data page number以及offset(logical array的 head index - 1-> 对应的index entry -> data file No. 和 offset)

2)append head data file, 从offset 处,并更新offset

3)  找到 head 的index entry, 写入data file No, offset, data length, time-stamp

4) logic array的index 加1,persist


并发控制:

主要是保证只有一个线程append,读和读之前没冲突,读和append之间也没有,会validate index, 保证读的index小于head的index,(validate index 和实际读之间如果有写,只会增加head的index,使得index 更小于 head)



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值