几个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)

1071

被折叠的 条评论
为什么被折叠?



