面试问题

当订单表按照user_id分表后,按照order_id查询性能会很慢如何解决。

 

1.索引表法:

生成一张冗余表保证每个order_id对应的用户信息,建立联合索引idx_order_id_user_id。
每次查询的时候先查询冗余表得到订单对应的user_id,根据user_id就可明确知道路由到那张表了。

2.基因分片发:

1.二进制特性,任何数字对2^n进行取模的结果 = 该数字二进制最后n位的值。

例如:用户id:189(二进制10111101),分16张表时取末4位1101(13)作为基因


2.设置逻辑:基于二进制特性,如果在16张表的情况下,我们在生成订单ID的时候可以在末尾拼接上用户id末4位。

基因算法流程

 


使用雪花算法生成58位二进制 + 用户id的4位二进制,转成10进制的得到订单id

基因算法结果

 

这样在使用订单id查询的时候就可以知道具体要路由到那张表中。

 

发奖接口超时带来的问题


数据不一致问题

接口超时我们这边按照异常处理,但是第三方可能真实发奖成功。需要将超时的数据记录表中状态为奖励发放中,同时将发奖的信息放入MQ中,MQ消费者通过查询发奖状态接口查询最终发奖结果,根据发奖结果做最终状态同步。

资源耗尽

如果接口频繁超时,在高并发情况下会造成线程资源占用,影响机器性能,对接口要增加超时时间,超时要增加预警,避免频繁超时导致资源耗尽。

 

posted @ 2025-11-08 16:45  爵士灬  阅读(9)  评论(0)    收藏  举报