- 博客(21)
- 收藏
- 关注
原创 如何画技术架构图?
逻辑视图(Logical View)进程视图(Process View)物理视图(Physical View)开发视图(Development View)场景视图(Scenarios View)运行架构。
2024-07-30 22:49:52
1434
原创 Java 基础-语法-运算符
种类举例作用算术运算符:加法:减法:乘法:除法:取模(取余数)用于执行基本的数学运算增量运算符++:递增--:递减用于递增或递减变量的值赋值运算符:赋值+=:加法赋值-=:减法赋值*=:乘法赋值/=:除法赋值%=:取模赋值用于给变量赋值比较运算符==:等于!:不等于:小于:大于<=:小于或等于>=:大于或等于用于比较两个值逻辑运算符&&:逻辑与(短路与)||:逻辑或(短路或)!:逻辑非用于执行逻辑运算位运算符:按位与:按位或。
2024-07-11 22:35:44
1036
原创 Redis实践
尤其是针对Redis这种高性能的内存数据库来说,如果Redis中的内存被换到磁盘上,对于Redis这种性能极其敏感的数据库,这个操作时间是无法接受的。另外,fork的耗时也与系统有关,如果把Redis部署在虚拟机上,那么这个时间也会增大。需要注意的是当我们在线上实例进行大key扫描时,Redis的QPS会突增,为了降低扫描过程中对Redis的影响,我们需要控制扫描的频率,使用。你需要检查你的业务代码,是否存在写入大key的情况,需要评估写入数据量的大小,业务层应该避免一个key存入过大的数据量。
2024-07-09 22:55:53
1047
原创 Redis持久化机制
这意味着写入操作是同步进行的,由主服务器线程直接控制,这提供了最高的数据安全性,但可能会影响到Redis的性能,因为它等待磁盘I/O完成。中的内容写入磁盘一次。在这个模式下,写入操作仍然是由主服务器线程触发,但是它使用了操作系统的页缓存机制,因此在大多数情况下,实际的磁盘I/O会在后台异步完成,不会显著影响Redis的响应时间。aof文件是一个二进制文件,并不是像上面的例子一样,直接保存每个命令,而使用Redis自己的格式。持久化方式,我们可以在配置文件中开启并进行更加详细的配置,如下面的。
2024-07-09 22:39:44
1885
原创 Redis基本数据结构
下图是执行时,所涉及到的数据模型。dictEntryRedis是Key-Value数据库,因此对每个键值对都会有一个dictEntry,里面存储了指向Key和Value的指针;next指向下一个dictEntry,与本Key-Value无关。`` ``}v;Key图中右上角可见,并不是直接以字符串存储,而是存储在SDS结构中。既不是直接以字符串存储,也不是像Key一样直接存储在SDS中,而是存储在中。实际上,不论Value是5种类型的哪一种,都是通过来存储的;而。
2024-07-09 22:23:10
827
原创 大厂实践 - 美团: MySQL索引原理及慢查询优化
我们知道一般的应用系统,读写比例在 10:1 左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。大致执行过程是:mysql 先按索引排序得到前 10 条记录,然后再去 join 过滤,当发现不够 10 条的时候,再次去 10 条,再次 join,这显然在内层 join 过滤的数据非常多的时候,将是灾难的,极端情况,内层一条数据都找不到,mysql 还傻乎乎的每次取 10 条,几乎遍历了这个数据表!
2024-07-02 23:16:33
950
原创 MySQL 深入了解索引B+树
InnoDB 的数据是按「数据页」为单位来读写的,默认数据页大小为 16 KB。每个数据页之间通过双向链表的形式组织起来,物理上不连续,但是逻辑上连续。数据页内包含用户记录,每个记录之间用单向链表的方式组织起来,为了加快在数据页内高效查询记录,设计了一个页目录,页目录存储各个槽(分组),且主键值是有序的,于是可以通过二分查找法的方式进行检索从而提高效率。为了高效查询记录所在的数据页,InnoDB 采用 b+ 树作为索引,每个节点都是一个数据页。
2024-07-02 22:49:17
283
原创 MySQL 深入理解Buffer Pool
先来说说 MySQL 的预读机制。程序是有空间局部性的,靠近当前被访问数据的数据,在未来很大概率会被访问到。所以,MySQL 在加载数据页时,会提前把它相邻的数据页一并加载进来,目的是为了减少磁盘 IO。但是可能这些被提前加载进来的数据页,并没有被访问,相当于这个预读是白做了,这个就是预读失效。如果使用简单的 LRU 算法,就会把预读页放到 LRU 链表头部,而当 Buffer Pool空间不够的时候,还需要把末尾的页淘汰掉。
2024-07-01 23:06:38
620
原创 MySQL行数存储方式
MySQL 的 Compact 行格式中会用「NULL值列表」来标记值为 NULL 的列,NULL 值并不会存储在行格式中的真实数据部分。NULL值列表会占用 1 字节空间,当表中所有字段都定义成 NOT NULL,行格式中就不会有 NULL值列表,这样可节省 1 字节的空间。
2024-07-01 22:44:44
966
原创 MySQL EXPLAIN 完全解读
MySQL EXPLAIN 完全解读Explain 命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain 可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。命令使用explain 可用来分析 SQL 的执行计划,格式如下:{EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild]{EXPLAIN | DESCRIBE | DESC}
2024-06-27 23:32:33
1028
原创 MySQL 详解SELECT查询流程
与客户端进行 TCP 三次握手建立连接;校验客户端的用户名和密码,如果用户名或密码不对,则会报错;如果用户名和密码都对了,会读取该用户的权限,然后后面的权限逻辑判断都基于此时读取到的权限;执行一条 SQL 查询语句,期间发生了什么?连接器:建立连接,管理连接、校验用户身份;查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;解析 SQL,通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型;
2024-06-27 23:08:19
860
原创 MySQL深入浅出MVCC实现原理
Read View就是事务进行快照读操作的时候生产的读视图(Read View),在该事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务的 ID(当每个事务开启时,都会被分配一个 ID, 这个 ID 是递增的,所以最新的事务,ID 值越大)。Read View遵循一个可见性算法,主要是将要被修改的数据的最新记录中的DB_TRX_ID(即当前事务ID)取出来,与系统当前其他活跃事务的ID去对比(由Read View维护),如果DB_TRX_ID跟。
2024-06-26 23:18:42
1616
原创 MySQL事务的实现原理
事务广泛的运用于订单系统、银行系统等多种场景。如果有以下一个场景:A 用户和 B 用户是银行的储户。现在 A 要给 B 转账 500 元。检查 A 的账户余额 >500 元;A 账户扣除 500 元;B 账户增加 500 元;正常的流程走下来,A账户扣了500,B账户加了500,皆大欢喜。那如果A账户扣了钱之后,系统出故障了呢?A白白损失了500,而B也没有收到本该属于他的500。以上的案例中,隐藏着一个前提条件:A扣钱和B加钱,要么同时成功,要么同时失败。事务的需求就在于此。
2024-06-26 23:14:32
792
原创 MySQL深入理解乐观锁与悲观锁
在关系数据库管理系统里,乐观并发控制(又名“乐观锁”,Optimistic Concurrency Control,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。乐观事务控制最早是由孔祥重(H.T.Kung)教授提出。
2024-06-26 23:10:35
562
原创 MySQL 锁机制
共享/排它锁(Shared and Exclusive Locks)意向锁(Intention Locks)记录锁(Record Locks)间隙锁(Gap Locks)临键锁(Next-key Locks)插入意向锁(Insert Intention Locks)自增锁(Auto-inc Locks)MySQL的InnoDB存储引擎构建了一套精密的锁机制,巧妙地平衡了数据一致性与高并发处理的需求。
2024-06-26 23:02:05
875
1
原创 InnoDB一棵B+树可以存放多少行数据?
lineitem 表的数据行数为 600 多万,B+ 树高度为 3,customer 表数据行数只有 15 万,B+ 树高度也为 3。可以看出尽管数据量差异较大,这两个表树的高度都是 3,换句话说这两个表通过索引查询效率并没有太大差异,因为都只需要做 3 次 IO。那么如果有一张表行数是一千万,那么他的 B+ 树高度依旧是 3,查询效率仍然不会相差太大。region 表只有 5 行数据, B+ 树高度为 1。。
2024-06-25 23:30:38
1017
原创 MySQL索引深入浅出
与其他数据库例如 Oracle 和 SQL Server 等数据库中只有一种存储引擎不同的是,MySQL 有一个被称为“Pluggable Storage Engine Architecture”(可替换存储引擎架构)的特性,也就意味着 MySQL 数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。
2024-06-25 23:04:47
696
原创 Java 基础-语法-数据类型
Java 语言中的数据类型分为两大类,分别是基本类型和引用类型。程序中需要处理许多数据,对于不同数据都有其对应的数据类型,其实就是在内存中开辟一个存储空间来存放数据,不同数据所开辟的内存大小也会不一样。。
2024-05-07 19:46:28
1869
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人