当前位置: 首页 > news >正文

Level DB --- Table

class Table 是 Level DB核心的几个组件之一,Table里面序列化高效存储了key-value,table是不可变的(immutable),并且持久存储的(persistent)。

反解数据

class Table其中主要一部分是Table Builder Level DB --- TableBuilder-CSDN博客 的反解。

反解 Meta

反解filter block和 index block,参考 Level DB --- table.format-CSDN博客 。

反解key-value

反解key-value,主要通过Iterator,参考Level DB --- two_level_iterator-CSDN博客。

Iterator

Table iterator 就是 Level DB --- two_level_iterator-CSDN博客。

核心函数

InternalGet

这里InternalGet是在table中找key,代码中的实现是先找到index value,再找data value。其实这里也可以使用two_level_iterator去查找,但是不能使用filter,所以代码中的实现效率更高。

ApproximateOffsetOf

ApproximateOffsetOf 在index block 里面查找key,其value就是offset。

Block cache

table中有一个block_cache,因为一个table 中 有若干个data block,如果每一个key查找都去file里面load数据,效率未免有些低,所以构建了一个table->rep_->options.block_cache(cache 可以参考 Level DB --- Cache_leveldb cache csdn-CSDN博客)。这里面每一个data block的key的计算:

//cache_key_buffer是每一个data block 的 key,其组成部分前八位是cache_id,
//后八位是该data block 的 offset
char cache_key_buffer[16];
EncodeFixed64(cache_key_buffer, table->rep_->cache_id);
EncodeFixed64(cache_key_buffer + 8, handle.offset());
Slice key(cache_key_buffer, sizeof(cache_key_buffer));

相关文章:

  • React Native 0.76正式版发布,带来多项目更新
  • from flask_session import Session 为什么是Session(app)这么用?
  • 线性模型 - 支持向量机
  • QT入门--信号和槽
  • Spring 源码解读(二)——BeanDefinition
  • 基于 go-wrk 在 Windows 环境下对 Go Web 应用进行 HTTP 压力测试
  • 选与不选?从暴力枚举到背包dp
  • 第13篇:Vue Router基础使用
  • 旋转位置编码(ROPE)详解:从Transformer到现代前沿
  • 管道-过滤器、隐式调用、解释器架构风格对比
  • Spring——SpringSecurity开发经验实战
  • 给小米/红米手机root(工具基本为官方工具)——KernelSU篇
  • 【Python量化金融实战】-第1章:Python量化金融概述:1.1量化金融的定义与发展历程
  • QListView实现文件选择功能
  • JAVAEE一>Spring IoC和DI详解
  • 2024全国青少年信息素养大赛python复赛真题--装错信封
  • 【自学嵌入式(9)ESP8266网络服务器的使用】
  • spring中关于Bean的复习(IOC和DI)
  • 深度学习(5)-卷积神经网络
  • Qt 是一个跨平台的 C++ 应用程序框架
  • 兰州网站设计有限公司/网络推广外包公司干什么的
  • 高端网站建设哪家更专业/十种网络推广的方法
  • 杭州餐饮网站建设/深圳推广公司
  • b2b网站建设怎么做/媒体邀约
  • 做网站要多大的画布/怎样制作一个自己的网站
  • 网站建设服务套餐/seo软文代写