Skip to content

Commit d1f0857

Browse files
committed
开始更新数据分析部分内容
1 parent 913dd1c commit d1f0857

23 files changed

+216
-178
lines changed

Day31-35/31-35.玩转Linux操作系统.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,7 @@ Linux系统的命令通常都是如下所示的格式:
751751
设置hellokitty用户100天后必须修改密码,过期前15天通知该用户,过期后15天禁用该用户。
752752

753753
```Shell
754-
chage -M 100 -W 15 -I 15 hellokitty
754+
chage -M 100 -W 15 -I 7 hellokitty
755755
```
756756

757757
5. 切换用户 - **su**

Day36-40/36-38.关系型数据库MySQL.md

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

Day36-40/39-40.NoSQL入门.md Day36-40/39-40.NoSQL数据库入门.md

+118-81
Original file line numberDiff line numberDiff line change
@@ -46,27 +46,45 @@ Redis是REmote DIctionary Server的缩写,它是一个用ANSI C编写的高性
4646

4747
#### Redis的安装和配置
4848

49-
可以使用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)
49+
可以使用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)
5050

51-
```Shell
52-
wget http://download.redis.io/releases/redis-5.0.4.tar.gz
53-
gunzip redis-5.0.4.tar.gz
54-
tar -xvf redis-5.0.4.tar
55-
cd redis-5.0.4
51+
下载:
52+
53+
```Bash
54+
wget https://download.redis.io/releases/redis-5.0.10.tar.gz
55+
```
56+
57+
解压缩和解归档:
58+
59+
```Bash
60+
tar -zxf redis-5.0.10.tar.gz
61+
```
62+
63+
进入Redis源代码目录:
64+
65+
```Bash
66+
cd redis-5.0.10
67+
```
68+
69+
构建和安装:
70+
71+
```Bash
5672
make && make install
5773
```
5874

5975
在redis源代码目录下有一个名为redis.conf的配置文件,我们可以先查看一下该文件。
6076

61-
```Shell
77+
```Bash
6278
vim redis.conf
6379
```
6480

65-
配置将Redis服务绑定到指定的IP地址和端口。
81+
下面我们对Redis的配置文件进行一个扼要的介绍。
82+
83+
配置Redis服务的IP地址和端口:
6684

6785
![](./res/redis-bind-and-port.png)
6886

69-
配置底层有多少个数据库
87+
配置底层有多少个数据库
7088

7189
![](./res/redis-databases.png)
7290

@@ -76,19 +94,19 @@ vim redis.conf
7694

7795
![](./res/redis-rdb-3.png)
7896

79-
配置Redis的持久化机制 - AOF
97+
配置Redis的持久化机制 - AOF
8098

8199
![](./res/redis-aof.png)
82100

83-
配置访问Redis服务器的验证口令。
101+
配置访问Redis服务器的口令:
84102

85103
![](./res/redis-security.png)
86104

87-
配置Redis的主从复制通过主从复制可以实现读写分离
105+
配置Redis的主从复制通过主从复制可以实现读写分离):
88106

89107
![](./res/redis-replication.png)
90108

91-
配置慢查询
109+
配置慢查询
92110

93111
![](./res/redis-slow-logs.png)
94112

@@ -98,41 +116,46 @@ vim redis.conf
98116

99117
接下来启动Redis服务器,下面的方式将以默认的配置启动Redis服务。
100118

101-
```Shell
119+
```Bash
102120
redis-server
103121
```
104122

105123
如果希望修改Redis的配置(如端口、认证口令、持久化方式等),可以通过下面两种方式。
106124

107-
方式一:通过参数指定认证口令和AOF持久化方式。
125+
**方式一**:通过参数指定认证口令和AOF持久化方式。
108126

109-
```Shell
127+
```Bash
110128
redis-server --requirepass yourpass --appendonly yes
111129
```
112130

113-
方式二:通过指定的配置文件来修改Redis的配置。
131+
**方式二**:通过指定的配置文件来修改Redis的配置。
114132

115-
```Shell
116-
redis-server /root/redis-5.0.4/redis.conf
133+
```Bash
134+
redis-server /root/redis-5.0.10/redis.conf
117135
```
118136

119137
下面我们使用第一种方式来启动Redis并将其置于后台运行,将Redis产生的输出重定向到名为redis.log的文件中。
120138

121-
```Shell
139+
```Bash
122140
redis-server --requirepass yourpass > redis.log &
123141
```
124142

