InnoDB

MySql领域经典之作,“不敢自诩为MySql专家,岂敢错过这本神书”

有些话、适合烂在心里 提交于 2020-10-25 10:42:15
写在前面 在互联网行业,MySql数据库毫无疑问已经是最常用的数据库。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择MySql作为网站数据库。 作为一名编程人员,对MySql一定不会陌生,尤其是互联网行业,对MySql的使用是比较多的。对于求职者来说,MySql又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。 要学习Mysql,那就必须给大家安利一波《高性能MySql(第3版)》这本MySql领域的经典之作了。(全书共795页) ◎“只要你不敢以MySQL专家自诩,又岂敢错过这本神书?” ◎“一言以蔽之,写得好,编排得好,需要参考时容易到爆!” ◎“我可是从头到尾看了一遍上一版,可还是毫不犹豫拿起了这本《高性能MySQL(第3版)》,而且看完后一点都不后悔……”   ◎ 学习MySQL新特性,包括存储引擎、分区数据库、触发器和视图 ◎ 实现复制的改进、高可用和集群 ◎ 获得在云端运行MySQL的高性能 ◎ 优化高级查询特性,如全文索引 ◎ 从现代的多核CPU和固态硬盘中获益 ◎ 探索备份和恢复的策略,包括新的在线备份工具 内容简介 本书是MySQL领域的经典之作,拥有广泛的影响力。第3版更新了大量的内容,不但涵盖了最新MySQL5.5版本的新特性,也讲述了关于固态盘

最新蚂蚁花呗面试题:线程池与锁+数据主从同步+MQ实现+秒杀超卖

荒凉一梦 提交于 2020-10-25 10:27:53
一面:主要问的基础知识 java线程同步都有哪几种方式,Synchronized和ReentrantLock的区别 ReentrantLock底层是怎么实现的,怎么实现的超时获取锁。 cas的原理,变量要用哪个关键字修饰,volatile实现的原理,进而引申到了java虚拟机的内存模型。 介绍一下java虚拟机内存模型,然后继续讨论volatile。 线程池种类,哪四种 workqueue分别是什么 什么时候触发minor GC 什么时候触发full GC 聊点数据库,一般选什么样的字段做主键,有什么选取原则吗,用种子自增来做主键,为什么每次种子要加1,加2加3可以吗。 sql优化有哪些思路 索引使用注意事项 InnoDB数据模型,B+树具体说说都保存了什么,叶子节点保存了什么 你有什么想问我的。 二面:主要是围绕项目 1、介绍一下你的项目(主要是技术难点),请画出项目架构设计图和部署图? 2、dubbo负载均衡算法有哪些,如果让你实现一致性hash的dubbo负载均衡算法,你会怎么实现? 3、zookeeper实现的分布式锁的原理,以及redis具体怎么实现分布式锁? 4、限流是怎么实现的,hystrix介绍一下。 5、dubbo有哪些模块,底层通信的原理。 6、spring的ioc,aop是怎么实现的。 7、线上问题的解决思路,程序运行一段时间,突然内存溢出,重启后

算法学习计划

萝らか妹 提交于 2020-10-25 06:02:06
学习计划 根据王红梅编著的《算法设计与分析》,读取每一章的内容,然后从乐扣上找对应的算法题,包含简单-中等-困难三种程度。尽量每两周能够完成一章。遇到一种类型的问题时,先自己想想解决方案,然后再看标准答案。 所有章节为: 蛮力法 分治法 减治法 动态规划法 贪心法 回溯法 分支限界法 概率算法 近似算法 代码用go实现,写到asap中,github仓库位置https://github.com/shidawuhen/asap。 这样的好处是即能够学习基础知识,又能够进行实践,加深记忆。 实现完一遍后,如果有兴趣,可以参加一下乐扣的比赛。 这里需要推荐一下《算法设计与分析》这本书。 其实算法的书我看过不少,以前也看过《算法导论》,《算法设计与分析》这本书在我看过的这些书里,算是比较顶级的存在,主要原因是鞭辟入里、入木三分,深入浅出的讲述了算法的内核,而且篇幅也不是《算法导论》那种鸿篇巨著。建议大家有时间可以读一下。 我使用 乐扣 上的算法题演练,最近在上面做了一些算法题,感觉专业度上其实和北大的PKU有一定差距,不过乐扣在用户体验上做的更好一些,而且更注重面试,PKU给我的感觉更注重专业程度。大家可以视自己的具体情况选择平台。当然选择哪个平台都是可以的,只要能好好写代码,对于普罗大众而言,都是够用的。 最后 大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫) 往期文章回顾: 算法

