标签:数据库

分布式常见面试题:聊聊分布式系统下的鉴权认证方案

各位小伙伴们,提到系统的鉴权认证,大家应该都不陌生,比较常见的就是登录模块。输入账号、输入密码传到后台进行登录,认证通过就跳转主页,一般都是这个逻辑。 传统的模式是基于 session 的,登录之后后台接口会返回一个 session ID,然后前端将其保存在 cookie 里。访问页面时会带上 cookie 里的 session 到服务端去做校验,校验成功就……

分布式常见面试题:聊聊分布式ID的生成方案

今天咱们来聊聊分布式数据库中一个基础但又关键的问题,那就是如何生成数据表的记录 ID 。 当数据量越来越大,并发量越来越高,传统的单库单表遇到性能瓶颈时,我们自然会想到分库分表。利用分库分表虽能分摊压力,但在享受性能提升的同时,也会遇到很多问题,比如多表查询、分布式事务等等,这些咱们在前几期重点聊过。本期重点说一说分布式数据库中数据表记录 ID 的生成方案。……

分布式常见面试题:聊聊分布式系统下商城秒杀系统的设计思路

今天咱们来聊聊电商系统中常见的秒杀活动。几乎每一家电商都会搞秒杀,一般在促销活动中,指定一定数量的商品用低价吸引大量用户参与,但只有少数用户能购买成功,这就是电商秒杀的套路,目的是用低价商品引入大批流量。 那对于电商系统来说,怎么设计一套既能满足日常交易,又能扛住高并发的秒杀系统,这可是程序员们重点要考虑的问题。 先说商品购买流程,大家应该都熟悉。比如一个朋……

数据库常见面试题:为啥要禁用select *

我相信“严禁在代码中使用 select*”这句话大家应该都不陌生,很多公司都会三令五申强调这一点,就连福报厂的 Java 开发手册也明确表示不得使用“*”作为查询。如果我在 code review 中发现有小伙伴这么写代码,肯定不会让他过试用期。这可不是我狠,而是互联网 SQL 语句的规则,因为这关系到整个系统的性能,在很多面试场合也都会被问到。 那为啥要禁……

分布式常见面试题:如何实现分布式事务

今天咱们来聊聊分布式架构中的分布式事务。只要涉及到交易、涉及到多个库,那必然绕不开分布式事务。在很多场景下,我们要保证数据的一致性,这就意味着要么全部成功,要么全部失败。比如说,不能出现支付成功了,但优惠券没抵扣、积分没加上这种情况,后果不堪设想。 总之,事务在整个系统中起着重要作用,也是分布式相关面试重点考察的对象。分布式事务主流的实践方式主要有两种,一种……

数据库常见面试题:如何实现数据库的读写分离

在提升数据库性能方面,除了前几期聊到的分库分表,还有一个重要的性能优化策略,那就是数据库的读写分离。 读是一个库,写是另一个库,这样能轻松分摊数据库的访问压力,进而提升整体性能。其原理基于主从复制的架构,简单来说,就是一个主库挂多个从库。我们只在主库进行写操作,像删除、新增等,主库会自动把数据同步到从库。 从实现层面来讲,有两个重要点。其一,是数据的同步问题……

数据库常见面试题:分库分表后的查询优化策略

在我们的数据库达到性能瓶颈之后,自然而然会想到分库分表。但分库分表之后,又带来了其他一些问题,比如如何联表查询、如何分页查询,大部分场景还是停留在查询层面。前几期也分析了一些常规的处理方法,像增加冗余字段和重构查询表等等。然而,这些本质上还是基于数据库层面,还是要依赖数据库的性能。过分依赖数据库,其实是存在一些问题的。 在大部分场景下,尤其是高并发的情况下,……

数据库常见面试题:分库分表之后如何进行分页查询

我们为了提升数据库的查询性能,进行了分库分表。但分表一时爽,虽然性能提升了,却也同时遇到了很多问题。其中,分页查询就是一个常见问题,很多小伙伴在前几期的评论区也提到过类似问题。 其实说到分页查询,真正好用的方案不多,而且需要看具体的场景以及分表的策略。比如说,如果按照时间点分表或者 ID 的范围分表,恰好又是按照这个时间查询,那么在分页的时候就很容易。我们可……

数据库常见面试题:分库分表带来了哪些挑战

在我们日常的生产环境中,一旦数据库出现性能瓶颈,很自然就会想到分库分表。可以按照取模、一致性哈希或者时间点来分区等等。总的来说,操作起来还算容易,尤其是借助一些中间件,像 MyCat ,拆分动作相对容易。 然而,在享受性能提升的同时,分库分表也带来了诸多难题。比如大家在评论区提到的,分库分表之后怎么去 join 。一般情况下,不建议像单库单表那样进行 joi……

数据库常见面试题:分库分表的几种策略

今天咱们来聊聊数据库分库分表那些事儿。为什么要对数据库进行分库分表呢?在数据量达到一定程度之后,查询操作的性能就会变得很差,所以不得不考虑分库分表。那怎么去拆分数据表,用什么样的策略和算法拆分,这是接下来要探讨的重点。 分表的策略常用的有三个,先来说说按照时间点分区。这个方法很实用,适用于订单数据拆分,比如按天分表、按月分表、按年分表。时间越久的数据,被查询……

数据库常见面试题:什么情况下要进行分库分表?

在日常开发中,我们经常会碰到数据库的分库分表问题,有分库的,有分表的,还有既分库又分表的。在分布式技术的面试里,这也是面试官重点考察的内容。今天就来和大家聊聊为啥要进行数据库的分库分表,以及其中的底层逻辑。 在项目早期或者用户量、访问量不大,业务规模较小时,根本不用考虑分库分表。但随着业务发展,库中的表越来越多,表中的数据也日益庞大,相应的数据库操作,像增删……

消息队列常见面试题:如何用消息队列中的事务消息,保证数据的一致性

大家好!今天咱们来聊聊消息队列中的事务消息,以及它是如何保证数据一致性的。 事务这个词,做后端的同学应该都不陌生,只要涉及到业务,都会和事务有所接触。事务就是为了解决一致性问题的,要么全部成功,要么全部失败。数据库有数据库的事务,分布式也有分布式的事务。同样,在消息队列中也提供了事务功能,目的也是为了保证数据的一致性。 咱们举个常见的例子,用户付款,订单系统……