标签: Mysql
Python3.8 Matplotlib员工数据分析
Python3.8 Matplotlib IP折线图
SpringBoot MyBatis 雪花算法
Mybatis使用Snowflake生成主键


- 在某些业务中为了安全已经扩展性需要弃用mysql自增id。采用Snowflake生成方式。
- 全局唯一性,不能出现重复的id。
- 趋势递增,MysqlInnoDB引擎使用的是是聚集索引,使用B-tree的数据结构来存储索引数据。尽量使用有序的主键保证写入性能。
- 单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、排序等特殊需求。
- id是无序的,连续的id容易被社会工程。
SpringBoot MyBatis 分析
日常开发中,需要对sql进行。为了提高效率,曾经使用mybatis扩展输出查询计划。
慢SQL
从编码角度来优化数据层的话,我首先会去查一下项目中运行的sql语句,定位到瓶颈是否出现在这里,首先去优化sql语句,而慢sql就是其中的主要优化对象,对于慢sql,顾名思义就是花费较多执行时间的语句,它带来的影响也比较恶劣,首先是执行时间过长影响数据的返回速度,其次,慢sql的长时间执行也会消耗和占用mysql的系统资源,影响其他的sql语句执行,过多的慢sql极其影响性能,如果系统流量或者并发量较大的情况下,过多的执行慢sql很有可能造成mysql的死锁以致于mysql服务无法正常使用。
企业架构分布式锁
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。是为了解决分布式系统中,不同的系统或是同一个系统的不同主机共享同一个资源的问题,它通常会采用互斥来保证程序的一致性。
锁
锁是一种常用的并发控制机制,用于保证一项资源在任何时候只能被一个线程使用,如果其他线程也要使用同样的资源,必须排队等待上一个线程使用完。

SpringBoot 动态数据源
在对老系统进行saas改造的时候,在项目初期使用了动态数据源的方式处理业务。
- 本文内容仅针对数据存储方案。
动态数据源
**SaaS是Software-as-a-service(软件即服务)**它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器
①独立性:每个租户的系统相互独立。
②平台性:所有租户归平台统一管理。
③隔离性:每个租户的数据相互隔离。
Docker Compose SpringBoot MySQL Redis
在Java的技术栈中可以使用maven插件来构建docker镜像,用起来没有docker-compose好用。
实现目标
- spring boot 、mysql 、redis 定义正常运行。
- 解决docker compose 启动顺序问题。
- 解决配置文件读取其它容器ip问题。
源码地址
MySQL基础(四)
本章是整理知识内容,为强化知识长期更新。
练手项目
牛客网
准备一个mysql 5.7的数据库
配置本地数据库
-
https://launchpad.net/test-db/employees-db-1/1.0.6 下载文件 employees_db-full-1.0.6.tar.bz2
-
解压文件
➜ employees_db tree
.
├── Changelog
├── README
├── employees.sql
├── employees_partitioned.sql
├── employees_partitioned2.sql
├── employees_partitioned3.sql
├── load_departments.dump
├── load_dept_emp.dump
├── load_dept_manager.dump
├── load_employees.dump
├── load_salaries.dump
├── load_titles.dump
├── objects.sql
├── test_employees_md5.sql
└── test_employees_sha.sql
Docker Compose Redis MySQL
记录下使用docker-compose构建管理Redis、mysql。
准备工作
- 创建工作目录
$ mkdir -p docker docker/mysql docker/mysql/data docker/redis docker/redis/data
# 使用 tree docker 查看目录结构 yum -y install tree 安装
$ tree docker
docker
├── mysql
│ └── data
└── redis
└── data
$ touch docker/mysql/my.cnf docker/redis/redis.conf
$ tree docker
docker
├── mysql
│ ├── data
│ └── my.cnf
└── redis
├── data
└── redis.conf
MySQL基础(三)
SQL 常见用法
1. 查找数据的查询
SELECT: 用于从数据库中选择数据
SELECT*FROMtable_name;
DISTINCT: 用于过滤掉重复的值并返回指定列的行
SELECT DISTINCTcolumn_name;
WHERE: 用于过滤记录/行
Docker Compose Redis 缓存击穿
关于Redis场景下简单的处理方式。
缓存穿透和缓存击穿
- 缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。
- 解决办法
- 缓存空对象:代码维护较简单,但是效果不好。不过部分场景能使用。
Docker Mysql5.7 部署
docker查找镜像
docker search mysql

docker 拉去镜像
docker pull mysql:5.7 直接拉去官方的镜像, 可以使用指定版本。

MySQL
本章是整理知识内容,为强化知识长期更新。
Mysql基础架构图
简单介绍上图相关模块功能
-
连接器:管理连接,权限验证
-
查询缓存:命中缓存则直接返回结果
-
语法解析:词法分析,语法分析
-
查询优化:执行计划生成,索引选择
-
执行器:操作引擎,返回结果
-
存储引擎:存储数据,提供读写结构。
MySQL基础(二)
本章是整理知识内容,为强化知识长期更新。
- 在 MySQL基础(一) 已经介绍了MYSQL最常用基础的操作,由于篇幅已经很大,所以分开记录。
MySql基础操作
子查询与连接
在MYSQL实际操作中,最大的操作就是查询,下面就关于子查询和链接做记录。
MySQL基础(一)
本章是整理知识内容,为强化知识长期更新。
Mysql介绍
- Mysql数据库是一种
C\S结构,就是客户端和服务端。 - 关键字
- DB :
DataBase数据库 - DBMS:
Database Management System数据库管理系统 - DBS:
Database System = DBMS + DB数据库系统 - DBA:
Database Administrator数据库管理员 - 行\列:二维表中存储的数据。
- 行
row\record(一条记录)。 - 列
column\field(一个字段)。
- 行
- DB :
- SQL
CentOS7 MySQL 部署
Centos7的yum源中默认是没有mysql,因为现在已经用mariaDB代替mysql了。
安装前检查
检查linux系统版本
[root@localhost backup]# cat /etc/system-release
CentOS Linux release 7.4.1708 (Core)