110道python面试题

a 夏天 提交于 2020-10-25 05:48:19
1、一行代码实现1--100之和 利用sum()函数求和 2、如何在一个函数内部修改全局变量 函数内部global声明 修改全局变量 3 、列出5个python标准库 os:提供了不少与操作系统相关联的函数 sys: 通常用于命令行参数 re: 正则匹配 math: 数学运算 datetime:处理日期时间 4、字典如何删除键和合并两个字典 del和update方法 5、谈下python的GIL GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。 多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大 6、python实现列表去重的方法 先通过集合去重,在转列表 7、fun(*args,**kwargs)中的*args,**kwargs什么意思? 8、python2和python3的range(100)的区别 python2返回列表,python3返回迭代器,节约内存 9、一句话解释什么样的语言能够用装饰器?

20200616学习笔记

时光毁灭记忆、已成空白 提交于 2020-10-25 03:46:37
count(*) 的实现方式 在不同的 MySQL 引擎中,count(*) 有不同的实现方式 MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高 而 InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数 注意讨论的是没有过滤条件的 count(*),如果加了 where 条件的话,MyISAM 表也是不能返回得这么快的 InnoDB 是索引组织表,主键索引树的叶子节点是数据,而普通索引树的叶子节点是主键值。所以,普通索引树比主键索引树小很多。对于 count(*) 这样的操作,遍历哪个索引树得到的结果逻辑上都是一样的。因此,MySQL 优化器会找到最小的那棵树来遍历 小结: MyISAM 表虽然 count(*) 很快,但是不支持事务; show table status 命令虽然返回很快,但是不准确; InnoDB 表直接 count(*) 会遍历全表,虽然结果准确,但会导致性能问题。 那么如果你现在有一个页面经常要显示交易系统的操作记录总数,到底应该怎么办呢?答案是,我们只能自己计数 不同的 count 用法 count(字段)<count(主键 id)<count(1)≈count(*) count(主键 id) :,InnoDB 引擎会遍历整张表

mysql之索引

送分小仙女□ 提交于 2020-10-24 20:41:04
什么事索引:索引是帮助MySQL高级获取数据库的数据结构(数据结构) 索引两大功能: 排序:比如order by 快速查找 : where 条件 索引分类 主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 单值索引:即一个索引只包含单个列,一个表可以有多个单列索引 唯一索引:索引列的值必须唯一,但允许有空值 复合索引:即一个索引包含多个列(在数据库操作期间,复合索引比单值索引所需要的开销更小(对于相同的多个列建索引) 当表的行数远大于索引列的数目时可以使用复合索引) 哪些情况需要创建索引 主键自动建立唯一索引 频繁作为查询条件的字段应该创建索引(where 后面的语句) 查询中与其它表关联的字段,外键关系建立索引 单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引) 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度 查询中统计或者分组字段 哪些情况不要创建索引 表记录太少 经常增删改的表 Why:提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。\n因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件 Where条件里用不到的字段不创建索引 数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据列建立索引。\n注意,如果某个数据列包含许多重复的内容

必须了解的 MySQL 三大日志

