杭州做网站公司排名,行业门户型网站制作,滕州网站建设网站行吗,微信运营是什么样的岗位文章目录 LevelDB 中各种文件的作用SSTWALMANIFESTCURRENTLOCKLOG LevelDB 中各种文件的作用
在 LevelDB 中#xff0c;有以下几种类型的文件: SST(Sorted String Table) 文件名为xxx.ldb#xff0c;存储实际的 Key-Value 数据。 WAL(Write Ahead Log) 文件名为xxx.log有以下几种类型的文件: SST(Sorted String Table) 文件名为xxx.ldb存储实际的 Key-Value 数据。 WAL(Write Ahead Log) 文件名为xxx.log记录最近的写操作以便在系统崩溃后恢复数据。 MANIFEST 文件名为MANIFEST-xxx记录了数据库的当前状态。 CURRENT 文件名为CURRENT指向当前使用的 MANIFEST 文件用于快速定位数据库状态 LOCK 文件名为LOCK防止数据库被多个进程同时访问 LOG 文件名为LOG日志输出
SST
SST 文件是 LevelDB 中存储实际 Key-Value 数据的文件。
WAL
当我们往 LevelDB 中写入一对 Key-Value 时其大概流程是:
会往 WAL 中写入一条记录我们可以简单表示成 Add Key: key_a, Value: value_a。将这对 Key-Value 写入内存中的 MemTable。
当内存中的 MemTable 大小达到阈值时会将 MemTable 写入到磁盘变成 SST 文件。
倘若我们将 Key-Value 写入 MemTable 后在 MemTable 写入磁盘之前系统崩溃了那么这条记录就会丢失。为了防止这种情况LevelDB 会将每一条写操作都记录到 WAL 中这样即使系统崩溃我们也可以通过 WAL 来恢复 MemTable 中的数据保证数据不丢失。
MANIFEST
如何理解 MANIFEST 记录了数据的当前状态呢
其实就是记录了当前 LevelDB 中有哪些 SST 文件每个 SST 的大小SST 里 Key 的范围SST 属于哪个 Level等等。
当我们打开一个已经存在的数据库目录时LevelDB 怎么知道上次关闭数据库时的状态呢各个 SST 文件都属于哪个 Level
通过读取 MANIFEST 文件LevelDB 就可以知道上次关闭数据库时的状态将数据库恢复到上次关闭时的状态。
CURRENT
CURRENT 文件中存储的是当前正在使用的 MANIFEST 文件。
当创建新的 MANIFEST 文件时LevelDB 会先更新 CURRENT文件使其指向新的 MANIFEST 文件然后再将旧的 MANIFEST 文件删除。
倘若没有 CURRENT 文件新 MANIFEST 文件创建后还没来得及删除旧的 MANIFEST 文件系统就崩溃了那么 LevelDB 恢复时就不知道当前正在使用的 MANIFEST 文件是哪个也就无法恢复到正确的状态。
LOCK
LevelDB 只允许一个进程访问数据库为了实现这个功能LevelDB 会在数据库目录下创建一个 LOCK 文件当进程访问数据库时会先尝试获取这个文件的锁如果获取成功说明当前没有进程访问数据库可以继续访问如果获取失败说明当前已经有进程在访问数据库就不能再访问了。
LOG
LOG 文件用于记录数据库的运行状态和一些重要的事件。以下是一些可能出现在LOG文件中的信息 数据库的打开和关闭当数据库被打开或关闭时会在LOG文件中记录这个事件。 数据写入当数据被写入数据库时会在LOG文件中记录这个事件包括写入的键值对的信息。 数据删除当数据被从数据库中删除时会在LOG文件中记录这个事件包括被删除的键的信息。 错误和异常如果在运行过程中发生错误或异常会在LOG文件中记录这个事件包括错误或异常的详细信息。 压缩操作当进行压缩操作时会在LOG文件中记录这个事件包括压缩的级别和涉及的文件。 MemTable和SST文件的创建和删除当创建或删除MemTable和SST文件时会在LOG文件中记录这个事件。