【MySQL进阶之路】订单系统中的分库分表解决方案

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!

在我后台回复 「资料」 可领取编程高频电子书
在我后台回复「面试」可领取硬核面试笔记

文章导读地址:点击查看文章导读!

感谢你的关注!
在这里插入图片描述

订单系统中的分库分表解决方案

使用分库分表的场景,除了之前我们说的用户表,还有订单表也需要进行分库分表,接下来我们对订单数据量分析一下

就比如在中小型的电商公司来说,假设注册用户量达到 1000w,那么根据二八原则,电商系统的 80% 访问量都是由 20% 的用户所生成,因此日活用户大概为 200w,但是像 20% 的日活比例就已经算非常高了,一般公司也达不到,因此就按 10% 来算,日活用户在 100w 左右

那么如果要生成订单的话,需要用户购买商品,这个比例就更低了,就按日活用户的 1% 来算,每天生成 1w 的订单量,那么一年生成 360w 的订单量,只需要 3 年订单表就会成为千万级别的大表

而在 MySQL 中,一般建议将单表数据量控制在百万级别,不要超过千万,如果 100w 以内不会出现性能问题,因此要对订单表进行分库分表设计

对订单表分库分表所带来的问题

订单表分库分表时,我们要考虑如何对分库分表之后的数据进行查询

比如:

  • 用户对自己订单的分页查询
  • 后台系统对所有订单数据进行复杂的分页查询

这里以这两个问题为例,说一下在分库分表中如何解决

首先对第一个问题来说,用户对自己订单的分页查询,还是和之前一样,按照(user_id, order_id)做一个映射表,将这个映射表也给分库分表

那么当用户需要分页查询自己的订单数据时,先根据 user_id 哈希映射定位到对应的映射表,获取自己所有订单的 order_id,再拿 order_id 去进行分页,分页之后,再根据 order_id 进行哈希映射,定位到对应的表中,获取完整的订单数据

image-20240215121653726

那么这是用户对订单分页数据的简单查询,如果用户也对订单数据进行状态、订单商品名称查询该如何筛选呢?

在映射表中放更多的字段就可以了,就比如将映射表由(user_id, order_id)改为(user_id -> order_id, order_status, product_name)

那么如果用户需要根据订单状态分页查询的话,只需要根据 user_id 先取出自己的所有映射数据,再根据映射数据中的 order_status、product_name 进行筛选匹配,并且进行分页,最后将得到的 order_id 去分库分表中获取完整的数据

image-20240215121700954

对于第二个问题,后台系统对所有订单数据进行复杂的分页查询,一般就是根据订单中的多条数据进行组合查询,比如根据订单的完成状态、完成时间、订单类型等多个条件进行复杂查询,可以将订单数据的搜索条件都同步到 ES 里,再使用 ES 来进行复杂搜索,找出来一批 order_id,再通过 order_id 去分库分表中找到对应的数据

所以,分库分表带来查询的问题的话,一般就是两种解决方案:

  • 建立映射表,对映射表也分库分表
  • 使用 ES 进行复杂查询

相关推荐

  1. 【Datax分库导数解决方法MySQL_to_Hive

    2024-02-19 01:20:01       194 阅读
  2. Python学习-MySQL

    2024-02-19 01:20:01       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 01:20:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 01:20:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 01:20:01       87 阅读
  4. Python语言-面向对象

    2024-02-19 01:20:01       96 阅读

热门阅读

  1. vue3-使用 Vue 的多种方式

    2024-02-19 01:20:01       53 阅读
  2. 2024年2月新加坡-马来西亚游-简记

    2024-02-19 01:20:01       53 阅读
  3. 学习Android的第十二天

    2024-02-19 01:20:01       50 阅读
  4. C# 只允许开启一个exe程序

    2024-02-19 01:20:01       50 阅读
  5. [C++] 分支优化

    2024-02-19 01:20:01       49 阅读
  6. Leetcode-1523. 在区间范围内统计奇数数目

    2024-02-19 01:20:01       50 阅读
  7. 顺子日期 蓝桥杯

    2024-02-19 01:20:01       48 阅读