125-
可以通过ps或者netstat来检查Redis服务器是否启动成功
143+
可以通过`ps`或者`netstat`来检查Redis服务器是否启动成功
126144

127-
```Shell
145+
```Bash
128146
ps -ef | grep redis-server
129147
netstat -nap | grep redis-server
130148
```
131149

132-
接下来,我们尝试用Redis客户端去连接服务器
150+
接下来,我们尝试用Redis命令行工具`redis-cli`去连接服务器,该工具默认连接本机的`6379`端口,如果需要指定Redis服务器和端口,可以使用`-h``-p`参数分别进行指定
133151

134-
```Shell
152+
```Bash
135153
redis-cli
154+
```
155+
156+
进入命令行工具后,就可以通过Redis的命令来操作Redis服务器,如下所示。
157+
158+
```Bash
136159
127.0.0.1:6379> auth yourpass
137160
OK
138161
127.0.0.1:6379> ping
@@ -144,9 +167,9 @@ Redis有着非常丰富的数据类型,也有很多的命令来操作这些数
144167

145168
![](./res/redis-data-types.png)
146169

147-
> **说明**上面的插图来自付磊和张益军先生编著的《Redis开发与运维》一书。
170+
> **说明**上面的插图来自付磊和张益军编著的《Redis开发与运维》一书。
148171
149-
```Shell
172+
```Bash
150173
127.0.0.1:6379> set username admin
151174
OK
152175
127.0.0.1:6379> get username
@@ -251,9 +274,14 @@ OK
251274
2) "xuezq"
252275
3) "zhoujl"
253276
4) "chenyx"
254-
127.0.0.1:6379> geoadd pois 116.39738549206541 39.90862689286386 tiananmen 116.27172936413572 39.99
255-
135172904494 yiheyuan 117.27766503308104 40.65332064313784 gubeishuizhen
256-
(integer) 3
277+
127.0.0.1:6379> zrevrank topsinger zhoujl
278+
(integer) 2
279+
127.0.0.1:6379> geoadd pois 116.39738549206541 39.90862689286386 tiananmen
280+
(integer) 1
281+
127.0.0.1:6379> geoadd pois 116.27172936413572 39.99135172904494 yiheyuan
282+
(integer) 1
283+
127.0.0.1:6379> geoadd pois 117.27766503308104 40.65332064313784 gubeishuizhen
284+
(integer) 1
257285
127.0.0.1:6379> geodist pois tiananmen gubeishuizhen km
258286
"111.5333"
259287
127.0.0.1:6379> geodist pois tiananmen yiheyuan km
@@ -265,28 +293,31 @@ OK
265293

266294
#### 在Python程序中使用Redis
267295

268-
可以使用pip安装redis模块。redis模块的核心是名为Redis的类,该类的对象代表一个Redis客户端,通过该客户端可以向Redis服务器发送命令并获取执行的结果。上面我们在Redis客户端中使用的命令基本上就是Redis对象可以接收的消息,所以如果了解了Redis的命令就可以在Python中玩转Redis。
296+
可以使用pip安装名为`redis`的三方库,该三方库的核心是一个名为`Redis`的类,`Redis`对象代表一个Redis客户端,通过该客户端可以向Redis服务器发送命令并获取执行的结果。上面我们在Redis客户端中使用的命令基本上就是`Redis`对象可以接收的消息,所以如果了解了Redis的命令就可以在Python中玩转Redis。
269297

270-
```Shell
298+
```Bash
271299
pip3 install redis
272-
python3
273300
```
274301

