Mini Compaction 负责生成L0层的SSTable,磁盘采用高效的稠密格式,在最大化IOPS的同时,对CPU消耗最小。
Minor Compaction 负责生成L1层,合并多个L0和L1层SSTable。其功能是重新整理同一主键上的多版本数据,提高查询性能。自动探测增量数据间的重叠范围,做宏块级别的数据块重用,降低空间放大。未来,还会支持数据编码和压缩,进一步降低磁盘开销。
Major Compaction 产生L2层的基线数据,是降本的主要贡献者。除了进一步回收增量数据中的老版本数据、磁盘格式根据用户的表格属性会采用高级压缩技术降低存储成本以外,还对离散插入导致的数据空洞做重整和压缩,更好地支持不同类型的数据更新模型。值得一提的是,Major还负责多副本间的数据校验,保证数据存储的安全可靠。
怪兽充电作为共享充电宝第一股,注册用户超3.6亿,日均订单量190万笔,业务增长迅速,以至于业务架构不停地增加组件。当时使用的混合云架构复杂,微服务与多数据组件(MySQL、Elasticsearch等)并存,面临运维成本高、存储成本高、扩展性差等诸多问题。
怪兽充电的订单业务主要是充电宝,其特点是客单价较低、单量大。从MySQL下图是订单业务使用的数据库情况。主要包含支持用户下单的高并发实时数据库、满足后台多字段的联合查询需求的Elasticsearch 集群、使用 MySQL 分库分表的历史库。迁移到OceanBase后,存储量从原来的 9.62TB*2(9.62 为单 MySQL 实例,考虑主从高可用部署所以乘以 2)变为 5.6TB(三副本的总存储量),存储成本节约了 71%。64个 MySQL 库合并为单集群,减少了分库分表维护负担,且短期之内无容量瓶颈问题,大幅度降低了存储成本,简化了运维难度。 (四)携程双业务升级数据库,硬件降本60%,存储降本85%