go语言算子处理 go语言数学计算( 三 )


截止本文发稿时 TiDB 已在 500+ 用户的生产环境中长期稳定运行,涵盖金融、保险、制造,互联网,游戏 等领域,涉及交易、数据中台、 历史 库等多个业务场景 。不同业务场景对关系型数据库的诉求可用 “百花齐放”来形容,但对关系数据库最根本的诉求未发生任何变化 , 如数据可靠性,系统稳定性,可扩展性,安全性,易用性等 。请跟随我们的脚步梳理 TiDB 3.0 有什么样的惊喜 。
3.0 与 2.1 版本相比,显著提升了大规模集群的稳定性,支持单集群 150+ 存储节点,300+TB 存储容量长期稳定运行,主要的优化点如下:
1. 优化 Raft 副本之间的心跳机制,按照 Region 的活跃程度调整心跳频率,减小冷数据对集群的负担 。
2. 热点调度策略支持更多参数配置,采用更高优先级 , 并提升热点调度的准确性 。
3. 优化 PD 调度流程,提供调度限流机制,提升系统稳定性 。
4. 新增分布式 GC 功能,提升 GC 的性能 , 降低大集群 GC 时间 , 提升系统稳定性 。
众所周知,数据库查询计划的稳定性对业务至关重要,TiDB 3.0 版本采用多种优化手段提升查询计划的稳定性 , 如下:
1. 新增 Fast Analyze 功能,提升收集统计信息的速度,降低集群资源的消耗及对业务的影响 。
2. 新增 Incremental Analyze 功能 , 提升收集单调递增的索引统计信息的速度,降低集群资源的消耗及对业务的影响 。
3. 在 CM-Sketch 中新增 TopN 的统计信息,缓解 CM-Sketch 哈希冲突导致估算偏大,提升代价估算的准确性 , 提升查询计划的稳定性 。
4. 引入 Skyline Pruning 框架 , 利用规则防止查询计划过度依赖统计信息,缓解因统计信息滞后导致选择的查询计划不是最优的情况,提升查询计划的稳定性 。
5. 新增 SQL Plan Management 功能,支持在查询计划不准确时手动绑定查询计划,提升查询计划的稳定性 。
1. OLTP
3.0 与 2.1 版本相比 Sysbench 的 Point Select,Update Index,Update Non-Index 均提升约 1.5 倍,TPC-C 性能提升约 4.5 倍 。主要的优化点如下:
1. TiDB 持续优化 SQL 执行器 , 包括:优化 NOT EXISTS 子查询转化为 Anti Semi Join,优化多表 Join 时 Join 顺序选择等 。
2. 优化 Index Join 逻辑,扩大 Index Join 算子的适用场景并提升代价估算的准确性 。
3. TiKV 批量接收和发送消息功能 , 提升写入密集的场景的 TPS 约 7%,读密集的场景提升约 30% 。
4. TiKV 优化内存管理,减少 Iterator Key Bound Option 的内存分配和拷贝,多个 Column Families 共享 block cache 提升 cache 命中率等手段大幅提升性能 。
5. 引入 Titan 存储引擎插件,提升 Value 值超过 1KB 时性能 , 缓解 RocksDB 写放大问题,减少磁盘 IO 的占用 。
6. TiKV 新增多线程 Raftstore 和 Apply 功能 , 提升单节点内可扩展性,进而提升单节点内并发处理能力和资源利用率,降低延时,大幅提升集群写入能力 。
TiDB Lightning 性能与 2019 年年初相比提升 3 倍,从 100GB/h 提升到 300GB/h,即 28MB/s 提升到 85MB/s , 优化点,如下:
1. 提升 SQL 转化成 KV Pairs 的性能,减少不必要的开销 。
2. 提升单表导入性能 , 单表支持批量导入 。
3. 提升 TiKV-Importer 导入数据性能,支持将数据和索引分别导入 。
4. TiKV-Importer 支持上传 SST 文件限速功能 。
RBAC(Role-Based Access Control,基于角色的权限访问控制) 是商业系统中最常见的权限管理技术之一,通过 RBAC 思想可以构建最简单“用户-角色-权限”的访问权限控制模型 。RBAC 中用户与角色关联 , 权限与角色关联 , 角色与权限之间一般是多对多的关系 , 用户通过成为什么样的角色获取该角色所拥有的权限,达到简化权限管理的目的,通过此版本的迭代 RBAC 功能开发完成 。

推荐阅读