275-
```Python
302+
进入Python交互式环境,使用`redis`三方库来操作Redis。
303+
304+
```Bash
276305
>>> import redis
277-
>>> client = redis.Redis(host='1.2.3.4', port=6379, password='yourpass')
306+
>>>
307+
>>> client = redis.Redis(host='127.0.0.1', port=6379, password='yourpass')
308+
>>>
278309
>>> client.set('username', 'admin')
279310
True
280-
>>> client.hset('student', 'name', 'hao')
311+
>>> client.hset('student', 'name', 'luohao')
281312
1
282-
>>> client.hset('student', 'age', 38)
313+
>>> client.hset('student', 'age', 40)
283314
1
284315
>>> client.keys('*')
285316
[b'username', b'student']
286317
>>> client.get('username')
287318
b'admin'
288319
>>> client.hgetall('student')
289-
{b'name': b'hao', b'age': b'38'}
320+
{b'name': b'luohao', b'age': b'40'}
290321
```
291322

292323
### MongoDB概述
@@ -299,53 +330,60 @@ MongoDB将数据存储为一个文档,一个文档由一系列的“键值对
299330

300331
目前,MongoDB已经提供了对Windows、macOS、Linux、Solaris等多个平台的支持,而且也提供了多种开发语言的驱动程序,Python当然是其中之一。
301332

302-
#### MongoDB的安装和配置
333+
#### MongoDB的安装和启动
303334

304-
可以从MongoDB的[官方下载链接](https://www.mongodb.com/download-center#community)下载MongoDB,官方为Windows系统提供了一个Installer程序,而Linux和MacOS则提供了压缩文件。下面简单说一下Linux系统如何安装和配置MongoDB
335+
可以从MongoDB的[官方下载链接](https://www.mongodb.com/try/download/community)下载MongoDB,官方提供了Windows、macOS和多种Linux版本的安装包。下面以CentOS为例,简单说一下如何安装和启动MongoDB
305336

306-
```Shell
307-
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.6.5.tgz
308-
gunzip mongodb-linux-x86_64-amazon-3.6.5.tgz
309-
mkdir mongodb-3.6.5
310-
tar -xvf mongodb-linux-x86_64-amazon-3.6.5.tar --strip-components 1 -C mongodb-3.6.5/
311-
export PATH=$PATH:~/mongodb-3.6.5/bin
337+
下载服务器和命令行的RPM安装包。
338+
339+
```Bash
340+
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
341+
rpm -ivh mongodb-org-server-4.4.2-1.el7.x86_64.rpm
342+
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
343+
rpm -ivh mongodb-org-shell-4.4.2-1.el7.x86_64.rpm
344+
```
345+
346+
启动MongoDB服务器,需要先创建保存数据的文件夹。
347+
348+
```Bash
312349
mkdir -p /data/db
313-
mongod --bind_ip 172.18.61.250
314-
315-
2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] MongoDB starting : pid=1163 port=27017 dbpath=/data/db 64-bit host=iZwz97tbgo9lkabnat2lo8Z
316-
2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] db version v3.6.5
317-
2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] git version: a20ecd3e3a174162052ff99913bc2ca9a839d618
318-
2018-06-03T18:03:28.232+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.0-fips29 Mar 2010
319-
...
320-
2018-06-03T18:03:28.945+0800 I NETWORK [initandlisten] waiting for connections on port 27017
321350
```
322351

323-
> **说明**:上面的操作中,export命令是设置PATH环境变量,这样可以在任意路径下执行mongod来启动MongoDB服务器。MongoDB默认保存数据的路径是/data/db目录,为此要提前创建该目录。此外,在使用mongod启动MongoDB服务器时,--bind_ip参数用来将服务绑定到指定的IP地址,也可以用--port参数来指定端口,默认端口为27017。
352+
修改MongoDB的配置文件,将其中`bindIp`选项的值修改为本机IP地址而不是默认的`127.0.0.1`,本机IP地址可以通过`ifconfig`命令进行查看。
353+
354+
```Bash
355+
vim /etc/mongod.conf
356+
```
357+
358+
使用`systemctl`命令启动服务。
359+
360+
```Bash
361+
systemctl start mongod
362+
```
324363

325364
#### MongoDB基本概念
326365

327-
我们通过与关系型数据库进行对照的方式来说明MongoDB中的一些概念
366+
我们通过与关系型数据库的比较来说明MongoDB中的一些概念
328367

