tikv学习1

 

 

 

 

 

 

以下是针对图片中提到的 **RocksDB 相关技术**在 **TiKV(TiDB 的分布式存储引擎)** 中的实现说明:

---

### 1. **Prefix Bloom Filter**
- **作用**:
优化基于前缀(Prefix)的查询性能,例如 `WHERE key LIKE 'prefix%'`。通过为特定前缀生成布隆过滤器,快速判断该前缀对应的数据块是否存在于 SST 文件中,减少磁盘 I/O。
- **TiKV 实现**:
TiKV 使用 RocksDB 的 Prefix Bloom Filter 来加速范围查询(Range Queries),尤其是在处理 TiDB 的索引扫描时。通过配置 `prefix_extractor` 定义前缀规则,RocksDB 会为每个数据块生成前缀布隆过滤器。
- **示例场景**:
当查询 `WHERE user_id LIKE '1001%'` 时,Prefix Bloom Filter 可以快速跳过不包含该前缀的数据块。

---

### 2. **TableProperties**
- **作用**:
RocksDB 的 SST 文件元数据管理,存储每个 SST 文件的统计信息(如键值数量、大小、最小/最大键等)。
- **TiKV 实现**:
TiKV 通过 TableProperties 实现高效的 SST 文件管理和监控。例如:
- 统计 Region 的数据分布。
- 在 Compaction 或数据迁移时,快速获取文件的关键信息。
- 结合 `EventListener` 实现自定义监控逻辑。

---

### 3. **CompactRange**
- **作用**:
手动触发指定键范围的 Compaction 操作,合并 SST 文件以减少碎片化并优化查询性能。
- **TiKV 实现**:
TiKV 在以下场景调用 `CompactRange`:
- **Region 分裂/合并**:调整 Region 数据分布后,主动触发 Compaction 优化存储。
- **手动运维**:DBA 通过 TiKV 管控工具(如 `tikv-ctl`)强制 Compaction。
- **垃圾回收**:清理已删除或过期数据后,释放磁盘空间。

---

### 4. **EventListener**
- **作用**:
监听 RocksDB 的事件(如 Flush、Compaction、SST 文件删除等),用于监控和自定义逻辑。
- **TiKV 实现**:
TiKV 通过 `EventListener` 实现以下功能:
- **监控指标**:统计 Compaction 耗时、SST 文件数量等。
- **数据审计**:记录 SST 文件的创建和删除事件。
- **调试工具**:在开发阶段追踪 RocksDB 内部行为。

---

### 5. **IngestExternalFile**
- **作用**:
直接将外部生成的 SST 文件导入 RocksDB,避免通过写入路径(Write-Ahead Log)处理,提升批量导入性能。
- **TiKV 实现**:
TiKV 在以下场景使用该特性:
- **数据迁移**:通过 Lightning(TiDB 生态工具)快速导入初始数据。
- **备份恢复**:从备份文件直接加载 SST 文件到指定节点。
- **批量写入**:绕过 Write Batch 限制,实现高性能批量插入。

---

### 6. **DeleteFilesInRange**
- **作用**:
删除指定键范围内的所有 SST 文件,用于快速清理数据。
- **TiKV 实现**:
TiKV 在以下场景使用该特性:
- **Region 数据清理**:当 Region 被合并或迁移后,直接删除对应范围的 SST 文件。
- **TTL 过期数据**:清理按时间范围过期的数据(如日志)。
- **紧急修复**:强制删除损坏或异常数据。

---

### 7. **CompactionFilter**
- **作用**:
在 Compaction 过程中过滤或修改键值对,例如删除过期数据或执行自定义清理逻辑。
- **TiKV 实现**:
TiKV 利用 `CompactionFilter` 实现:
- **MVCC 垃圾回收**:清理多版本控制(MVCC)中的旧版本数据。
- **TTL 自动删除**:根据时间戳自动清理过期数据。
- **数据加密**:在 Compaction 过程中动态加解密数据。

---

### TiKV 与 RocksDB 的关系
- **底层存储引擎**:TiKV 使用 RocksDB 作为单机存储引擎,负责将 Region 数据持久化到磁盘。
- **分布式扩展**:通过 Raft 协议将多个 RocksDB 实例组合成分布式存储集群。
- **性能优化**:TiKV 深度定制 RocksDB 参数(如 `block cache`、`write buffer`)以适应 OLTP 场景。

---

### 总结
图片中的技术点均为 **RocksDB 的核心特性**,TiKV 通过这些特性实现了:
1. **高性能存储**(Prefix Bloom Filter、IngestExternalFile)
2. **数据生命周期管理**(DeleteFilesInRange、CompactionFilter)
3. **运维与监控**(TableProperties、EventListener)
4. **资源优化**(CompactRange)

这些功能共同支撑了 TiKV 作为分布式数据库存储层的高可用性和强一致性。

 

 

 

 

 

 

 

根据你提供的截图,内容出自 TiDB COMMUNITY 的演讲或分享会,幻灯片主题为 "Other Concepts",列出了 TiKV 中常见但相对进阶的概念:


1. Snapshot

  • 作用:用于数据一致性的读取。Raft 中的 snapshot 是用来压缩 log、提升恢复效率的机制;而 TiKV 的 RocksDB snapshot 是提供一致性读视图的机制。

  • 场景

    • follower 节点日志滞后严重时,leader 会发送 snapshot 快照来同步。

    • Coprocessor 读取 snapshot 实现事务隔离。


2. Pre-vote

  • 作用:Raft 协议中的优化机制,防止网络分区恢复后旧 leader 发起不必要选举,造成不稳定。

  • 机制

    • 候选人先发起 pre-vote 请求,如果大多数节点同意,再进入正式选举阶段。

  • TiKV 中体现:稳定集群选举过程,减少无效 term 增长。


3. LeaderTransfer

  • 作用:将 region 的 leader 主动转移给其他副本,常用于维护场景或负载均衡。

  • 注意

    • 目标必须是 up-to-date 的 peer。

    • 可用 API 调用或通过 PD 调度实现。


4. Learner

  • 定义:Raft 的一种非投票成员,仅同步数据,不参与选举。

  • 用途

    • 用于数据扩容(add peer 过程先是 learner)。

    • 作为只读节点或热备副本。

  • 特点

    • 提高读并发、不影响 Raft 协议一致性。


5. Split/Merge

  • Split

    • 将 region 拆分成多个更小的 region。

    • 避免某个 region 过大、成为热点。

    • 自动和手动触发均支持。

  • Merge

    • 当 region 太小或频繁空读写时,可合并多个小 region 提升效率。

    • 自动 merge 由 PD 控制,也可手动触发。


这些概念都是 TiKV 在分布式一致性、性能调优和维护运维方面的重要技术机制。如果你需要更深入理解其中某个概念(例如 snapshot 数据结构,或 leader transfer 的实现代码),我也可以继续展开解释。需要深入哪一部分?

posted on 2025-04-24 08:23  吃草的青蛙  阅读(52)  评论(0)    收藏  举报

导航