分库分表后复杂查询的应对之道:基于DTS实时性ES宽表构建技术实践
内容提要
文章介绍了数据库架构在业务发展初期往往是单库单表,随着用户量和订单量的增加,数据库成为系统瓶颈。解决方案有分库分表、构建ES宽表和构建查询条件到表主键Mapping映射表。ES宽表的构建解决方案有同步双写、异步双写和基于Binlog的实时同步。文章对解决方案的优缺点进行了对比,并介绍了实践中的顺序性保证、幂等性保证、数据一致性保证和存量数据迁移。最后,介绍了ES复杂检索的分类和查询条件构建。
关键要点
-
业务发展的初期数据库架构为单库单表,随着用户和订单量增加,数据库成为系统瓶颈。
-
解决方案包括分库分表、构建ES宽表和查询条件到表主键Mapping映射表。
-
ES宽表的构建方案有同步双写、异步双写和基于Binlog的实时同步。
-
同步双写是在写请求后同步写入DB和ES,异步双写则是先写DB后异步发送MQ写入ES。
-
基于Binlog的实时同步可以将Binlog作为消息或数据进行处理,构建宽表并写入ES。
-
对解决方案的优缺点进行了对比分析。
-
实践中保证顺序性、幂等性和数据一致性,采用定时任务进行存量数据迁移。
-
ES复杂检索分类为多条件复杂查询,使用Bool查询进行检索条件构建。
延伸问答
为什么单库单表在业务发展中会成为瓶颈?
随着用户量和订单量的增加,单库单表的计算和存储能力无法满足需求,导致系统性能瓶颈。
分库分表的主要解决方案有哪些?
主要解决方案包括分库分表、构建ES宽表和查询条件到表主键Mapping映射表。
ES宽表的构建方案有哪些?
ES宽表的构建方案有同步双写、异步双写和基于Binlog的实时同步。
同步双写和异步双写有什么区别?
同步双写是在写请求后同步写入DB和ES,而异步双写则是先写DB后异步发送MQ写入ES。
如何保证数据的一致性?
可以采用定时任务对账机制保证数据一致性,若不一致则使用补偿任务进行修复。
ES复杂检索是如何分类的?
ES复杂检索主要分类为多条件复杂查询,通常使用Bool查询进行检索条件构建。