开始更新数据分析部分内容

pull/716/head
jackfrued 2020-11-30 20:37:06 +08:00
parent 913dd1cc63
commit d1f0857d8d
23 changed files with 216 additions and 178 deletions

View File

@ -751,7 +751,7 @@ Linux系统的命令通常都是如下所示的格式
设置hellokitty用户100天后必须修改密码过期前15天通知该用户过期后15天禁用该用户。
```Shell
chage -M 100 -W 15 -I 15 hellokitty
chage -M 100 -W 15 -I 7 hellokitty
```
5. 切换用户 - **su**

View File

@ -836,7 +836,7 @@ possible_keys: NULL
在上面的SQL执行计划中有几项值得我们关注
1. typeMySQL在表中找到满足条件的行的方式也称为访问类型包括ALL全表扫描、index索引全扫描、range索引范围扫描、ref非唯一索引扫描、eq_ref唯一索引扫描、const/system、NULL。在所有的访问类型中很显然ALL是性能最差的它代表了全表扫描是指要扫描表中的每一行才能找到匹配的行。
1. `type`MySQL在表中找到满足条件的行的方式也称为访问类型包括ALL全表扫描、index索引全扫描、range索引范围扫描、ref非唯一索引扫描、eq_ref唯一索引扫描、const/system、NULL。在所有的访问类型中很显然ALL是性能最差的它代表了全表扫描是指要扫描表中的每一行才能找到匹配的行。
2. possible_keysMySQL可以选择的索引但是**有可能不会使用**。
3. keyMySQL真正使用的索引。
4. rows执行查询需要扫描的行数这是一个**预估值**。

View File

