引言
内容为慕课网的《高并发 高性能 高可用 Mysql 实战》视频的学习笔记内容和个人整理扩展之后的笔记,这一节主要讲讲Mysql5.8比较常用的几个新特性以及针对内部服务器的优化介绍,理论部分的内容比较多简单看看理解一下即可。
如果内容比较难可以跟随《Mysql是怎么样运行》个人读书笔记专栏补补课:
地址如下:从零开始学Mysql。
Mysql8.0新特性
Mysql为什么叫8.0?其实就是个数字游戏可以直接认为是5.8。
Mysql8.0有什么新特性:
窗口函数:rank()
- 列分隔,分为多个窗口
- 在窗口里面可以执行特定的函数
-- partition by 排名,案例指的是按照顾客支付金额排名。 -- rank() 窗口函数 select *, rank() over ( partition by customer_id order by amount desc) as ranking from payment;
隐藏索引
- 暂时隐藏某个索引。
- 可以隐藏和显示索引,测试索引作用,多用于开发的时候评估索引的可用性。
show index from payment; -- 隐藏索引 alter table payment alter index fk_payment_rental Invisible; -- 显示索引 alter table payment alter index fk_payment_rental Visible;
降序索引
- 8.0 之前只有升序的索引,自8.0之后引入了降序索引的索引排序方式,用于进行某些特殊查询的情况下也可以走索引。
通用表达式(CTE)
- CTE表达式预先定义复杂语句中反复使用的中间结果
- 可以简单认为是一个临时视图
select b,d from (select a,b from table1) join (select a,b from table2) where cte1.a = cte2.c; -- 简化 with cte1 as (select a,b from table1), cte1 as (select a,b from table2) select b,d from cte1 join cte2 where cte.a = cte2.c;
UTF8编码
- UTF8mb4作为默认的字符集
- DDL 事务
- 支持DDL事务,元数据操作可以回滚
- 对于不同数据库之间的DDL对比,可以看这篇文章:
InnoDB Cluster:组复制不是说Mysql可以组集群了而是说保证强一致性的数据同步,下面是关于一些核心组件的解释:
- Mysql Router:路由
- 管理端绕过路由进行配置,可以实现主备的自由切换。
另外从上面这个图还可以看到在新的概念图里面一般不会把节点叫master/slave了,额,zzzq就完事了。
Mysql官方的组复制其实是借用了Percona XtraDB Cluster的设计思路,只不过加了一些辅助工具看起来比较强一点而已,强一致性的组复制早就被实现过了,比如Percona XtraDB Cluster,设计思路也是来自于Zookeeper的一致性协议,可以认为是原理大同小异。
最后强一致性的最大问题那就是等待同步的时间是否可以被系统接受,所以看似组复制在尝试解决复制带来的数据同步问题实际上这种代价看上去还是比较大的。
数据库的分类
对于数据库我们可以做出下面的总结,市面上主流的数据库基本都可以按照下面的几种方式进行归类:用途归类,存储形式归类和架构分类。
用途分类:
- OLTP:在线事务处理
- OLAP:在线分析处理
- HTAP:事务和分析混合处理
OLTP:在线事务交易和处理系统,SQL语句不复杂大都用于事务的处理。并发量打,可用性的要求十分高。(Mysql / Postgres)
OLAP:在线分析处理系统,SQL语句复杂,并且数据量十分大,单个事务为单位。(Hive)
HTAP:混合两种数据库优点,一种架构多功能。(设计思路优秀,但是实际产出很可能类似新能源汽车,烧油不行烧点也不行)
存储形式分类
- 行存储:传统数据库的存储形式
- 列存储:针对传统OLTP数据库大数据量分析而逐渐出现的一种格式,行格式利于数据存储和数据分析。
- K/V存储:无论是行还是列存储,似乎都逃不过KV的概念,这一点读者可以自行思考理解。
架构分类
- Share-Everything
- CPU、内存、硬盘,多合一,类似电脑(数据库不用)
- Share-Memory
- 多CPU独立,内存,硬盘,超级计算机架构(多CPU同内存通信,同一片大内存超级计算机)
- SHare-Disk
- 一个CPU绑定一个内存,硬盘独立,共享存储的架构。
- Shared-Nothing
- CPU、内存、硬盘共享,常见集群的架构。
单体数据库之王
PostgresSQL说实话国内用的人太少了国内市场没有选择并且被忽视的优秀数据库,然而在国外Postgre SQL随着开源的不断发展以及比Mysql更优秀的设计市场占有率在逐年上升,同时Postgresql对于数据库设计者来说也是很好的范本,无论是学习还是研究都是十分好的参考资料,最后Postgresql是开源的社区在国外也比较活跃,这一点很重要,可惜国内只能老老实实研究Mysql了。
Mysql随着Oracle的商业化逐渐自闭式发展进步也越来越小实在看不到他的未来。
Postgresql和Mysql类似的地方以及更加进步的地方:
- Mysql类似功能
- 性能更好,更稳定
- 代码质量更高
- 有赶超Mysql的优势
- 良好的插件,包含并不完全列举比如下面的这些插件:
- Postgres-XL(OLTP)
- GTM管理每个事务的执行
- Coordinator解析SQL,制定执行计划,分发
- DataNode返回执行结果到Coordinator。
- GreenPlum 是给予Postgres分布式分析集群
- 高性能SQL优化器:GPORCA
- Slice的实现机制