限流、分库分表面试题

一、项目中如何进行限流

限流可以分为技术层限流和业务层限流

1、技术层的限流

一种是限制速率(qps),比如rateLimiter,nginx的limit_req模块

一种是限制并发数,也就是根据系统的最大资源量进行限制,比如数据库连接池,线程池,nginx的limit_conn模块

2、业务层限流

比如在秒杀系统中,一个商品库存只有100件商品,现在有两万人抢购,没必要放两万人进来,只需要放前500个人进来,后面的人直接返回已售完即可

   二、分库分表                                                                                                                                                                                    

1、为什么要分

  1. 分表的目的是做业务拆分,通过业务拆分,把一个大的复杂的系统拆成多个业务的子系统
  2. 考虑是应对高并发,当写入的qps已经达到瓶颈了,需要考虑分库分表
  3. 另外一个角度是数据隔离,把核心业务数据和非核心业务数据不要放在一个库里

2、拆分维度的选择

比如对于电商的订单表来说,如何拆分呢(订单id、用户id、商户id)

1、建立一个映射表建立

建立辅助维度和主维度的映射关系(商户id和用户id之间的映射关系)

2、业务双写

同一份数据,两套分库分表、一套按用户id,一套按商户id切分

3、异步双写

还是两套表,只是业务单鞋,然后通过监听binlog.同步到另外一套表中

4、两个维度统一到一个维度

3、join查询问题

1、把join拆分成多个单表查询,不让数据库做join,而是在代码层对结果进行拼装

2、做宽表,重写轻读写

为了利用mysql分页功能,不得不用join的情况,可以做一个join表。提前把结果join好。这是重写轻读,也是时间换空间

3、利用搜索引擎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值