329-
| SQL | MongoDB | 解释(SQL/MongoDB |
330-
| ----------- | ----------- | ---------------------- |
331-
| database | database | 数据库/数据库 |
332-
| table | collection | 二维表/集合 |
333-
| row | document | 记录(行)/文档 |
334-
| column | field | 字段(列)/域 |
335-
| index | index | 索引/索引 |
336-
| table joins | --- | 表连接/嵌套文档 |
337-
| primary key | primary key | 主键/主键(`_id`字段) |
368+
| SQL | MongoDB |
369+
| --------------------- | ------------------ |
370+
| database | database |
371+
| table(表) | collection(集合) |
372+
| row(行) | document(文档) |
373+
| column(列) | field(字段) |
374+
| index | index |
375+
| table joins(表连接) | 嵌套文档 |
376+
| primary key | primary key |
338377

339378
#### 通过Shell操作MongoDB
340379

341-
启动服务器后可以使用交互式环境跟服务器通信,如下所示
380+
0. 启动命令行工具,进入交互式环境
342381

343-
```shell
344-
mongo --host 172.18.61.250
382+
```Bash
383+
mongo
384+
```
345385

346-
MongoDB shell version v3.6.5
347-
connecting to: mongodb://172.18.61.250:27017/
348-
```
386+
> **说明**
349387

350388
1. 查看、创建和删除数据库。
351389

@@ -361,7 +399,6 @@ connecting to: mongodb://172.18.61.250:27017/
361399
> // 删除当前数据库
362400
> db.dropDatabase()
363401
{ "ok" : 1 }
364-
>
365402
```
366403
367404
2. 创建、删除和查看集合。
@@ -383,16 +420,15 @@ connecting to: mongodb://172.18.61.250:27017/
383420
> // 删除colleges集合
384421
> db.colleges.drop()
385422
true
386-
>
387423
```
388424
389-
> 说明:在MongoDB中插入文档时如果集合不存在会自动创建集合,所以也可以按照下面的方式通过创建文档来创建集合
425+
> **说明**:在MongoDB中插入文档时如果集合不存在会自动创建集合,所以也可以按照下面的方式通过插入文档来创建集合
390426
391427
3. 文档的CRUD操作。
392428
393429
```JavaScript
394430
> // 向students集合插入文档
395-
> db.students.insert({stuid: 1001, name: '骆昊', age: 38})
431+
> db.students.insert({stuid: 1001, name: '骆昊', age: 40})
396432
WriteResult({ "nInserted" : 1 })
397433
> // 向students集合插入文档
398434
> db.students.save({stuid: 1002, name: '王大锤', tel: '13012345678', gender: ''})
@@ -482,22 +518,23 @@ connecting to: mongodb://172.18.61.250:27017/
482518
"numIndexesAfter" : 2,
483519
"ok" : 1
484520
}
485-
>
486521
```
487522
488523
使用MongoDB可以非常方便的配置数据复制,通过冗余数据来实现数据的高可用以及灾难恢复,也可以通过数据分片来应对数据量迅速增长的需求。关于MongoDB更多的操作可以查阅[官方文档](https://mongodb-documentation.readthedocs.io/en/latest/) ,同时推荐大家阅读Kristina Chodorow写的[《MongoDB权威指南》](http://www.ituring.com.cn/book/1172)。
489524
490525
#### 在Python程序中操作MongoDB
491526
492-
可以通过pip安装pymongo来实现对MongoDB的操作
527+
可以通过pip安装`pymongo`来实现对MongoDB的操作
493528
494529
```Shell
495-
pip3 install pymongo
496-
python3
530+
pip install pymongo
497531
```
498532
533+
进入Python交互式环境,就可以执行以下的操作。
534+
499535
```Python
500536
>>> from pymongo import MongoClient
537+
>>>
501538
>>> client = MongoClient('mongodb://127.0.0.1:27017')
502539
>>> db = client.school
503540
>>> for student in db.students.find():
@@ -520,8 +557,9 @@ python3
520557
{'n': 3, 'ok': 1.0}
521558
>>> db.students.find().count()
522559
0
523-
>>> coll = db.students
524560
>>> from pymongo import ASCENDING
561+
>>>
562+
>>> coll = db.students
525563
>>> coll.create_index([('name', ASCENDING)], unique=True)
526564
'name_1'
527565
>>> coll.insert_one({'stuid': int(1001), 'name': '骆昊', 'gender': True})
@@ -539,7 +577,6 @@ python3
539577
学号: 1003
540578
姓名: 白元芳
541579
性别: 男
542-
>>>
543580
```
544581
545-
关于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/>)都是不错的选择。
582+
关于[`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/>)都是不错的选择。

0 commit comments

Comments
 (0)