《深入浅出MySQL》读书笔记六:锁问题

一、概述

MySQL不同的存储引擎支持不同的锁机制。MyISAM采用表级锁,InnoDB支持 表级锁和行级锁。

表级锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定力度最小,发生锁冲突的概率最低,并发度最高。

二、MyISAM表锁

分为 表共享读锁和表独占写锁。MyISAM在执行查询语句(SELECT)时,会自动给涉及的所有表加读锁,在执行更新(INSERT,DELETE,UPDATE)时,会自动给设计的表加 写锁。

不会出现死锁的原因:MyISAM总是一次获得SQL语句所需要的全部锁,如果一次性获取不到所有的锁,则会等待。

并发插入:MyISAM存储引擎 的系统变量 concurrent_insert 变量,控制并发插入的行为。 为0时,不允许并发插入;为1时,是默认设置,当MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表(SELECT)的同时,另一个进程从表尾插入(INSERT)记录;为 2时,总是允许并发插入,可以定期执行  optimize table 来整理空洞。

MyISAM锁调度:一个进程请求某个MyISAM表的读锁,同时另一个进程请求同一个表的写锁,那么  写进程会优先获得锁。不仅如此,即使读请求先到锁等待队列,写请求后到,写锁请求也会插入到读锁请求之前,因为 MySQL认为 写请求一般比读请求更重要。 这就解释了,MyISAM引擎不适用于 有大量更新(UPDATE)操作和查询(SELECT)操作的原因,大量的UPDATE操作会造成查询操作很难获得读锁,查询性能很低。反过来,很耗时的查询操作也会造成写锁等待很长时间,降低写性能,应当在数据库空闲时,或者通过中间表的方式操作。

三、InnoDB锁

InnoDB和MyISAM 突出的不同点在于:事务和行锁。

行锁实现方式:InnoDB行锁是通过给索引上的索引项加锁来实现的,这意味着,只有通过 索引条件检索数据,InnoDB才使用行锁,否则,将使用表锁。所以,为了能很好的利用行锁的性能,需要给大部分的条件列建立合适的索引。

间隙锁:范围查询时,对于符合条件的已有数据,InnoDB会加锁;对于键值在条件范围内,但不存在的记录,InnoDB会加上间隙锁。

间隙锁的目的: 1、防止幻读,读去这个间隙的时候,不允许其他线程在此间隙插入数据  2、满足恢复和复制的需要。

间隙锁的缺点:范围查询导致大范围的记录被加锁,从而阻塞整个范围内键值的插入,对并发写入性能有很大影响。所以,InnoDB存储引擎下,尽量使用相等条件来进行数据操作。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,通过它可以使用JavaScript开发服务器端应用程序。Node.js的设计初衷是解决传统的后端开发中瓶颈问题,如高并发、I/O密集以及复杂的数据处理等。 Node.js拥有非阻塞式I/O与事件驱动的特点,这使得在处理大量并发连接时表现出色。与传统的多线程服务器相比,Node.js的单线程事件循环机制能够更高效地利用CPU和内存资源,并且能够处理更多的并发请求。 通过使用Node.js,开发者可以使用JavaScript语言进行全栈式开发,避免了前后端技术栈的差异性,提高了开发效率。Node.js的模块化机制使得使用第三方模块更加方便和灵活,有助于代码的复用和维护。 在图灵中,我们可以通过学习Node.js来掌握以下几个核心概念: 1. 事件驱动与异步编程:Node.js利用事件循环机制实现异步非阻塞I/O,通过回调函数实现事件的处理。理解事件驱动的编程思维,能够使开发者更好地处理高并发情况下的请求。 2. HTTP服务器与路由:Node.js提供了HTTP模块,可以搭建自己的Web服务器,并实现路由功能。学习如何创建HTTP服务器和处理请求,能够让我们更好地理解Web开发的原理。 3. NPM与模块化开发:NPM是Node.js的包管理工具,可以方便地安装和管理第三方模块。学习NPM的使用,了解模块化开发的概念和实践,能够更好地管理项目的依赖和提高代码复用性。 4. 文件系统与流操作:Node.js可以轻松地进行文件的读写和操作,通过流的方式进行数据的传输和处理,提高了大数据量的处理效率。 5. Express框架与数据库操作:Express是Node.js的Web应用程序框架,可以简化Web开发的过程。同时,Node.js也支持各种数据库的操作,学习如何使用Express框架和操作数据库,能够更好地构建实际的应用程序。 通过深入浅出地学习Node.js,我们可以全面掌握JavaScript在服务器端的应用,提升自己的全栈开发能力,能够更好地应对日益复杂的网络开发需求。 ### 回答2: 深入浅出node.js图灵是指以易于理解和掌握的方式介绍node.js这个开发平台。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它主要用于服务器端编程,可以构建高性能的网络应用。 深入浅出的意思是通过简单明了的解释和示例来讲解node.js的关键概念和用法,使初学者能够迅速上手。在深入方面,不仅仅是讲解语法和API,还涉及到node.js的设计原理和性能优化等方面的知识。在浅出方面,避免过多的技术术语和复杂的概念,注重引导读者理解核心的思想和模式。 在node.js图灵的学习中,可能会包含以下内容: 1. Node.js的安装和配置:介绍如何下载、安装和配置Node.js的运行环境。 2. JavaScript快速回顾:回顾JavaScript的基本语法和用法,为后续的Node.js开发做准备。 3. 模块和包管理:讲解Node.js的模块系统和npm包管理器,了解如何使用、创建和发布模块和包。 4. 异步编程:深入理解Node.js的事件驱动和非阻塞I/O模型,学习如何编写异步代码以提高系统的性能和可伸缩性。 5. HTTP和网络编程:探索Node.js在网络编程中的应用,如创建HTTP服务器、发送和接收HTTP请求等。 6. 数据库和存储:介绍如何使用Node.js操作数据库,如MySQL、MongoDB等,以及文件系统的读写操作。 7. Web框架和中间件:学习常用的Node.js Web框架,如Express.js,以及如何使用中间件来处理请求和响应。 8. 调试和优化:掌握Node.js的调试技巧和性能优化策略,以提高应用的稳定性和效率。 通过深入浅出node.js图灵的学习,可以快速掌握Node.js的基本概念和用法,并能够使用Node.js构建高性能的网络应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值