数据库知识的学习,对于后端开发,尤其是大数据方向的开发,那是必备的技能。
数据库有人说就是SQL的学习,其实不然,下面就来聊一聊。
首先要熟悉一款主流的数据库, 常用的如mysql, postgresql,oracle,建议从mysql开始,互联网应用非常广泛;
基础
要熟悉那些内容呢?
- 数据库的安装,如依赖库的安装,让数据库运行起来。简单的配置,如服务端的端口,数据存放的目录,配置文件的位置等;
- 基本的SQL,如创建库,表,用户,视图等对象,给用户授权。还有数据一致性的主键,外键,其它约束(check, unique,not null, default等)。
- 然后就可以针对应用来设计数据库的表,这就用到了3NF。
以上是最基础的,大学生毕设水平,几乎大部分人已经具备了,那你能进入大厂的优势是什么呢?
这就需要知道这些内容。
初级
- 数据库的用户,角色,拿一个用户啥都可以干,这就low了,这就需要系统的了解,数据库中的系统权限,数据库对角权限,还有数据库的访问控制。
- 数据库的数据组织层次,以及数据物理存储形式。只知道insert一条数据,但不知道它在那里;逻辑层次如 表空间, 数据库, 模式schema,表等;物理存储形式,如表与文件如何对应,如何管理。
- SQL的结构,每条SQL有那几部分组成;排序,分组,窗口函数;以及连接,子查询,CTE语句,复杂SQL其实就是基础部分迭代;学习复杂SQL的编写;这就是SQL使用的能力;
- 索引的使用;不仅一条SQL能查到数据,还能在最短的时间查出来;索引的类型,不同索引的算法,以及适应的数据形式;索引失效的情况,即什么情况下能用到索引,而什么情况下索引却用不到。
- 存储过程,可重用的代码,在服务端执行;不过现在不太建议大量使用,不同类型数据库移植比较麻烦;
- 触发器,同上;
- 事务;在数据库中最核心的特征;事务的隔离级别,各级别下的并发发控制特点;在不同类型数据库中表现是不同的。
- 数据库的简单配置,当然不同与前面;内存缓存,存储位置等等,让自己使用时更加得心应手;
- 数据库的备份,恢复的方法有那几种,特点;这可以在应急时使用。
这就可以进入码农的状态,能够沉浸的写代码,解决bug。
进阶
想要在功能,或软件中有一点自己想法,那就需要了解更多。这里就不再是按工具,功能来了解,而是按特性。
- 一个应用,需要考虑故障的情况下,数据丢失很少或不丢失;业务不中断或中断更短时间。
- 主备的搭建,主备同步的配置,主备业务转移方式;主备切换模式;每种模式下数据丢失情况和业务中断时长;
- 数据备份策略,比如每天全量备份一遍呢,还是每天增量备份,一周全量备份;这些如何搭建呢?备份的存放策略;
- 数据的恢复;有那些恢复方式;
- 两地三中心,如何做到;用到数据库功能,一堆工具,如何对接部署;
- 多节点时的数据一致性,事务并发控制;
- SQL语句性能的查看分析;
- 采用合理的事务隔离等级,锁表SQL等;
- 数据库配置,对性能的影响,如何调优配置;
- 部署级的性能提升,如读写分离的部署,带有负载均衡,连接池;
- 合理使用数据库功能,如分区表,物化视图,并发查询;调整刷盘间隔,调整日志数据量;
- 采用多种类型数据库的组合,如内存库,KV库,时序库;
- 采用更有效的架构模型,如CQRS;
- 基础安全策略还是必须的,更多的策略就要看应用的需要。
- 访问控制,如果你的库经常被别人登陆;可以设置基于IP,用户,库等等的访问限制;
- 用户-角色的自主访问控制策略,数据和表经常被别人删掉的困惑就可以解决;
- 加密;客户端与服务端之间通信信道加密;数据库中数据的加密;数据库中数据存储的加密;还有备份数据的加密;甚至客户端就对数据加密,在库中完全加密,这种情况下如何查询,性能提升;不同场景,数据类型采用的加密算法,这对性能影响非常大,以及后续的查询都有影响;
开源数据库postgresql的学习,已经成为主流方向,承蒙各位粉丝的关注和支持,经过一番努力学习教程已经成形,可以参见以下链接。
【postgresql 基础入门】入门教程成形了,八大章节,涵盖库,表,事务,约束,数据类型,聚集函数,轻松入门-CSDN博客