tikv全面学习7(raw是没有事务接口的)

 

 

以下是关于 TiKV 中 **读取点(Read Point)** 和 **协处理器(Coprocessor)** 如何提升性能的详细解释:

---

### **1. 读取点(Read Point)的核心作用**
在 TiKV 中,**读取点(Read Point)** 是通过 **MVCC(多版本并发控制)** 实现的关键机制,用于确保数据的一致性和隔离性。其核心原理与优化点如下:

#### **(1) MVCC 与读取点的关系**
- **数据版本化**:每个键值对(Key-Value)附带时间戳(由 PD 分配的 TSO),记录写入版本(`commit_ts`)和删除版本(`delete_ts`)。
- **读取点定义**:事务或查询在读取数据时,指定一个时间戳(如事务的 `start_ts`),表示仅读取该时间戳之前已提交的数据版本。
  - 示例:若事务的 `start_ts = 100`,则只能读取 `commit_ts ≤ 100` 的数据。

#### **(2) 存储层优化(Storage Read Point)**
- **快照隔离(Snapshot Isolation)**:  
  TiKV 存储引擎(基于 RocksDB)为每个读取点创建数据快照,避免读取过程中因写入冲突导致的锁等待。
  - **性能优化**- **减少锁竞争**:读操作无需加锁,直接通过 MVCC 版本选择实现一致性。  
    - **并行读取**:不同事务的读取点互不干扰,支持高并发查询。  

#### **(3) 协处理器的读取点(Coprocessor Read Point)**
- **下推计算的上下文**:  
  当 TiDB 将计算下推到 TiKV 的 Coprocessor 时,会传递事务的 `start_ts` 作为读取点,确保协处理器在本地读取一致的数据版本。  
  - **优化效果**- **减少网络往返**:过滤、聚合等操作直接在存储层完成,仅返回结果集。  
    - **避免重复版本检查**:协处理器基于读取点直接定位有效数据,跳过无效版本。  

---

### **2. 协处理器(Coprocessor)如何加速 TiKV**
#### **(1) 计算下推的核心思想**
- **将计算靠近数据**:  
  将部分 SQL 计算逻辑(如过滤、聚合、排序)下推到 TiKV 节点执行,减少 TiDB 与 TiKV 之间的数据传输量。  
  - **示例**:  
    ```sql
    SELECT COUNT(*) FROM t WHERE age > 18;
    ```
    - **无下推**:TiKV 返回所有数据,TiDB 在计算层过滤并计数。  
    - **有下推**:TiKV 直接过滤 `age > 18` 并计算 `COUNT(*)`,仅返回最终结果。

#### **(2) 协处理器与读取点的协同优化**
- **一致性保证**:  
  协处理器使用事务的读取点(`start_ts`)确保下推计算基于一致的数据快照。  
- **减少数据传输**:  
  下推过滤(`WHERE`)和投影(`SELECT` 列)后,仅需传输少量数据到 TiDB。  
- **资源利用率提升**:  
  分布式并行计算:多个 TiKV 节点并行处理不同 Region 的数据,TiDB 仅需聚合结果。

#### **(3) 性能提升的量化效果**
| **场景**               | **网络传输量** | **TiDB 计算负载** | **TiKV 计算负载** |  
|------------------------|----------------|-------------------|--------------------|  
| **无协处理器下推**      | 高(原始数据)  | 高(全量处理)     | 低(仅扫描数据)    |  
| **有协处理器下推**      | 低(结果数据)  | 低(聚合结果)     | 高(本地计算)      |  

---

### **3. 实际案例:读取点与协处理器的协作流程**
#### **场景:执行 `SELECT SUM(sales) FROM orders WHERE region = 'Asia' AND ts <= 2023-01-01`**
1. **TiDB 解析与优化**- 生成执行计划,将 `WHERE region = 'Asia'` 和 `SUM(sales)` 下推到 TiKV。  
2. **读取点传递**- TiDB 向 Coprocessor 传递事务的 `start_ts`(如 `1000`),确保读取 2023-01-01 前的数据。  
3. **TiKV 协处理器执行**- 根据 `start_ts` 读取 MVCC 快照,过滤 `region = 'Asia'`,计算 `SUM(sales)`。  
4. **结果返回**- TiKV 仅返回聚合结果(如 `SUM(sales) = 1,000,000`),而非全量数据。  

#### **性能优化点**- **网络传输**:从 TB 级数据缩减为单个数值。  
- **计算效率**:并行扫描多个 Region,本地聚合降低 TiDB 负载。  
- **一致性**:基于读取点的 MVCC 快照,避免中途写入干扰。  

---

### **4. 总结:为什么这些机制让 TiKV 更快?**
| **机制**               | **优化目标**         | **具体效果**                                                                 |
|------------------------|---------------------|-----------------------------------------------------------------------------|
| **读取点(Read Point)** | 一致性 & 并发控制    | 无锁读取、快照隔离、高并发查询。                                                |
| **协处理器(Coprocessor)** | 计算下推 & 数据局部性 | 减少网络传输、分布式并行计算、降低 TiDB 负载。                                   |
| **MVCC 版本管理**       | 多版本支持           | 避免写操作阻塞读操作,提升读写并发能力。                                         |

通过上述机制,TiKV 在保持强一致性的同时,显著提升了分布式查询的吞吐量和响应速度,尤其适合 OLAP 与 HTAP 混合负载场景。

 

 

posted on 2025-05-02 13:08  吃草的青蛙  阅读(25)  评论(0)    收藏  举报

导航