首页 文章 精选 留言 我的

精选列表

搜索[缓存命中],共10011篇文章
优秀的个人博客,低调大师

面试命中率90%的点 —— MySQL锁

一、对MySQL的锁的了解 当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制。 就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用。 二、隔离级别与锁的关系 在Read Uncommitted级别下,读取数据不需要加共享锁,这样就不会跟被修改的数据上的排他锁冲突 在Read Committed级别下,读操作需要加共享锁,但是在语句执行完以后释放共享锁。 在Repeatable Read级别下,读操作需要加共享锁,但是在事务提交之前并不释放共享锁,也就是必须等待事务执行完毕以后才释放共享锁。 SERIALIZABLE 是限制性最强的隔离级别,因为该级别锁定整个范围的键,并一直持有锁,直到事务完成。 三、按照锁的粒度分数据库锁有哪些?锁机制与InnoDB锁算法 在关系型数据库中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。 MyISAM和InnoDB存储引擎使用的锁: MyISAM采用表级锁(table-level locking)。 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁。 行级锁,表级锁和页级锁对比 行级锁:MySQL中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁和排他锁。 特点:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 表级锁:MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MyISAM与InnoDB都支持表级锁定。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。 特点:开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。 页级锁:是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。 特点:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 四、从锁的类别上分MySQL都有哪些锁呢?像上面那样子进行锁定岂不是有点阻碍并发效率了 从锁的类别上来讲,有共享锁和排他锁。 共享锁: 又叫做读锁。当用户要进行数据的读取时,对数据加上共享锁。共享锁可以同时加上多个。 排他锁: 又叫做写锁,当用户要进行数据的写入时,对数据加上排他锁。排他锁只可以加一个,他和其他的排他锁,共享锁都相斥。 用上面的例子来说就是用户的行为有两种,一种是来看房,多个用户一起看房是可以接受的。一种是真正的入住一晚,在这期间,无论是想入住的还是想看房的都不可以。 锁的粒度取决于具体的存储引擎,InnoDB实现了行级锁,页级锁,表级锁。 他们的加锁开销从大到小,并发能力也是从大到小。 五、MySQL中InnoDB引擎的行锁是怎么实现的? InnoDB是基于索引来完成行锁 例: select * from tab_with_index where id = 1 for update; for update 可以根据条件来完成行锁锁定,并且 ID 是有索引键的列,如果 ID不是索引键那么InnoDB将完成表锁,并发将无从谈起 六、InnoDB存储引擎的锁的算法有三种 1.Record lock:单个行记录上的锁 2.Gap lock:间隙锁,锁定一个范围,不包括记录本身 3.Next-key lock:record+gap 锁定一个范围,包含记录本身 七、相关知识点: Innodb对于行的查询使用next-key lock Next-locking keying为了解决Phantom Problem幻读问题 当查询的索引含有唯一属性时,将next-key lock降级为record key Gap锁设计的目的是为了阻止多个事务将记录插入到同一范围内,而这会导致幻读问题的产生 有两种方式显式关闭gap锁:(除了外键约束和唯一性检查外,其余情况仅使用record lock) A. 将事务隔离级别设置为RC B. 将参数innodb_locks_unsafe_for_binlog设置为1 八、什么是死锁?怎么解决? 死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。 常见的解决死锁的方法 1、如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会。 2、在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率; 3、对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率; 如果业务处理不好可以用分布式事务锁或者使用乐观锁 九、数据库的乐观锁和悲观锁是什么?怎么实现的? 数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。 实现方式:使用数据库中的锁机制 乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过Version的方式来进行锁定。 实现方式:一般会使用版本号机制或CAS算法实现。 两种锁的使用场景 从上面对两种锁的介绍,我们知道两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。 但如果是多写的情况,一般会经常产生冲突,这就会导致上层应用会不断的进行Retry,这样反倒是降低了性能,所以一般多写的场景下用悲观锁就比较合适。 最后 感谢大家看到这里,文章有不足,欢迎大家指出;如果你觉得写得不错,那就给我一个赞吧。

优秀的个人博客,低调大师

物联网在工业革命中所担任的角色

