一个Bitcask实例就是一个目录,我们保证在一个时刻只有一个系统进程可以打开Bitcask进行写操作。
在一个时刻,只有一个文件是“active”的。当文件达到一定的大小限制就会关闭,并创建一个新的“active”文件。
一旦一个文件关闭了,就视为是不可变的,即不会再打开来进行写操作。
“active”file是以追加的方式来进行写操作,意味着顺序写不会导致磁盘搜索。
一个key-value entry
的结构如下:
一个Bitcask数据文件的结构如下所示:
当追加完成之后,一个在内存中的称为“keydir”的结构就已经更新了。一个keydir
就是一个哈希表,每一个key
都映射到一个包含文件、偏移量、大小等信息的结构体。大概看起来像是这样:
当一个写操作发生时,keydir
会自动更新数据。虽然旧数据还存在磁盘中&#