YJ-Ma的小屋❄️
面条回家啦。胖胖的,又帅又可爱。
生日:2023.09.12。
体重:2.9斤。
自我介绍未来的职业规划是什么?你的优势和劣势是什么?项目里遇到的最大技术困难是什么,如何解决的?面试注意事项。
适用sql查询方法的kv数据库及其创建方法.pdf三篇文章了解 TiDB 技术内幕 - 说计算 | PingCAP如何将SQL数据映射到KV数据库weixin33804582的博客-CSDN博客关系模型到 Key-Value 模型的映射有多种方式可以将关系模型映射到键值存储模型,以下是其中的几种:使用主键作为键:关系模型中每个表格都有一个主键,可以将主键作为键,将包含该行数据的JSON对象作为值存储到键值存储中。使用复合键:如果关系模型中的表格中没有唯一的主键,可以使用多个列组合成一个复合键作为键,将包含该行数据的JSON对象作为值存储到键值存储中。使用索引作为键:在关系模型中,我们通常会创建索引来提高查询性能。可以将索引作为键,将包含该行数据的JSON对象作为值存储到键值存储中。使用冗余数据:在关系模型中,我们可以将某些数据冗余存储以提高查询性能。可以将这些冗余数据作为键,将包含该行数据的JSON对象作为值存储到键值存储中。以上这些方式各有优缺点,需要根据具体情况选择合适的方式进行映射。需要注意的是,在使用这些方式进行映射时,需要确保数据的一致性和完整性。关于表的元数据,可以使用一个
LSM树详解 - 知乎LSM Tree原理详解 - 简书(13条消息) 最容易理解的LSM树--以示例讲解合并查找过程\_lsm树示例\_土豆西瓜大芝麻的博客-CSDN博客
leveldb笔记之20:写入与读取流程 - Ying
LevelDB存储6:适者生存 —— Cache - 知乎LevelDB LRUCache浅谈 - 掘金LevelDB 源码解析之 Cache 缓存 - 掘金问题集数据什么时候过期?参考源码include/leveldb/cache.h: 定义Cache接口 util/cache.cc: 实现LRU缓存 table/table.cc: 读取Data Block时使用缓存 db/table_cache.cc:实现一个Table结构的缓存原理shardedLRUCache定义了多个LRUCache,用来实现分段式锁。每个LRUCache其实就是hashtable和hashnode。而in_use\_和lru\_只是从另外二个维度将hashnode使用双向链表连接起来。最新插入的数据排在链表尾部。就是将hashtable中的node分成了两组:in_use\_:正在被使用的放一组,通过双向链表把他们连接起来lru\_:没有被使用的node,最新的在最前面。所以每次淘汰从最后取。如果in_use\_使用结束的node放入lru,lru中被使用的节点要移动到in_use\_。中图的插入和淘汰只是
当前版本的引用计数至少是1。生成新版本时,将旧的当前版本Unref,就是引用计数减1。MANIFEST简而言之:每次启动都会根据当前 current文件指向MANIFEST文件进行恢复,MANIFEST第一条记录了一个版本的全部信息,后面是迭代的变化记录。根据当前MANIFEST生成一个版本后(当前版本+改变=最新版本),就会新建一个MANIFEST,存放新建的版本,后续将其他的变化记录在这个文件中。如果数据库本身没有重启,这个manifest会一直增长,即每次重启新建MANIFEST。manifest文件专用于记录版本信息。leveldb采用了增量式的存储方式,记录每一个版本相较于上一个版本的变化情况。VersionEdit的内容将持久化到MANIFEST里的。即:MANIFEST里面保存的是VersionEdit。一个Manifest内部包含若干条Session Record,其中第一条Session Record记载了当时leveldb的全量版本信息,其余若干条Session Record仅记录每次更迭的变化情况。因此,每个manifest文件的第一条Session Record
入口函数MaybeScheduleCompaction() void DBImpl::BackgroundCompaction()CompactionMinor Compaction:Immutable Memtable向level-0中的SSTable文件的转换(优先级高)。Major Compaction:将SSTable移到更高的Level去,需要保证Level 0以上的SSTable每层之间的键有序无重叠。Major Compaction其实就是一个归并排序的过程,对多个输入的SSTable,多路归并,输出多个连续的SSTable,代替原来的文件。根据Level 0的特殊性,可以分为两种类型:Level 0 -> Level 1Level n -> Level n + 1 (n > 0)将多个小SSTable合并成一个大SSTable,可以解决查找的效率问题。但是,如果不断地有新的小SSTable进来,这些小SSTable都需要和这个大的SSTable进行合并,不管多大的SSTable来合并,都需要读取所有的磁盘数据,并且写入所有的磁盘数据。大的SSTabl
可以通过布隆过滤器快速判断对应的键有没有在这个SSTable里。如果判断键在SSTable,那也只有很小的概率是键不在这个SSTable里。这是典型的用空间换时间的思想,选择布隆过滤器是因为布隆过滤器的空间占用非常小,可以加载到内存中,进行快速判定。
LevelDB SSTable文件数据布局 - 掘金深入浅出LevelDB —— 05 SSTable - 叉鸽 MrCroxx 的博客Archive - Ying's Blog参考源码使用table_builder_test进行梳理整个过程。Table类:读取sstable。sstable写入过程:创建文件 for: 插入kv创建data_block 将多个data_block插入到文件末尾 filter block写入sstable meta_index_block 写入 index block 写入footer//编解码BlockHandler,编解码Footer,根据BlockHandler读取一个键的内容 table/format.h table/format.cc //不断添加键值对,逐渐构建一个Block,主要是添加键值对,然后生成Block的数据 *table/block_builder.h table/block_builder.cc //对一个Block进行读取相关的功能 table/block.h table/block.cc table/f
YJ-Ma的小屋🍉
勿在浮沙筑高台