人盡茶涼 提交于 2020-10-24 20:33:49
日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。 mysql 日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。 作为开发,我们重点需要关注的是二进制日志( binlog )和事务日志(包括 redo log 和 undo log ),本文接下来会详细介绍这三种日志。 binlog binlog 用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。 binlog 是 mysql 的逻辑日志,并且由 Server 层进行记录,使用任何存储引擎的 mysql 数据库都会记录 binlog 日志。 逻辑日志 :可以简单理解为记录的就是sql语句 。 物理日志 : mysql 数据最终是保存在数据页中的,物理日志记录的就是数据页变更 。 binlog 是通过追加的方式进行写入的,可以通过 max_binlog_size 参数设置每个 binlog 文件的大小,当文件大小达到给定值之后,会生成新的文件来保存日志。 binlog使用场景 在实际应用中, binlog 的主要使用场景有两个,分别是 主从复制 和 数据恢复 。 主从复制 :在 Master 端开启 binlog ,然后将 binlog 发送到各个 Slave 端, Slave 端重放 binlog 从而达到主从数据一致。 数据恢复 :通过使用

详解GaussDB bufferpool缓存策略,这次彻底懂了!

风流意气都作罢 提交于 2020-10-24 19:56:24
摘要: 华为云GaussDB(for mysql)是华为云自主研发的最新一代云原生数据库,采用计算存储分离、日志即数据的架构设计。具备极致可靠、极致性价比、多为扩展、完全可信等诸多特性。 一 、GaussDB(for mysql)简介 华为云GaussDB(for mysql)是华为云自主研发的最新一代云原生数据库,采用计算存储分离、日志即数据的架构设计。通过IO卸载、日志压缩合并、批量处理、软硬件垂直整合等技术,使数据库性能方面有了大幅提升。同时存储层采用多副本,多az部署,增强数据可靠性。具备极致可靠、极致性价比、多为扩展、完全可信等诸多特性。 GaussDB(for mysql)采用了计算存储分离、日志即数据的架构,一部分计算能力下推到存储层。存储层需要通过consolidation不断将写入的日志应用到页面上,从而将日志回收掉。另外SQL层从存储层读取页面时,也需要将日志回放到相应的版本从而获得对应版本的页面。如果每次都从磁盘读取页面,IO时延较大,这里将成为整个回放流程的瓶颈。 根据数据库一贯的做法,我们需要一个缓存(bufferpool),把经常访问的页面放在缓存中,从而加快页面读取的速度。但是存储层能够分配给bufferpool的资源非常有限,我们需要根据bufferpool的使用特点设计一个高效的缓存策略。 二、一些常见的缓存淘汰算法 缓存一般从以下三个特征进行描述

mysql简单用法

时光总嘲笑我的痴心妄想 提交于 2020-10-24 18:28:47
删除用户:drop user jack@'%'; (drop比delete删除的优势在于drop可以删除用户的权限,更加彻底) 更改用户名:rename user jack to jacknew; (用户的都存在与user表中,更改名称,权限不变) 更改用户密码:update mysql.user set password=password('123456') where user='jack'; 刷新授权表:flush privileges; 如果对root设置了密码,但是忘记了密码: mysqld_safe --skip-grant-tables & 跳过授权表,再免密登陆,更改root的密码 将同样的权限同时授权于多个用户,示例如下 grant select on hellodb.* to zsy@localhost,zsythink@localhost; 只对某张表的某个字段授权,可以使用如下语句 grant select (name,age) on zsythink.students to zsy@localhost; 只想将test函数的权限授予zsy用 grant execute on function zsythink.test to zsy@'192.168.%.%'; 使用procedure关键字,指明是存储过程 grant execute on

Lock wait timeout exceeded; try restarting transaction

风流意气都作罢 提交于 2020-10-24 16:45:12
一、问题抛出 在做查询语句时,MySQL 抛出了这样的异常: MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Error ) [1] => Array ( [sql] => SELECT * FROM taobao_trade WHERE order_status = 1 and orderID ='2018061812306547' AND is_tran_success=0 for update ) [2] => Array ( [error] => Lock wait timeout exceeded; try restarting transaction ) [3] => Array ( [errno] => 1205 ) ) 即 Lock wait timeout exceeded; try restarting transaction 的异常,错误提示的意思,很明显, 是因为这条语句被锁住了,所以释放这个锁。 二、解决方案 我们可以通过到 information_schema 中来进行查找被锁的语句。 解释:information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与 访问权限等。再简单点