2014年,“工业4.0”再次像巨浪一样,获得众多业内人士争先恐后的响应,瞬时成为新时代产业变革的新趋势。自2011年“工业4.0”概念的出现以来,直到2013年的大热,包括德国总理默克尔不遗余力地推广“工业4.0”,其现象的背后更蕴含着深层次的战略用意,即升级德国的工业体系,保持其在全球的领先地位,借此来对抗美国互联网、防守中国制造业等等。 一、深入到“工业4.0”的幕后 工业在欧洲经济中发挥着核心作用,由其所创造的价值占国内生产总附加值的15%。同时,80%的创新以及75%的出口都来自工业领域。随着近些年参与国际市场竞争的企业,尤其是亚洲企业越来越多,欧洲制造业的竞争力反而不断下降,面临的压力也与日俱增。英、法、德等国过去10年的工作岗位数量分别下降了29%、20%和8%。 值得一提的是,发展中国家在制造业的全球份额中上升速度非常快,让欧洲国家触目惊心。按照工业增加值来计算,以中国为代表的金砖五国从原先的20%上升到了40%,而西欧的这些国家从36%下降到了25%。西方国家特别是具有制造业优势的德国,不可避免对这种趋势有一些担忧,他们更担心自己的份额会进一步被侵蚀。因此,“工业4.0”计划背后是德国工业界面对信息时代的巨大危机感和制造根基被中国等国家蚕食撼动的焦虑感。众所周知,国家产业政策往往与实体经济相辅,而德国提升信息化的宣传,也侧面说明了信息化是德国制造业的短板所在。 德国制造业面临的问题不仅于此,他们的人工成本相对来说非常高。比如,德国一个典型制造企业的人工成本要占到整个产品成本的25%到30%,而中国之前大约是5%,现在缓慢上升到了7%~8%,甚至更高一点,但是人工成本的优势还是比较大。在这样的背景下,德国就提出了生产智能化,实现人机互动,客户个性化需求可以实时地传到设计、生产环节,且与供应商能够无缝对接地进行生产,这样的生产模式,也就是“工业4.0”或物联网。 据调查显示,德国47%的企业表示已经积极参与“工业4.0”计划,18%的企业参加了对“工业4.0计划”的研究,12%的企业则已经开始实施“工业4.0”计划。德国制造业虽然基础很强,但是避免不了要通过“工业4.0”战略来进一步升级并加强其优势地位,从而实现更强更完善的制造能力。 二、“工业4.0”≠第四次工业革命 从上世纪80年代托夫勒提出“第三次浪潮”开始,我们已经见证了不少技术和产业发展的重大趋势,对这些“科技革命”或“工业革命”大家往往会冠以“全球”或“世界”,至少也会以“国际”标榜。从去年鼓噪一时的“第三次工业革命”,到最近连篇累牍的“工业4.0”,还有曾经沸沸扬扬的“再工业化”、“能源互联网”、“互联网工业”等,让人眼花缭乱。不过,现在仍有人在说着“第三次工业革命”,也有人提出了“第六次工业革命”。那么,我们到底是处在第几次工业革命的大潮中?而每隔四五年就会有人站出来声称新的工业革命开始了,也有伪命题之嫌。以前我们也很少会去怀疑,直到最近几年才觉察到这种问题夸大化可能是我们“追潮逐浪”中的一个大问题。暂且不提发达国家与发展中国家的巨大差异,即使在欧美工业国家,情况恐怕也远非我们所想象的那样“整齐划一”。 “革命”与“革命者”常常是名不副实的。工业革命之所以配得上“革命”一词,并不仅仅是说其能对生产效率有多大的提高,而在于其通过对生产方式的“颠覆性变革”实现了真正的质变——人的解放,从而推动了人类社会的巨大变革。从这个标准来看,蒸汽机、电与内燃机、信息技术的出现都做到了这一点。而原子能技术、航天技术、生物科学以及五花八门的新能源技术,至少现在还没有达到可称为“革命性”的发展程度。不过,对于这个“第四次工业革命”的提法,世界范围内的认识并不一致。就是因为“第三次工业革命”概念的提出者没有清楚地描述“第三次”的内涵和特征,一些专家也跟风盲从,没有去深入考究其内涵和特征,政府等主管部门也只是在照本宣科交流沟通一个新概念而已。我们看事物的角度,应该是全视野的,而不是盲人摸象。真正的工业革命应该是颠覆性的,而物联网技术只是工业革命的深化,是标准化的延伸,是工业革命的“助生婆”。因为,通过信息技术使得工业生产智能化、个性化,只是信息技术在工业制造上的发展和延续,而算不上是真正意义上的革命。当然,信息化是大势所趋。但,我们如果不分青红皂白地盲目跟进,结果只会迷失方向。因为“没有清醒的头脑,再快的脚步只会走歪;没有谨慎的步伐,再平的道路也会跌倒。”“工业4.0”只是一个概念,真正主宰这次系统提升的不是软件系统,而是人。离开了人的主导,任何愿景都将无法实现,如梦幻泡影。 作者:佚名 来源:51CTO

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册