面试官: 美团外卖的分库分表怎么设计?






面试官:当你的JVM 堆内存溢出后,其他线程是否可继续工作?

以下正文:


概述





分库分表后设计到的第一个问题就是,如何选择路由key,应该如何对key进行路由。路由key应该在每个表中都存在而且唯一。路由策略应尽量保证数据能均匀进行分布。

如果是对大数据量进行归档类的业务可以选择时间作为路由key。比如按数据的创建时间作为路由key,每个月或者每个季度创建一个表。按时间作为分库分表后的路由策略可以做到数据归档,历史数据访问流量较小,流量都会打到最新的数据库表中。

也可以设计其与业务相关的路由key。这样可以保证每个数据库的资源都能很好的承担流量。


支持场景





外卖订单平台分库分表后需要支持的场景,用户的角度,需要实时查看所点外卖订单的状态,跟踪订单信息。商家需要查询订单信息,通过订单分析菜品的质量,进行商业决策。

用户Consumer = C端 商家Business = B端


用户下单后订单可能会落到不同的表中,查询的时候可能需要查询多张表。


路由策略





如果创建订单时随机插入到某一张表中,或者不知道插入到那张表中,查询订单的时候都需要查询所有的表才能确保查询的准确信。

如果在插入订单的时候有一定的规则,根据这个规则插入到数据库中,查询的时候也执行相应的规则到对应的表中进行查询。这样就能减少数据操作的复杂性。可以通过设计路由策略来实现,用户和商家查询数据的时候都遵循相同的路由策略。




用户端路由key





根据上一小节的路由策略分析,现在需要选定一个路由key。用户端让同一个用户id的数据保存到某固定的表中,所以可以选用用户id最为路由key。

在单库的情况下,用户下单,生成一个订单,把用户id作为路由key,对user_id取hash值然后对表的数量进行取模,得到对应需要路由的表,然后写入数据。


多库多表的情况下需要先找到对应的库然后再找到对应的表。多库多表的路由策略:用户下达->生成订单->路由策略:根据用户id的hash值对数据库的数量进行取模找到对应的数据库->根据用户id的hash值除以对表的数量,然后在对表的数量进行取模即可找到对应的表。


路由策略设计的要点是根据具体的业务业务场景设计,跟用户信息关联度比较大的作为路由key进行hash值取模


商家路由key





单独为商家B端设计了一套表(C端和B端是独立的)。

用户的角度以user_id作为路由key,商户的角度以商家id作为路由key。商家是如何通过路由key路由数据的呢。游湖在下单的时候把队友的订单号发送到MQ里,商家可以去消费这个MQ,然后根据订单号获取订单信息,然后再把订单信息插入到商户的数据库表当中。商户的路由策略和用户的路由策略是一样的。


用户端和商户端的完整数据流程图:







END

1.别再分库分表了,来试试TiDB!2.为什么要分库分表?用过哪些分库分表中间件?3.10亿级订单系统分库分表设计思路!4.分库分表后路由策略设计

我是技术程管家,专心做内容,不割韭菜

分享技术成长之路,不忘初心,惠泽他人终身学习,与时俱进,点赞关注不迷路

相关推荐

  • 22年北京买房子430万,首付190,月供17000,今年房子320万,亏了110,基本这几年白干,压根不敢离职,啥工作都得干。
  • 大模型做时序预测也很强!华人团队激活LLM新能力,超越一众传统模型实现SOTA
  • “梗王”大模型,靠讲笑话登上CVPR | 中山大学
  • 刚刚,图灵奖揭晓!史上首位数学和计算机最高奖“双料王”出现了
  • 中国最fashion的AIGC应用都在这里了 | 中国AIGC产业峰会
  • 评测通知 | NLPCC2024评测任务:大语言模型监管
  • AI Agent 应该更有趣还是更有用?
  • 华盛顿大学撰文反驳微软,我们无法删除大模型关于哈利波特的记忆
  • [开源]一个微前端架构系统,可能是你见过最完善的微前端解决方案
  • 聊聊微服务中的 BFF 架构
  • 还不会免费将PDF转为Word?你可以试试这3种工具!
  • 春天,关于人生发展的 24 条心得
  • 微软前全球副总裁入局AGI:左手效率神器、右手AI开放世界,实测好用!
  • 对话国产“算力黑马”:27亿元大单背后,英博数科周韡韡的AGI探索之路
  • 街边的普通茶室也能赚600万,靠的不只是喝茶
  • 探探各个微前端框架
  • 前端代码规范 - 代码注释
  • 从商品图到海报生成 京东广告AIGC创意技术应用
  • 工科博士毕业去高校还是去研究所?
  • 今天是新模型发布大赛:Gemini 1.5 Pro发完,GPT-4-Turbo发,Mistral AI继续发……