BaikalDB 1.1.2 版本发布
BaikalDB 正式开启 1.1.X 版本
版本发布
https://github.com/baidu/BaikalDB/releases/tag/v1.1.2
https://gitee.com/mirrors/BaikalDB/tree/v1.1.2
主要特性介绍
分布式事务实现优化
在第一版事务设计中,如果事务COMMIT过程中有部分Region失败,通过持续重试直到Region全部成功才结束,但在生产环境下可能永远不会结束重试,这会带来额外的运维工作。
因此在新版本事务实现中,我们结合Rocksdb悲观事务与Percolator事务模型,引入Primary Region作为事务同步点。只有Primary Region COMMIT成功或者ROLLBACK成功后,才会继续给其他Region发送COMMIT/ROLLBACK指令。
基于Primary Region,接入层模块(baikaldb)的相关逻辑得以简化,其他Region超时未收到COMMIT/ROLLBACK指令会通过反查Primary Region来判断事务状态。Primary Region也通过raft同步状态,稳定性大幅提升。
还有一个重要的改进点是与Raft结合的部分,在第一版设计中,DML语句是在Leader上全部执行成功,Leader收到PREPARE指令后,才一次性打包复制给Follower,导致大事务情况下,Follower比Leader落后过多,造成不一致和不稳定的情况。本次我们改造了单条DML语句在Leader执行成功无冲突后,就直接通过Raft复制给Follower,使得Follower不会落后Leader过多,有效降低了不一致风险。
二级索引
在1.0.x版本中,BaikalDB 只支持局部二级索引,新版本中开始支持全局二级索引,并实现了局部二级索引的 Online Index Change。
局部二级索引,类似分片MySQL的各个分表的索引,主表与索引数据存储在统一分片中。好处是在分片内的处理是可以走单机事务,查询的也时候不需要网络交互。但是最大的问题是,局部索引查询时,如果没有分片信息(BaikalDB中是主键前缀),查询语句需要广播到所有分片,然后合并处理结果,在分片数上千的表中性能非常差。
全局二级索引,主表和索引数据独立存储,索引有独立的分片规则。好处是索引独立路由,查询性能比较稳定,不会有大量分片广播的问题。缺点是每次查询需要额外网络开销,索引写入时需要分布式事务保证一致。
BaikalDB同时支持全局二级索引与局部二级索引。在查询语句都会带上分片信息时,优先建议使用局部二级索引,对于无分片信息的表建议选全局二级索引。参考[索引选择](https://github.com/baidu/BaikalDB/wiki/Index-Selection)。
业务最常见的Schema Change需求是加列与加索引。BaikalDB底层数据存储采用了ProtoBuf,因此加列无需特殊处理。对于加索引场景,目前支持了局部二级索引的Online Index Change。
Online Index Change主要参考了Google F1 的Online Schema Change方案,过程不阻塞业务读写,通过多状态保证一致。实现过程中,引入了NONE、DELETE_ONLY、WRITE_ONLY、REORG、PUBLIC几个状态保证数据一致。DELETE_ONLY只能删除索引,WRITE_ONLY可以写入和删除索引,REORG阶段把全部历史数据读出后写入到二级索引中。
随着全局二级索引使用越来越多,全局索引的Online Index Change也将实现。
基于代价模型的索引选择
在1.0.x版本中,我们的索引选择是依靠规则的,这在业务规模比较小的时候工作得很好。随着业务不断扩大,固定规则难以覆盖业务场景,业务使用显式Hint也较为繁琐。
因此在新版本中,我们引入了直方图和CMSketch收集表的统计信息。索引选择过程中,使用统计信息预估代价来选择索引。这部分依赖的统计信息目前还比较基础,后面也会引入更多统计维度。
支持SST备份恢复
在新版本中,我们引入了一个新的SST备份接口,通过Brpc的Stream接口,可以把全表的Region都写成SST文件并流式发送出去。这个接口比之前的select *的方式有着数量级的提升,可以用于数据的定期备份。同时,考虑到一个大集群中大量的Region是更新频率很低的,因此这个接口也支持版本号的传入,数据不更新就不需要备份,沿用之前的即可。配套的备份调度管理工具也在整理中,后续将逐步开源出来。
性能优化
在1.0.x版本中,倒排拉链使用的是ProtoBuf的存储格式,解析和析构性能较差。在新版本中引入了Apache Arrow的新拉链格式,可以大幅降低长拉链的解析和析构开销。
通过减少中间转化和ProtoBuf反射优化,大量数据扫描性能也相比之前有较高的提升。PREPARE STMT通过复用查询计划,减少bthread开销等方式,降低CPU使用。
其他功能
- 支持TTL功能,减轻业务GC负担
- 支持HyperLogLog功能,支持业务统计,实现跟 Redis HyperLogLog 完全一致
- 支持存储通过resource_tag隔离,支持表粒度的不同集群间迁移数据
- 支持物理机房分布功能,可以选择不同机房副本分布方式
- 增加几十个常用MySQL函数

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Proxy-Go v9.7 发布,优化集群对内网穿透的支持!
Proxy 是 golang 实现的高性能 http、https、websocket、tcp、udp、socks5 代理服务器,支持正向代理、反向代理、透明代理、内网穿透、TCP/UDP 端口映射、SSH 中转、TLS 加密传输、协议转换、DNS 防污染智能代理、前置 CDN/Nginx 反代、代理连接重定向、API动态调用上级代理、限速限连接数。提供全平台的命令行版本,友好易用的Windows&Linux&macOS控制面板,强大的安卓版。 更新内容 1.agent功能增加了client服务key引用agent_id的支持. 特色功能 链式代理,程序本身可以作为一级代理,如果设置了上级代理那么可以作为二级代理,乃至N级代理。 通讯加密,如果程序不是一级代理,而且上级代理也是本程序,那么可以加密和上级代理之间的通讯,采用底层tls高强度加密,安全无特征。 智能HTTP代理,HTTPS代理,SOCKS5代理,会自动判断访问的网站是否屏蔽,如果被屏蔽那么就会使用上级代理(前提是配置了上级代理)访问网站;如果访问的网站没有被屏蔽,为了加速访问,代理会直接访问网站,不使用上级代...
- 下一篇
SOFAMosn v0.13.0 发布,云原生网络代理平台
MOSN v0.13.0 发布报告如下: 新功能 支持 Strict DNS Cluster@dengqian 支持 GZip 处理的 Stream Filter@wangfakang Dubbo 服务发现完成 Beta 版本@cch123 支持单机故障隔离的 Stream Filter@NeGnail 集成 Sentinel 限流能力@ansiz 优化 优化 EDF LB 的实现,使用 EDF 重新实现 WRR LB@CodingSinger 配置获取 ADMIN API 优化,新增 Features 和环境变量相关 ADMIN API@nejisama 更新 Host 时触发健康检查的更新从异步模式修改为同步模式@nejisama 更新了 Dubbo 库,优化了 Dubbo Decode 的性能@zonghaishang 优化 Metrics 在 Prometheus 中的输出,使用正则过滤非法的 Key@nejisama 优化 MOSN 的返回状态码@wangfakang Bug 修复 修复健康检查注册回调函数时的并发冲突问题@nejisama 修复配置持久化函数没有正确处理空配...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境