存储
文章平均质量分 89
记录常用的存储相关知识点
程序员麻辣烫
这个作者很懒,什么都没留下…
展开
-
为啥没走我想要的索引
数据库方面除了会使用之外,能够知晓一些底层原理,能够避免很多问题,而且也能解决线上很多问题,推荐《MySQL技术内幕:InnoDB存储引擎》:系统讲述InnoDB,相对易懂,能帮大家建立MySQL整体认知《MySQL实战45讲》:知识点讲解清晰、深入,很多知识常用于面试、工作中大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)我的个人博客为:https://shidawuhen.github.io/设计模式招聘思考存储算法系列读书笔记小工具架构网络Go语言。原创 2024-03-03 23:25:18 · 367 阅读 · 1 评论 -
主从延迟如何解决
主库 A 执行完成一个事务,写入 binlog,我们把这个时刻记为 T1;之后传给从库 B,我们把从库 B 接收完这个 binlog 的时刻记为 T2;从库 B 执行完成这个事务,我们把这个时刻记为 T3。所谓主从延迟,就是同一个事务,在从库执行完成的时间和主库执行完成的时间之间的差值,也就是 T3-T1。你可以在从库上执行 show slave status 命令,它的返回结果里面会显示seconds_behind_master,用于表示当前从库延迟了多少秒。原创 2024-02-16 16:49:52 · 969 阅读 · 0 评论 -
一个好用的update语句
这个语句,可以将满足条件的行赋予指定的数值,但是该语句,有个极大的风险,对于不在该范围内的行,会设置为默认值。为了解决这个问题,需要对该语句进行一定的改造。做过很多项目、实现过很多奇葩的需求,最近遇到一个比较有意思的功能,要求对mysql表中的数据,不同的行更新不同的值。所以,大家使用新的语句的时候,一定需要查清楚使用规则,不要因为不熟悉导致很大的问题。mysql有个不错的update语句。以前数据量比较少的时候,可能就提交多行update语句了,如下。这样修改之后,就只会影响在范围之内的行了。原创 2023-10-03 13:23:18 · 109 阅读 · 0 评论 -
MySQL如何导入大量数据?
有时我们会遇到需要将大量数据导入MySQL的需求,一般数据存储在csv或者txt中,数据由","分隔。这里提供两种方案供大家选择。原创 2022-09-22 13:01:47 · 7214 阅读 · 4 评论 -
做道题就知道,懂不懂事务隔离性了
最近和小团队构建学习计划,选择回答问题的方式,找一个题目,大家一起研究,效果很好。 把这道题拿出来分享,大家也可以检查自己是否了解隔离性。原创 2022-01-02 00:10:36 · 241 阅读 · 0 评论 -
MySQL总结
MySQL总结原创 2021-11-15 20:47:25 · 678 阅读 · 0 评论 -
规范上说避免使用JOIN
SQL设计中有一条建议:避免使用JOIN和子查询,禁止使用3表以上的JOIN,必要时推荐用JOIN代替子查询。原创 2021-10-21 15:12:59 · 2498 阅读 · 0 评论 -
MySQL高可用,就这么完美???
MySQL以其容易学习和高可用,被开发人员青睐。它的几乎所有的高可用架构,都直接依赖于 binlog。MySQL 能够成为现下最流行的开源数据库,binlog 功不可没。MySQL是怎样实现高可用的?这种高可用足够完美吗?原创 2021-10-11 16:49:43 · 95 阅读 · 0 评论 -
MySQL binlog、redo log,请管管你家buffer
以前聊过binlog和redo log,没有涉及binlog buffer和redo log buffer,主要是因为在核心脉络的理解上,buffer容易产生干扰。但buffer很重要,所以我们来看一下log和buffer之间的关系。原创 2021-09-29 15:09:23 · 344 阅读 · 0 评论 -
MySQL InnoDB锁算法,可算搞明白了
Innodb除了行锁还有间隙锁(Gap Lock)和next-key lock。这些锁之间有什么关系呢?我们经常会听到全局锁、表级锁、行锁,这些又是什么?原创 2021-09-20 21:46:46 · 349 阅读 · 0 评论 -
MySQL Explain详解
最近代码review时,因一个SQL语句的性能问题和同学产生争论。程序员的优点是大家都认事实,用explain查看结果,轻松解决争议。原创 2021-09-12 23:29:01 · 291 阅读 · 0 评论 -
Innodb count的内部流程,你知道吗?
在Innodb可重复读隔离级别下,对count(字段)、count(主键 id)、count(1)、count(\*)四种方案,我们应如何进行选择?原创 2021-08-29 14:36:27 · 237 阅读 · 0 评论 -
Innodb为啥要刷脏页?
Innodb为啥要刷脏页?原创 2021-08-25 12:55:20 · 245 阅读 · 0 评论 -
Innodb事务隔离性实现原理,你了解吗?
这篇文章聊一下Innodb事务的隔离性的实现原理,默认隔离级别是可重复读。主要还是讲整体脉络,脉络清晰后,细节大家可以自行补充。原创 2021-08-15 15:21:42 · 404 阅读 · 0 评论 -
InnoDB redo、undo、binlog,是如何合作的
这次主要讲redo log、undo log、binlog之间的联动。 很多细节不会讲解,只梳理最核心的流程。原创 2021-08-08 21:14:28 · 201 阅读 · 0 评论 -
一文搞懂MySQL数据库分库分表
如果数据量过大,大家一般会分库分表。分库需要注意的内容比较少,但分表需要注意的内容就多了。工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过分表。最近手里有个项目,预估数据量会很大,分表方案是选项之一,趁着这次机会,把分表的内容整理一下。这次要讲的主要是水平分库分表,其它种类的分库、分表比较容易理解。后面如果不详细说明,都指水平分库分表。1.基础知识1.1分库分表定义1.1.1分库垂直分库:按照业务模块进行切分,将不同模块的表切分到不同的原创 2021-06-17 09:35:26 · 5443 阅读 · 0 评论 -
MySQL开发规范
最近看到一份MySQL开发规范,受益颇多,规范里隐藏了很多MySQL的原理,大家有兴趣可以分析一下这些规范被如此设定的原因。命名规范库名、表名、字段名、索引名必须使用小写字母,并采用下划线分割。库名、表名、字段名支持最多64个字符但禁止超过32个字符。库名、表名、字段名必须见名知意。命名与业务、产品线相关联。库名、表名、字段名禁止使用MySQL保留字(如:add/analyze/check/char/to/and/as/before/between/column…)。数据库初原创 2021-01-17 23:45:23 · 473 阅读 · 0 评论 -
论Redis实现分布式锁的方式
分布式锁的实现方式有很多,本篇文章讲述一下使用Redis实现分布式锁。网上有很多使用Redis实现分布式锁的代码,但是这些代码或多或少都有问题。这篇文章会写一个实现,同时标明一些注意点。场景为了便于阐述,这里假设一个游戏场景,用户A有开山斧一把,价值500元宝,用户B有800元宝,想买A的开山斧,这些数据都存在Redis中。需要编写代码成功的实现该笔交易。问题Redis实现分布式锁,需要考虑如下问题:持有锁的进程因为操作时间过长而导致锁被自动释放,但进程本身并不知晓这一点,甚至还可能会错误地释放原创 2020-07-05 13:29:09 · 1042 阅读 · 0 评论 -
事务原子性、一致性、持久性的实现原理
前言大家都知道事务有四个特性:原子性(atomicity)原子性是指整个数据库事务是不可分割的工作单位。只有使事务中所有的数据库操作执行都成功,才算整个事务成功。如果事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。一致性(consistency)一致性指事务将数据库从一种状态转变为下一种一致的状态。在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。隔离性(isolation)一个事务的影响在该事务提交前对其他原创 2020-06-26 15:38:23 · 2656 阅读 · 0 评论 -
秒懂InnoDB锁
重新梳理了一下锁、锁与事务的关系,希望能够帮大家厘清一些知识点。本文如果不做特殊说明,默认是可重复读隔离级别。悲观锁与乐观锁在讲述InnoDB锁之前,先和大家聊一下悲观锁与乐观锁悲观锁和乐观锁阐述的是一种设计理念。悲观锁是无论做什么都需要先获取到锁,乐观锁其实并没有锁的概念,做任何操作都不加锁,但是更新数据的时候会检查要更新的数据是否被修改过,一般用CAS实现(Compare-and-Set)悲观锁:先取锁再访问。数据库中的行锁,表锁,读锁(共享锁),写锁(排他锁)均为悲观锁乐观锁:不会上锁,但原创 2020-06-21 16:27:07 · 339 阅读 · 0 评论 -
常用缓存技巧
简介 在项目中,大家经常会遇到处理高并发的情况,缓存是应对高并发的有效手段之一。这篇文章简单介绍一下常用的缓存手段。当然,使用缓存有一个前提:数据不是实时变更的。方法一、CDNCDN一般用来做静态资源的缓存,但是稍微进行修改,便可以用来缓存动态接口的返回。当请求资源在CDN不存在时,请求会到回源机上,在回源机的Nginx上,根据路由规则,将请求转发到不同服务,返回结果会存在到CDN上。如下图所示:Nginx实现upstream fs.com_backend { server 12原创 2020-06-15 14:24:47 · 469 阅读 · 0 评论