MySQL数据库锁机制
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库入门到精通视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识和Java Guide的部分内容,仅用于个人技术归档和技术分享。
概述锁机制,是处理并发场景下保持数据一致性的使用的机制。我们要清楚一点,锁机制一般都是对于并发事务而言的,下面说到阻塞,一般是多事务操纵数据库时发生的
在MySQL数据库中,按照功能性来分,又可以分为:共享锁和排他锁
按照锁的粒度分类可以分为:全局锁,表级锁,行级锁
共享锁和排他锁不论是表级锁还是行级锁,都存在共享锁(Share Lock,S 锁)和排他锁(Exclusive Lock,X 锁)这两类:
共享锁(S 锁):又称读锁,事务在读取记录的时候获取共享锁,允许多个事务同时获取(锁兼容)。
排他锁(X 锁):又称写锁/独占锁,事务在修改记录的时候获取排他锁,不允许多个事务同时获取。如果一个记录已经被加了排他锁,那其他事务不能再对这条事务加任何类型的锁(锁不兼容)。
排他锁与任何的锁都不兼容,共享锁仅和共享锁兼容。(读读兼容,读写冲突,写写冲突)
S 锁
X ...
MySQL数据库InnoDB引擎
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库入门到精通视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识和Java Guide的部分内容,仅用于个人技术归档和技术分享。
逻辑存储结构
表空间Tablespace(ibd文件):一个MySQL数据库实例可以有多个表空间,用于存储记录,索引等数据
段Segment:分为数据段(Leaf Node segment)、索引段(Non-leaf node segment、回滚段(Rollback segment),InnoDB是索引组织表,数据段是B+树的叶子节点。段用于管理多个Extent(区)
区Extent:表空间单元结构,每个区大小为1M。默认情况下,InnoDB的存储引擎页大小为16K,即一个区一共有64个连续的页
页Page:InnoDB引擎磁盘管理的最小单元,每个页默认为16K。为了保持页的连续性,InnoDB引擎每次从磁盘申请4-5个区。
行Row:InnoDB引擎数据是按照行存放的。
DB_TRX_ID:每次对于记录进行改动时,都会把对应的事务ID赋值给DB_TRX_ID隐藏列
DB ...
MySQL数据库引擎
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库入门到精通视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识和Java Guide的部分内容,仅用于个人技术归档和技术分享。
MySQL体系结构
连接层:最上层是一些客户端和链接服务,主要完成一些类型连接处理,授权认证,及相关的安全方案。服务器也会为安全接入的每一个客户端验证它具有的操作权限
服务层:第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现。如过程,函数等
引擎层:存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能。这样我们可以根据自己的需要,来选取合适的存储引擎。
存储层:主要是将数据存储在文件系统之上,并完成存储引擎的交互
存储引擎简介概述存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的(也就是说一个数据库不同的表可以用不同的存储引擎),所以存储引擎也可以被称为表引擎。
操作1. ...
Go中循环变量问题
ISSUE在之前一次工作中,我遇到了一个go的循环变量作用域问题,当时困扰了我很久,在此记录一下。具体情况请看下面的代码
12345678910import "fmt"var arr []*intfunc main() { for i := 0; i < 10; i++ { arr = append(arr, &i) } for _, val := range arr { fmt.Println(*val) }}
理论上,我们希望得到的是arr={0,1,2,3,4,5,6,7,8,9},但是实际上我们得到的是arr={9,9,9,9,9,9,9,9,9,9}
这是因为go使用for i:=0创建的循环变量i从始至终都是一个实例,而不是每次都创建新实例,这就导致了在循环体中&i从始至终都是同一个地址,然后不断被覆盖(循环时,arr={1},arr={2,2},arr={3,3,3}… ...
MySQL数据库SQL优化
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库入门到精通视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识和Java Guide的部分内容,仅用于个人技术归档和技术分享。
插入数据普通插入:
采用批量插入(一次插入的数据不建议超过1000条)
手动提交事务
主键顺序插入
大批量插入:如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令插入。其实就是导入数据文件
1234567# 客户端连接服务端时,加上参数 --local-infilemysql --local-infile -u root -p# 设置全局参数local_infile为1,开启从本地加载文件导入数据的开关set global local_infile = 1;select @@local_infile; # 执行load指令将准备好的数据,加载到表结构中,指定表,数据分割符,行分割符load data local infile '/root/sql1.log' into table 't ...
MySQL数据库事务
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库入门到精通视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识和Java Guide的部分内容,仅用于个人技术归档和技术分享。
事务简介事务是一组操作的集合,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务操作有两种方式去手动控制事务。当事务成功,我们提交事务;当事务出现异常,回滚事务
操作方式一查看/设置事务提交方式
1234-- 查看事务提交方式SELECT @@AUTOCOMMIT;-- 设置事务提交方式,1为自动提交,0为手动提交,该设置只对当前会话有效SET @@AUTOCOMMIT = 0;-- 提交事务COMMIT;
提交事务12-- 提交事务COMMIT;回滚事务12-- 回滚事务ROLLBACK;
操作方式二开启事务
123START TRANSACTION-- 或者BEGIN TRANSACTION;
提交事务
1COMMIT;
回滚事务
1ROLLBACK;
操作实例
12345start transaction;select ...
MySQL数据库索引
前言这是一篇关于MySQL数据库索引的文章。该文章是黑马程序员—MySQL数据库索引视频的归纳总结和补充,同时也引用了公共仓库 - 智云知识的部分内容,仅用于个人技术归档和技术分享。
索引定义索引是帮助MySQL高效获取数据的数据结构(有序)
例如:
无索引时全局扫描
有索引使二叉搜索(排序)树
优缺点
优点:
提高查询效率
提高排序效率
缺点:
索引列要占用磁盘空间
提高了查询效率,但是降低了增删改的效率
总结:空间换时间,优大于劣
索引结构MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引,主要的索引有:
索引结构
描述
B+Tree
最常见的索引类型,大部分引擎都支持B+树索引
Hash
底层数据结构是用哈希表实现,只有精确匹配索引列的查询才有效,不支持范围查询
R-Tree(空间索引)
空间索引是 MyISAM 引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-Text(全文索引)
是一种通过建立倒排索引,快速匹配文档的方式,类似于 Lucene, Solr, ES
存储引擎支持情 ...
Docker入门指南
前言
本教程是基于Docker官方指南文档翻译修改的。如需更深入的理解,请参阅官方原文。若在翻译过程中有任何错误,请联系我进行指正。
在本文中所涉及到的命令行代码部分,我使用了$指示符。若要直接复制代码,请自行删除$符号。
本教程是为Docker初学者准备的,适合那些对Docker还不太熟悉的朋友。若您已经对Docker有一定的了解和经验,本教程可能会过于基础。
概述Docker简介Docker 是一个用于开发、交付和运行应用程序的开放平台。 Docker 使您能够将应用程序与基础架构分开,以便 您可以快速交付软件。使用 Docker,您可以管理您的基础架构,以与管理应用程序相同的方式。通过利用 Docker 的 快速传送、测试和部署代码的方法,您可以显著减少编写代码和在生产环境中运行代码之间的延迟。
学习流程本博客就基于Docker官方教程,手把手地教你使用Docker,你将在本指南中学习和执行的一些操作包括:
构建和运行一个镜像
使用Docker Hub分享镜像
使用带一个数据库的多个容器部署Docker 应用、
使用Docker Compose运行应用
在你着手学习这个 ...
Prometheus的自身监控
Awesome Prometheus AlertsAwesome Prometheus Alerts是一个收集了各种Prometheus告警规则的开源项目,我们可以参考里面的规则来定制我们的自己项目的监控告警规则
Awesome Prometheus Alerts中收录28条关于Prometheus的自身监控告警规则,让我们一起来看看吧
28条Prometheus自身监控告警规则1. Prometheus作业丢失Prometheus job missing
一个Prometheus作业消失了
12345678- alert: PrometheusJobMissing expr: absent(up{job="prometheus"}) for: 0m labels: severity: warning annotations: summary: Prometheus job missing (instance {{ $labels.instance }}) description: ...
SIP协议入门
SIP协议概述SIP(Session Initiation Protocol)是一种应用层协议,用于在IP网络上发起、管理和终止多媒体会话,例如语音电话、视频会议和即时消息等。其基本功能是允许用户发现和建立通信。它是一种灵活且可扩展的协议,允许添加和修改各种元素以支持新的应用场景。
SIP通过建立会话描述协议(Session Description Protocol,SDP)会话描述信息(Session Description)来描述会话信息,包括媒体类型、编码方式、媒体参数等。SIP使用统一资源标识符(Uniform Resource Identifier,URI)来标识用户和终端设备,可以将一个用户的多个设备关联在一起。通过交换消息,SIP实现了会话的建立、修改和关闭,包括会话控制、用户定位、消息路由和安全管理等。
SIP协议不仅适用于互联网,还可用于企业内部网络、移动通信网络等多种网络环境中。它已经成为企业通信、互联网电视、网络游戏、物联网等领域的标准协议之一。
SIP协议的消息结构SIP(Session Initiation Protocol)是一个文本协议,它通过文本消息交换 ...