@ -46,27 +46,45 @@ Redis是REmote DIctionary Server的缩写它是一个用ANSI C编写的高性
#### Redis的安装和配置
可以使用Linux系统的包管理工具如yum来安装Redis也可以通过在Redis的[官方网站](https://redis.io/)下载Redis的源代码解压缩解归档之后通过make工具对源代码进行构建并安装在更新这篇文档时Redis官方提供的最新稳定版本是[Redis 5.0.4](http://download.redis.io/releases/redis-5.0.4.tar.gz)。
可以使用Linux系统的包管理工具如yum来安装Redis也可以通过在Redis的[官方网站](https://redis.io/)下载Redis的源代码解压缩解归档之后通过make工具对源代码进行构建并安装在更新这篇文档时Redis官方提供的最新稳定版本是[Redis 5.0.10](https://download.redis.io/releases/redis-5.0.10.tar.gz)。
```Shell
wget http://download.redis.io/releases/redis-5.0.4.tar.gz
gunzip redis-5.0.4.tar.gz
tar -xvf redis-5.0.4.tar
cd redis-5.0.4
下载:
```Bash
wget https://download.redis.io/releases/redis-5.0.10.tar.gz
```
解压缩和解归档:
```Bash
tar -zxf redis-5.0.10.tar.gz
```
进入Redis源代码目录
```Bash
cd redis-5.0.10
```
构建和安装:
```Bash
make && make install
```
在redis源代码目录下有一个名为redis.conf的配置文件我们可以先查看一下该文件。
```Shell
```Bash
vim redis.conf
```
配置将Redis服务绑定到指定的IP地址和端口。
下面我们对Redis的配置文件进行一个扼要的介绍。
配置Redis服务的IP地址和端口
![](./res/redis-bind-and-port.png)
配置底层有多少个数据库。
配置底层有多少个数据库
![](./res/redis-databases.png)
@ -76,19 +94,19 @@ vim redis.conf
![](./res/redis-rdb-3.png)
配置Redis的持久化机制 - AOF
配置Redis的持久化机制 - AOF
![](./res/redis-aof.png)
配置访问Redis服务器的验证口令。
配置访问Redis服务器的口令:
![](./res/redis-security.png)
配置Redis的主从复制,通过主从复制可以实现读写分离。
配置Redis的主从复制(通过主从复制可以实现读写分离):
![](./res/redis-replication.png)
配置慢查询
配置慢查询
![](./res/redis-slow-logs.png)
@ -98,41 +116,46 @@ vim redis.conf
接下来启动Redis服务器下面的方式将以默认的配置启动Redis服务。
```Shell
```Bash
redis-server
```
如果希望修改Redis的配置如端口、认证口令、持久化方式等可以通过下面两种方式。
方式一通过参数指定认证口令和AOF持久化方式。
**方式一**通过参数指定认证口令和AOF持久化方式。
```Shell
```Bash
redis-server --requirepass yourpass --appendonly yes
```
方式二通过指定的配置文件来修改Redis的配置。
**方式二**通过指定的配置文件来修改Redis的配置。
```Shell
redis-server /root/redis-5.0.4/redis.conf
```Bash
redis-server /root/redis-5.0.10/redis.conf
```
下面我们使用第一种方式来启动Redis并将其置于后台运行将Redis产生的输出重定向到名为redis.log的文件中。
```Shell
```Bash
redis-server --requirepass yourpass > redis.log &
```
可以通过ps或者netstat来检查Redis服务器是否启动成功。
可以通过`ps`或者`netstat`来检查Redis服务器是否启动成功。
```Shell
```Bash
ps -ef | grep redis-server
netstat -nap | grep redis-server
```
接下来我们尝试用Redis客户端去连接服务器
接下来我们尝试用Redis命令行工具`redis-cli`去连接服务器,该工具默认连接本机的`6379`端口如果需要指定Redis服务器和端口可以使用`-h`和`-p`参数分别进行指定
```Shell
```Bash
redis-cli
```
进入命令行工具后就可以通过Redis的命令来操作Redis服务器如下所示。
```Bash
127.0.0.1:6379> auth yourpass
OK
127.0.0.1:6379> ping
@ -144,9 +167,9 @@ Redis有着非常丰富的数据类型也有很多的命令来操作这些数
![](./res/redis-data-types.png)
> **说明**:上面的插图来自付磊和张益军先生编著的《Redis开发与运维》一书。
> **说明**上面的插图来自付磊和张益军编著的《Redis开发与运维》一书。
```Shell
```Bash
127.0.0.1:6379> set username admin
OK
127.0.0.1:6379> get username
@ -251,9 +274,14 @@ OK
2) "xuezq"
3) "zhoujl"
4) "chenyx"
127.0.0.1:6379> geoadd pois 116.39738549206541 39.90862689286386 tiananmen 116.27172936413572 39.99
135172904494 yiheyuan 117.27766503308104 40.65332064313784 gubeishuizhen
(integer) 3
127.0.0.1:6379> zrevrank topsinger zhoujl
(integer) 2
127.0.0.1:6379> geoadd pois 116.39738549206541 39.90862689286386 tiananmen
(integer) 1
127.0.0.1:6379> geoadd pois 116.27172936413572 39.99135172904494 yiheyuan
(integer) 1
127.0.0.1:6379> geoadd pois 117.27766503308104 40.65332064313784 gubeishuizhen
(integer) 1
127.0.0.1:6379> geodist pois tiananmen gubeishuizhen km
"111.5333"
127.0.0.1:6379> geodist pois tiananmen yiheyuan km
@ -265,28 +293,31 @@ OK
#### 在Python程序中使用Redis
可以使用pip安装redis模块。redis模块的核心是名为Redis的类该类的对象代表一个Redis客户端通过该客户端可以向Redis服务器发送命令并获取执行的结果。上面我们在Redis客户端中使用的命令基本上就是Redis对象可以接收的消息所以如果了解了Redis的命令就可以在Python中玩转Redis。
可以使用pip安装名为`redis`的三方库,该三方库的核心是一个名为`Redis`的类,`Redis`对象代表一个Redis客户端通过该客户端可以向Redis服务器发送命令并获取执行的结果。上面我们在Redis客户端中使用的命令基本上就是`Redis`对象可以接收的消息所以如果了解了Redis的命令就可以在Python中玩转Redis。
```Shell
```Bash
pip3 install redis
python3
```
```Python
进入Python交互式环境使用`redis`三方库来操作Redis。
```Bash
>>> import redis
>>> client = redis.Redis(host='1.2.3.4', port=6379, password='yourpass')
>>>
>>> client = redis.Redis(host='127.0.0.1', port=6379, password='yourpass')
>>>
>>> client.set('username', 'admin')
True
>>> client.hset('student', 'name', 'hao')
>>> client.hset('student', 'name', 'luohao')
1
>>> client.hset('student', 'age', 38)
>>> client.hset('student', 'age', 40)
1
>>> client.keys('*')
[b'username', b'student']
>>> client.get('username')
b'admin'
>>> client.hgetall('student')
{b'name': b'hao', b'age': b'38'}
{b'name': b'luohao', b'age': b'40'}
```
### MongoDB概述
@ -299,53 +330,60 @@ MongoDB将数据存储为一个文档一个文档由一系列的“键值对
目前MongoDB已经提供了对Windows、macOS、Linux、Solaris等多个平台的支持而且也提供了多种开发语言的驱动程序Python当然是其中之一。
#### MongoDB的安装和配置
#### MongoDB的安装和启动
可以从MongoDB的[官方下载链接](https://www.mongodb.com/download-center#community)下载MongoDB官方为Windows系统提供了一个Installer程序而Linux和MacOS则提供了压缩文件。下面简单说一下Linux系统如何安装和配置MongoDB。
可以从MongoDB的[官方下载链接](https://www.mongodb.com/try/download/community)下载MongoDB官方提供了Windows、macOS和多种Linux版本的安装包。下面以CentOS为例简单说一下如何安装和启动MongoDB。
```Shell
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.6.5.tgz
gunzip mongodb-linux-x86_64-amazon-3.6.5.tgz
mkdir mongodb-3.6.5
tar -xvf mongodb-linux-x86_64-amazon-3.6.5.tar --strip-components 1 -C mongodb-3.6.5/
export PATH=$PATH:~/mongodb-3.6.5/bin
mkdir -p /data/db
mongod --bind_ip 172.18.61.250
下载服务器和命令行的RPM安装包。
2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] MongoDB starting : pid=1163 port=27017 dbpath=/data/db 64-bit host=iZwz97tbgo9lkabnat2lo8Z
2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] db version v3.6.5
2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] git version: a20ecd3e3a174162052ff99913bc2ca9a839d618
2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.0-fips29 Mar 2010
...
2018-06-03T18:03:28.945+0800 I NETWORK [initandlisten] waiting for connections on port 27017
```Bash
wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/RPMS/mongodb-org-server-4.4.2-1.el7.x86_64.rpm
rpm -ivh mongodb-org-server-4.4.2-1.el7.x86_64.rpm
wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/RPMS/mongodb-org-shell-4.4.2-1.el7.x86_64.rpm
rpm -ivh mongodb-org-shell-4.4.2-1.el7.x86_64.rpm
```
> **说明**上面的操作中export命令是设置PATH环境变量这样可以在任意路径下执行mongod来启动MongoDB服务器。MongoDB默认保存数据的路径是/data/db目录为此要提前创建该目录。此外在使用mongod启动MongoDB服务器时--bind_ip参数用来将服务绑定到指定的IP地址也可以用--port参数来指定端口默认端口为27017。
启动MongoDB服务器需要先创建保存数据的文件夹。
```Bash
mkdir -p /data/db
```
修改MongoDB的配置文件将其中`bindIp`选项的值修改为本机IP地址而不是默认的`127.0.0.1`本机IP地址可以通过`ifconfig`命令进行查看。
```Bash
vim /etc/mongod.conf
```
使用`systemctl`命令启动服务。
```Bash
systemctl start mongod
```
#### MongoDB基本概念
我们通过与关系型数据库进行对照的方式来说明MongoDB中的一些概念。
我们通过与关系型数据库的比较来说明MongoDB中的一些概念。
| SQL | MongoDB | 解释SQL/MongoDB |
| ----------- | ----------- | ---------------------- |
| database | database | 数据库/数据库 |
| table | collection | 二维表/集合 |
| row | document | 记录(行)/文档 |
| column | field | 字段(列)/域 |
| index | index | 索引/索引 |
| table joins | --- | 表连接/嵌套文档 |
| primary key | primary key | 主键/主键(`_id`字段) |
| SQL | MongoDB |
| --------------------- | ------------------ |
| database | database |
| table(表) | collection集合 |
| row(行) | document文档 |
| column(列) | field字段 |
| index | index |
| table joins(表连接) | (嵌套文档) |
| primary key | primary key |
#### 通过Shell操作MongoDB
启动服务器后可以使用交互式环境跟服务器通信,如下所示
0. 启动命令行工具,进入交互式环境
```shell
mongo --host 172.18.61.250
```Bash
mongo
```
MongoDB shell version v3.6.5
connecting to: mongodb://172.18.61.250:27017/
```
> **说明**
1. 查看、创建和删除数据库。
@ -361,7 +399,6 @@ connecting to: mongodb://172.18.61.250:27017/
> // 删除当前数据库
> db.dropDatabase()
{ "ok" : 1 }
>
```
2. 创建、删除和查看集合。
@ -383,16 +420,15 @@ connecting to: mongodb://172.18.61.250:27017/
> // 删除colleges集合
> db.colleges.drop()
true
>
```
> 说明在MongoDB中插入文档时如果集合不存在会自动创建集合所以也可以按照下面的方式通过创建文档来创建集合。
> **说明**在MongoDB中插入文档时如果集合不存在会自动创建集合所以也可以按照下面的方式通过插入文档来创建集合。
3. 文档的CRUD操作。
```JavaScript
> // 向students集合插入文档
> db.students.insert({stuid: 1001, name: '骆昊', age: 38})
> db.students.insert({stuid: 1001, name: '骆昊', age: 40})
WriteResult({ "nInserted" : 1 })
> // 向students集合插入文档
> db.students.save({stuid: 1002, name: '王大锤', tel: '13012345678', gender: '男'})
@ -482,22 +518,23 @@ connecting to: mongodb://172.18.61.250:27017/
"numIndexesAfter" : 2,
"ok" : 1
}
>
```
使用MongoDB可以非常方便的配置数据复制通过冗余数据来实现数据的高可用以及灾难恢复也可以通过数据分片来应对数据量迅速增长的需求。关于MongoDB更多的操作可以查阅[官方文档](https://mongodb-documentation.readthedocs.io/en/latest/) 同时推荐大家阅读Kristina Chodorow写的[《MongoDB权威指南》](http://www.ituring.com.cn/book/1172)。
#### 在Python程序中操作MongoDB
可以通过pip安装pymongo来实现对MongoDB的操作。
可以通过pip安装`pymongo`来实现对MongoDB的操作。
```Shell
pip3 install pymongo
python3
pip install pymongo
```
进入Python交互式环境就可以执行以下的操作。
```Python
>>> from pymongo import MongoClient
>>>
>>> client = MongoClient('mongodb://127.0.0.1:27017')
>>> db = client.school
>>> for student in db.students.find():
@ -520,8 +557,9 @@ python3
{'n': 3, 'ok': 1.0}
>>> db.students.find().count()
0
>>> coll = db.students
>>> from pymongo import ASCENDING
>>>
>>> coll = db.students
>>> coll.create_index([('name', ASCENDING)], unique=True)
'name_1'
>>> coll.insert_one({'stuid': int(1001), 'name': '骆昊', 'gender': True})
@ -539,7 +577,6 @@ python3
学号: 1003
姓名: 白元芳
性别: 男
>>>
```
关于PyMongo更多的知识可以通过它的[官方文档](https://api.mongodb.com/python/current/tutorial.html)进行了解,也可以使用[MongoEngine](<https://pypi.org/project/mongoengine/>)这样的库来简化Python程序对MongoDB的操作除此之外还有以异步I/O方式访问MongoDB的三方库[motor](<https://pypi.org/project/motor/>)都是不错的选择。
关于[`pymongo`](https://api.mongodb.com/python/current/tutorial.html)更多的知识可以通过它的官方文档进行了解,也可以使用[`MongoEngine`](<https://pypi.org/project/mongoengine/>)这样的库来简化Python程序对MongoDB的操作除此之外还有以异步I/O方式访问MongoDB的三方库[`motor`](<https://pypi.org/project/motor/>)都是不错的选择。

View File

@ -2,7 +2,7 @@
drop database if exists school;
-- 创建名为school的数据库并设置默认的字符集和排序方式
create database school default charset utf8;
create database school default charset utf8mb4;
-- 切换到school数据库上下文环境
use school;
@ -34,7 +34,7 @@ create table tb_teacher
(
teaid int not null comment '工号',
teaname varchar(20) not null comment '姓名',
teatitle varchar(10) default '助教' comment '职称',
teatitle varchar(10) default '讲师' comment '职称',
collid int not null comment '所属学院',
primary key (teaid),
foreign key (collid) references tb_college (collid)
@ -68,8 +68,8 @@ unique (sid, cid)
-- 插入学院数据
insert into tb_college (collname, collintro) values
('计算机学院', '计算机学院1958年设立计算机专业1981年建立计算机科学系1998年设立计算机学院2005年5月为了进一步整合教学和科研资源学校决定计算机学院和软件学院行政班子合并统一运作、实行教学和学生管理独立运行的模式。 学院下设三个系计算机科学与技术系、物联网工程系、计算金融系两个研究所图象图形研究所、网络空间安全研究院2015年成立三个教学实验中心计算机基础教学实验中心、IBM技术中心和计算机专业实验中心。'),
('外国语学院', '四川大学外国语学院设有7个教学单位6个文理兼收的本科专业拥有1个一级学科博士授予点3个二级学科博士授予点5个一级学科硕士学位授权点5个二级学科硕士学位授权点5个硕士专业授权领域同时还有2个硕士专业学位MTI专业有教职员工210余人其中教授、副教授80余人教师中获得中国国内外名校博士学位和正在职攻读博士学位的教师比例占专任教师的60%以上。'),
('经济管理学院', '四川大学经济学院前身是创办于1905年的四川大学经济科;已故经济学家彭迪先、张与九、蒋学模、胡寄窗、陶大镛、胡代光,以及当代学者刘诗白等曾先后在此任教或学习1905年四川大学设经济科1924年四川大学经济系成立1998年四川大学经济管理学院变更为四川大学经济学院');
('外国语学院', '外国语学院设有7个教学单位6个文理兼收的本科专业拥有1个一级学科博士授予点3个二级学科博士授予点5个一级学科硕士学位授权点5个二级学科硕士学位授权点5个硕士专业授权领域同时还有2个硕士专业学位MTI专业有教职员工210余人其中教授、副教授80余人教师中获得中国国内外名校博士学位和正在职攻读博士学位的教师比例占专任教师的60%以上。'),
('经济管理学院', '经济学院前身是创办于1905年的经济科已故经济学家彭迪先、张与九、蒋学模、胡寄窗、陶大镛、胡代光以及当代学者刘诗白等曾先后在此任教或学习。');
-- 插入学生数据
insert into tb_student (stuid, stuname, stusex, stubirth, stuaddr, collid)
@ -98,7 +98,7 @@ insert into tb_teacher (teaid, teaname, teatitle, collid) values
(1133, '宋远桥', '副教授', 1),
(1144, '杨逍', '副教授', 1),
(2255, '范遥', '副教授', 2),
(3366, '韦一笑', '讲师', 3);
(3366, '韦一笑', default, 3);
-- 插入课程数据
insert into tb_course (couid, couname, coucredit, teaid) values

View File

@ -1,2 +1,70 @@
## 用FastAPI开发数据接口
## 用FastAPI开发网络数据接口
FastAPI 是一个用于构建API网络数据接口的现代、高性能的Web框架基于Python 3.6+使用了Python中的类型提示进行类型检查非常符合工程化开发的需求在业界有非常好的口碑。下面我们先用代码告诉大家FastAPI到底能做什么然后再来讲解它的方方面面。
### FastAPI五分钟上手
1. 安装依赖库和ASGI服务器支持异步I/O的Python服务器
```Bash
pip install fastapi
pip install uvicorn
```
2. 编写代码`main.py`。
```Python
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def say_hello():
return {'code': 200, 'message': 'hello, world!'}
```
3. 运行服务。
```Bash
uvicorn main:app --reload
```
> **说明**上面运行uvicorn时使用的`--reload`参数会在代码发生变更时自动重新加载新的内容,这个参数在开发阶段非常的有用。
4. 访问服务。
![](res/run-first-demo.png)
5. 查看文档。
![](res/first-demo-docs.png)
> **注意**FastAPI会基于[Swagger UI](https://swagger.io/tools/swagger-ui/)自动为数据接口生成对应的文档。
### 请求和响应
### 接入关系型数据库
我们可以使用SQLAlchemy三方库来实现对关系型数据库的接入。SQLAlchemy是一个ORM对象关系映射框架ORM框架可以解决Python程序的面向对象模型和关系型数据库的关系模型并不匹配的问题使得我们可以用面向对象的方式实现数据的CRUD操作。
### 依赖注入
### 中间件
### 异步化
### 虚拟化部署Docker
### 项目实战:车辆违章查询

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 KiB

After

Width:  |  Height:  |  Size: 723 KiB

View File

@ -1,2 +1,2 @@
## NumPy的应用
## 数据分析概述

View File

@ -1,25 +1,2 @@
## Pandas的应用
### 1、Pandas入门
### 2、Pandas索引
### 3、Pandas数据清洗之空数据
[数据挖掘之空数据处理(有史以来最全面)]: https://blog.csdn.net/Soft_Po/article/details/89302887
### 4、Pandas多层索引
### 5、Pandas多层索引计算
### 6、Pandas数据集成concat
### 7、Pandas数据集成merge
### 8、Pandas分组聚合操作
### 9、Pandas数据集成实战
### 10、美国大选项目
[2012美国大选政治献金项目数据分析有史以来最全面]: https://blog.csdn.net/Soft_Po/article/details/89283382

View File

@ -180,55 +180,3 @@ if __name__ == '__main__':
运行效果如下图所示。
![](./res/result8.png)
### 使用Pygal绘制矢量图
矢量图SVG是[计算机图形学](https://zh.wikipedia.org/wiki/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6)中用点、直线或者多边形等基于数学方程的几何图元表示的图像也是目前应用得非常多的一种图像文件格式全称是“Scalable Vector Graphics”。和使用像素表示图像的位图不同SVG基于XML存储图像数据它是W3C定义的一种开放标准的矢量图形语言可以用来设计更为清晰的Web图像因为SVG与分辨率无关在任意放大时不会丢失细节或影响清晰度。SVG可以直接用代码来描绘图像也可以用任何文字处理工具来打开它通过改变SVG的代码我们可以让图像具备交互功能。
Python中可以使用Pygal来生成SVG可以通过pip来安装它。
```Python
from random import randint
import pygal
def roll_dice(n=1):
total = 0
for _ in range(n):
total += randint(1, 6)
return total
def main():
results = []
# 将两颗色子摇10000次记录点数
for _ in range(10000):
face = roll_dice(2)
results.append(face)
freqs = []
# 统计2~12点各出现了多少次
for value in range(2, 13):
freq = results.count(value)
freqs.append(freq)
# 绘制柱状图
hist = pygal.Bar()
hist.title = 'Result of rolling two dice'
hist.x_labels = [x for x in range(2, 13)]
hist.add('Frequency', freqs)
# 保存矢量图
hist.render_to_file('result.svg')
if __name__ == '__main__':
main()
```
运行上面的程序,效果如下图所示。
![](./res/result9.png)
### 后记
Matplotlib和NumPy的强大我们在这里也只是窥视了其冰山一角我们在后续的内容里面还会使用到这两个第三方库到时候我们再续点为大家介绍其他的功能。

View File

@ -0,0 +1,2 @@
## 大数据概述

View File

@ -0,0 +1,2 @@
## 大数据概述

View File

@ -0,0 +1,2 @@
## 大数据概述

View File

@ -0,0 +1,2 @@
## 大数据概述

View File

@ -0,0 +1,2 @@
## 大数据概述

View File

@ -92,10 +92,10 @@ MySQL支持做数据分区通过分区可以存储更多的数据、优化查
mysql> set global slow_query_log_file='/var/log/mysqld-slow.log'
mysql> set global slow_query_log='ON';
mysql> set global long_query_time=1;
```
或者直接修改MySQL配置文件启用慢查询日志。
```
- 或者直接修改MySQL配置文件启用慢查询日志。
```INI
[mysqld]
slow_query_log=ON
@ -217,8 +217,8 @@ MySQL支持做数据分区通过分区可以存储更多的数据、优化查
- 分页查询时,一个比较头疼的事情是如同`limit 1000, 20`此时MySQL已经排序出前1020条记录但是仅仅返回第1001到1020条记录前1000条实际都用不上查询和排序的代价非常高。一种常见的优化思路是在索引上完成排序和分页的操作然后根据返回的结果做表连接操作来得到最终的结果这样可以避免出现全表查询也避免了外部排序。
```SQL
select * from tb_emp order by ename limit 1000, 20;
select * from tb_emp t1 inner join (select eno from tb_emp order by ename limit 1000, 20) t2 on t1.eno=t2.eno;
select * from tb_emp order by ename limit 10000, 20;
select * from tb_emp t1 inner join (select eno from tb_emp order by ename limit 10000, 20) t2 on t1.eno=t2.eno;
```
上面的代码中第2行SQL是优于第1行SQL的当然我们的前提是已经在`ename`字段上创建了索引。
@ -275,7 +275,5 @@ show status like 'slow_queries';
5. 配置MySQL集群。
> **说明**本章内容参考了网易出品的《深入浅出MySQL》一书该书和《高性能MySQL》一样都对MySQL进行了深入细致的讲解虽然总体感觉后者更加高屋建瓴但是前者也算得上是提升MySQL技能的佳作作者的文字功底稍显粗糙深度也不及后者建议有兴趣的读者可以阅读这两本书。

View File

@ -209,7 +209,7 @@ Python在以下领域都有用武之地。
- 数据完整性
- 数据一致性
- 在Python中操作MySQL
- [NoSQL入门](./Day36-40/39-40.NoSQL入门.md)
- [NoSQL数据库入门](./Day36-40/39-40.NoSQL数据库入门.md)
- NoSQL概述
- Redis概述
- Mongo概述
@ -394,15 +394,15 @@ Python在以下领域都有用武之地。
### Day86~90 - [大数据分析概述](./Day86-90)
####Day86 - [大数据概述]()
####Day86 - [大数据概述](./Day86-90/86.大数据概述.md)
#### Day87 - [Hive查询]()
#### Day87 - [Hive查询](./Day86-90/87.Hive查询.md)
#### Day88 - [PySpark和离线数据处理]()
#### Day88 - [PySpark和离线数据处理](./Day86-90/87.PySpark和离线数据处理.md)
#### Day89 - [Flink和流式数据处理]()
#### Day89 - [Flink和流式数据处理](./Day86-90/89.Flink和流式数据处理.md)
#### Day90 - [大数据分析项目实战]()
#### Day90 - [大数据分析项目实战](./Day86-90/90.大数据分析项目实战.md)
### Day91~100 - [团队项目开发](./Day91-100)