加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

可能是全网最好的MySQL重要知识点 | 面试必备

发布时间:2019-07-26 20:46:48 所属栏目:移动互联 来源:佚名
导读:问题有点问题党的意思,但但愿你在看了文章之后不会有这个设法这篇文章是作者对之前总结的 MySQL 常识点做了完美后的产品,可以用往返首MySQL基本常识以及备战MySQL常晤口试题目。 什么是MySQL? MySQL 是一种相关型数据库,在Java企业级开拓中非经常用,因

JDK 1.5 往后的 AtomicStampedReference 类就提供了此种手段,个中的 compareAndSet 要领就是起首搜查当前引用是否便是预期引用,而且当前符号是否便是预期符号,假如所有相称,则以原子方法将该引用和该符号的值配置为给定的更新值。

2 轮回时刻长开销大

自旋CAS(也就是不乐成绩一向轮回执行直到乐成)假如长时刻不乐成,会给CPU带来很是大的执行开销。 假如JVM能支持处理赏罚器提供的pause指令那么服从会有必然的晋升,pause指令有两个浸染,第一它可以耽误流水线执行指令(de-pipeline),使CPU不会耗损过多的执行资源,耽误的时刻取决于详细实现的版本,在一些处理赏罚器上耽误时刻是零。第二它可以停止在退出轮回的时辰因内存次序斗嘴(memory order violation)而引起CPU流水线被清空(CPU pipeline flush),从而进步CPU的执行服从。

3 只能担保一个共享变量的原子操纵

CAS 只对单个共享变量有用,当操纵涉及跨多个共享变量时 CAS 无效。可是从 JDK 1.5开始,提供了AtomicReference类来担保引用工具之间的原子性,你可以把多个变量放在一个工具里来举办 CAS 操纵.以是我们可以行使锁可能操作AtomicReference类把多个共享变量归并成一个共享变量来操纵。

锁机制与InnoDB锁算法

MyISAM和InnoDB存储引擎行使的锁:

  • MyISAM 回收表级锁(table-level locking)。
  • InnoDB 支持行级锁(row-level locking)和表级锁,默以为行级锁

表级锁和行级锁比拟:

  • 表级锁: Mysql中锁定 粒度最大 的一种锁,对当前操纵的整张表加锁,实现简朴,资源耗损也较量少,加锁快,不会呈现死锁。其锁定粒度最大,触发锁斗嘴的概率最高,并发度最低,MyISAM和 InnoDB引擎都支持表级锁。
  • 行级锁: Mysql中锁定 粒度最小 的一种锁,只针对当前操纵的行举办加锁。行级锁能大大镌汰数据库操纵的斗嘴。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会呈现死锁。

InnoDB存储引擎的锁的算法有三种:

  • Record lock:单个行记录上的锁
  • Gap lock:间隙锁,锁定一个范畴,不包罗记录自己
  • 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

大表优化

当MySQL单表记录数过大时,数据库的CRUD机能会明明降落,一些常见的优化法子如下:

1. 限制命据的范畴

务必榨取不带任何限定数据范畴前提的查询语句。好比:我们当用户在查询订单汗青的时辰,我们可以节制在一个月的范畴内;

2. 读/写疏散

经典的数据库拆分方案,主库认真写,从库认真读;

3. 垂直分区

按照数据库内里数据表的相干性举办拆分。 譬喻,用户表中既有效户的登录信息又有效户的根基信息,可以将用户表拆分成两个单独的表,乃至放到单独的库做分库。

简朴来说垂直拆分是指数据表列的拆分,把一张列较量多的表拆分为多张表。 如下图所示,这样来说各人应该就更轻易领略了。

也许是全网最好的MySQL重要常识点 | 口试必备

垂直拆分的利益: 可以使得列数据变小,在查询时镌汰读取的Block数,镌汰I/O次数。另外,垂直分区可以简化表的布局,易于维护。

垂直拆分的弱点: 主键会呈现冗余,必要打点冗余列,并会引起Join操纵,可以通过在应用层举办Join来办理。另外,垂直分区会让事宜变得越发伟大;

4. 程度分区

保持数据表布局稳固,通过某种计策存储数据分片。这样每一片数据分手到差异的表可能库中,到达了漫衍式的目标。程度拆分可以支撑很是大的数据量。

程度拆分是指数据表行的拆分,表的行数高出200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。举个例子:我们可以将用户信息表拆分成多个用户信息表,这样就可以停止单一表数据量过大对机能造成影响。

也许是全网最好的MySQL重要常识点 | 口试必备

程度拆分可以支持很是大的数据量。必要留意的一点是:分表仅仅是办理了单一表数据过大的题目,但因为表的数据照旧在统一台呆板上,着实对付晋升MySQL并发手段没有什么意义,以是 程度拆分最好分库 。

程度拆分可以或许 支持很是大的数据量存储,应用端改革也少,但 分片事宜难以办理 ,跨节点Join机能较差,逻辑伟大。《Java工程师修炼之道》的作者保举 只管不要对数据举办分片,由于拆分会带来逻辑、陈设、运维的各类伟大度 ,一样平常的数据表在优化适合的环境下支撑万万以下的数据量是没有太大题目的。假如其实要分片,只管选择客户端分片架构,这样可以镌汰一次和中间件的收集I/O。

下面增补一下数据库分片的两种常见方案:

  • 客户端署理: 分片逻辑在应用端,封装在jar包中,通过修改可能封装JDBC层来实现。 当当网的 Sharding-JDBC 、阿里的TDDL是两种较量常用的实现。
  • 中间件署理: 在应用和数据中间加了一个署理层。分片逻辑同一维护在中间件处事中。 我们此刻谈的 Mycat 、360的Atlas、网易的DDB等等都是这种架构的实现。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读