1.3 Go practices in TiDB   姚维
                
  
              1.76 MB
             
              32 页
               
              0 评论
              
| 语言 | 格式 | 评分 | 
|---|---|---|
中文(简体)  | .pdf  | 3  | 
| 摘要 | ||
文档介绍了TiDB中使用的Go语言实践,重点包括构建稳定的数据库和性能优化。构建稳定数据库的方法包括Schrödinger测试平台、故障注入(Failpoint injection)和Goroutine泄漏检测。性能优化部分讨论了Chunk与interface{}的对比,指出Chunk的优势在于更高效的行格式,但在内存使用和复杂类型处理上存在劣势。Chunk的结构包括多种数据类型的存储,但在并行计算和向量化执行中效果不佳。文档还提到向量化执行可以提高性能。  | ||
| AI总结 | ||
## TiDB 中的 Go 实践总结
TiDB 通过一系列 Go 实践来确保数据库的稳定性和高性能,这些实践主要包括构建稳定数据库和优化两大方面。
### 1. 构建稳定数据库
- **Schrodinger 测试平台**:用于测试和验证数据库的稳定性,模拟各种故障场景。
  
- **Failpoint 注入**:通过代码注释定义故障点,使用 `gofail` 工具自动转换注释为代码或反之。例如,在提交功能中注入模拟错误,之后通过禁用故障点恢复正常行为,方便测试错误处理机制。
  ```go
  func (txn *tikvTxn) Commit(ctx context.Context) error {
      // gofail: var mockCommitError bool
      // if mockCommitError && kv.IsMockCommitErrorEnable() {
      //     kv.MockCommitErrorDisable()
      //     return errors.New("mock commit error")
      // }
      // ... 正常提交逻辑 ...
  }
  ```
- **Goroutine 泄漏检测**:在测试用例的前后加入检测钩子,自动检查是否有协程泄漏,避免因为未释放的协程导致的内存泄漏。
  ```go
  func TestT(t *testing.T) {
      testleak.BeforeTest()
      TestingT(t)
      testleak.AfterTestT(t)()
  }
  ```
### 2. 优化
- **Chunk vs interface{}**:原始的 `Datum` 结构体存储数据虽然高效,但存在内存浪费和类型断言繁琐的问题。优化后采用 `Chunk` 格式,能有效降低内存占用并提升计算效率。
  ```go
  type Datum struct {
      k      byte   // 数据种类
      collation uint8
      decimal  uint16
      length  uint32
      i       int64
      b       []byte
      x       interface{} // 存储其他类型
  }
  ```
  优化后的 `Chunk` 格式:
  - **Chunk** 更加高效,专门用于向量化计算。
  - 每个列独立存储避免内存浪费,例如:
    ```sql
    CREATE TABLE `t` (
        `a` int(11) DEFAULT NULL,
        `b` varchar(10) DEFAULT NULL,
        `c` decimal(10,5) DEFAULT NULL,
        `d` timestamp NULL DEFAULT NULL
    )
    ```
    每列分别存储,提升了数据序列化效率,适合向量化执行,提升性能。
- **向量化执行**:优化后的数据格式更适合并行计算,提升处理速度。
### TiDB 架构概览
TiDB 包括:
- **TiKV**:键值存储引擎。
- **TiFlash**:列存储引擎,支持实时分析。
- **PD**:调度和管理模块。
- **分布式处理**:通过 Coprocessor 实现分层计算。
- **SQL 层**:包括解析、优化和执行。
### 核心要点总结
- **稳定性**:通过 Failpoint 和泄漏检测确保系统健壮。
- **性能优化**:采用更高效的数据存储和执行方式,提升处理能力。
- **架构优势**:模块化设计支持高扩展性和高性能。
这些实践确保了 TiDB 在稳定性和性能上的优秀表现,是其成为高效数据库的关键因素。  | ||
 P1 
 P2 
 P3 
 P4 
 P5 
 P6 
 P7 
 P8 
 P9 
 P10 
 P11 
 P12 
下载文档到本地,方便使用
    
                - 可预览页数已用完,剩余
                20 页请下载阅读 -
              
文档评分 
  













          Hyperledger Fabric 1.3 Documentation