求大神等等c语言100题题

本篇介绍对MemTable压缩,在介绍之前先普及一下其他内容

在存储流程第一篇博客中,有一个方法没有详细说明--MakeRoomForWrite该函数是保证新插入的数据有足够空间,那么该方法是如何保证的呢本篇就详细介绍一下该方法。

 * 确保有足够空间可写
 * 如果mem_没有可用空间可写则会重新生成mem_ 旧的mem_转成imm_ 然后启动后台线程
 * 进行压缩處理等相关操作
 * 虽然函数名字是将数据写到level0中 但是最终是否写到level0中取决于
 * 通常会保存在level0,本次存储的最小key和最大key不在level0范围内 就有可能
 * 存储箌更高层 为什么要这样做呢? 如果可以放到更高层 可以减少压缩频率
 //保存metafiledata 到了这里就确定了文件所属层次
 
 
BuildTable方法内部就是创建ldb文件并按照一定格式将数据写入到其中具体数据格式可参考。我们了解ldb是按照Block方式组织的一个Block默认大小是4KB,所以当数据超过4KB就会创建一个Block这里不在展示相关代码逻辑,只需要了解存储格式就能够比较轻松理解源码
 
从MemTable中dump出的文件一定是level0吗?答案是不一定leveldb中的ldb文件本身没有层次概念,所有的ldb文件都一样那么如何确定这个文件是在哪一层呢?即由函数PickLevelForMemTableOutput决定。
 * 根据最小key和最大key查找所在层次
 /* 如果和level0中key不重叠 则可能保存到更高层中 */
 //进入if分支 表示level层没有冲突 但是level+1层有冲突 则将文件保存在level层
 //如果冲突文件大小超过默认值20M则保存在level层中
 

1) 新文件中key与level0中文件key有重叠则將新文件设置为level0,否则进入2

3) 新文件中key与level2中文件key有重叠并且重叠文件大小超过20M则将新文件设置为level0,否则level加1重新进入2
leveldb为什么要这样设计呢?峩的理解如下:
1) level0中文件key可能重叠,文件越多影响性能所以新文件尽量不放到level0中

至此,MemTable生成ldb文件流程介绍完毕。
}

这个语句在mysql上是可以使用的但昰oracle会显示缺失右括号,请问怎么修改才能在oracle上实现

}

我要回帖

更多关于 C语言题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信