19|分库分表无分库分表键查询:你按照买家分库分表,那我卖家怎么查?
该思维导图由 AI 生成,仅供参考
分库分表键选择
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了解决分库分表无法通过分库分表键进行查询的多种方案。首先强调了选择合适的分库分表键的重要性,其次讨论了设计重试方案时需要考虑的因素,以及面试准备中需要了解的相关内容。文章还介绍了在面试中如何回答与无分库分表键查询相关的问题,并提出了解决方案,包括引入中间表、二次分库分表、使用其他中间件等。这些方案详细介绍了每种解决方案的优缺点,以及如何优化和应对可能出现的问题。最后,提出了一个综合方案,结合了引入中间表、二次分库分表和Elasticsearch的应用,以满足不同查询需求。文章还总结了面试要点,并提出了思考题,引发读者深入思考。整体而言,本文内容详实,涵盖了分库分表的关键技术点,为读者提供了解决无分库分表键查询问题的思路和方法。
《后端工程师的高阶面经》,新⼈⾸单¥59
全部留言(8)
- 最新
- 精选
- nadream引入中间表的问题:中间表包含了全部分表的全部行,虽然只包含了少量字段,那么这个表数据行数会非常大,查询也存在很大的性能问题吧?
作者回复: 确实有这个问题。但是中间表说到底是一个窄表,所以说有性能问题,但是相对来说还好。如果要是不能接受的话,就可以考虑用 Redis,但是 Redis 不太能支撑复杂的查询。
2024-01-22归属地:浙江 - Geek_be29f8老师,有一种查询场景帮忙分析下: 数据量级很小,万级,但是字段数极多,成百上千的字段,且存在一些查询场景,最差情况下真的要求允许上百个查询字段条件同时存在,建立这么多字段的联合索引根本不现实。这种情况下应该怎么做,使用es 等来做合适吗,帮忙分析下
作者回复: 在少数关键列上创建索引就可以了,毕竟你只需要有一两个列能命中索引,过滤掉大部分数据,少部分回表查询也无所谓。因为你这里的数据量级很小。 使用 ES 也行,或者可以看看列式数据库。
2024-01-14归属地:北京2 - sheep老师有几个问题,没接触过分库分表场景有点懵: (1) "比如说大多数电商的订单都是按照买家 ID 来进行分库分表的,那么商家该怎么查询订单呢?又或者买家找客服,客服要找到对应的订单,又该怎么找",这里查询对应订单的话,一般都是用订单id直接去查的吧,然后订单id中如果夹带买家ID信息,不就可以定位到对应库和表了么?那这里担忧的是什么个场景呢(难道是订单id可能不是通过夹带买家ID这种情况?也就是订单id内啥用户信息都没有的情况?),可以展开sql说一下咩 (2) “引入中间表”这里,"记录了 ID、卖家 ID、买家 ID 三个数据",这里第一个ID指的是订单id? (3) ES用来解决分库分表中间件解决不了的问题,那MongoDB也同样可以使用吧?
作者回复: 1. 我商家上来,要拉出我今天成交的订单,你去哪里找订单 ID?就有点像是你点开某宝的订单中心,你也不知道你有啥订单。 2. 是的 3. 是,而且我一般都是觉得如果没有很复杂的关系型运算的话,还不如用 mongodb,自己分库分表麻烦死了。
2023-11-10归属地:广东 - 浩仔是程序员老师讲的挺好的。之前我也想过这个问题,比如短视频的存储,一般按照视频id去分表,但通过用户id查询自己的视频很正常,后面了解到除了视频id分表外,还有根据建表的索引如用户id去构建另外一个分表,当然存储的字段比较少,这个是代理proxy做的,空间换时间
作者回复: 嘿嘿,反正没有完美的解决方案,业务能接受就可以。
2023-09-16归属地:广东 - Jason Ding面试的时候被问到这个问题我都会加一个回答,公司有实时数仓,对 TO B实时性要求不高的查询 我们都会基于数仓做成宽表,再基于es提供查询。
作者回复: 赞!然后你就可以接着数仓或者 ES 使劲吹嘘了
2023-09-01归属地:上海 - peter请教老师几个问题: Q1:老师工作的公司一般怎么用分库分表的,包括中间件的选型等。 Q2:文中老师对业务查询用了“变幻莫测”,在比较大的互联网公司,业务查询是一件非常麻烦的事情吗?(本人没有在互联网公司工作过,没有体会) Q3:ES也可以当做分库分表中间件吗?第一次听说。
作者回复: 1. 嘿嘿,我做过分库分表中间件,所以什么样的分库分表规则我都见到过,因为做过分库分表,所以我建议你选shardsingsphere,它还是很强的。 2. 显然……而且越是复杂的业务,查询越是脑洞大。 3. 不是用来充当分库分表中间件,而是用来解决分库分表中间件解决不了的问题。
2023-07-29归属地:北京 - ZhiguoXue_IT1)关于跨进程重试,简单来说就是不在一个进程执行任务,作为异步mq的消费方是一套集群,重试的时候轮循选择节点进行重试,阿里的rocketmq重试16次进行死刑队列,人工处理 2)之前也没涉及过这种业务,数据如果存放两份,高并发的情况下必然会出现数据不一致 2)对于大数据量的搜索,业界内大部分厂商会借助Elasticsearch的搜索能力,我在用Elasticsearch会发现在创建索引的时候,要制定刷盘的时间,一般都是设置的1s,为了减少压力,此时就会出现用户在插入es后,然后进行查询,并没有获取到,作者有遇到过吗
作者回复: 哈哈哈,我自己没遇到过,但是听别人提到过。我遇到过类似的场景,但是基本上都是要么缓存的问题,要么数据同步的问题。
2023-07-29归属地:北京 - Johar1. 我们目前主要是使用分布式任务调度对失败的任务进行重试 2. 有可能,造成原因是商家服务,订单服务收到的事件的时序不一样造成 3. 老师有没有什么好的方法解决分库分表在扩容或者缩容或者节点故障造成数据迁移的方案?
作者回复: 数据迁移是一个很麻烦的事情……你可以看我专栏另外一篇讲数据迁移的,没有开箱即用点开即用的工具,都很麻烦。
2023-07-28归属地:重庆