Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mengzyou
Python-100-Days
提交
6a639f0d
P
Python-100-Days
项目概览
mengzyou
/
Python-100-Days
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Python-100-Days
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6a639f0d
编写于
3月 13, 2021
作者:
J
jackfrued
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新了第93天的文档
上级
4e091d9b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
41 addition
and
3 deletion
+41
-3
Day61-65/code/image360/image360/middlewares.py
Day61-65/code/image360/image360/middlewares.py
+8
-3
Day91-100/93.MySQL性能优化.md
Day91-100/93.MySQL性能优化.md
+33
-0
未找到文件。
Day61-65/code/image360/image360/middlewares.py
浏览文件 @
6a639f0d
...
...
@@ -112,11 +112,15 @@ class TaobaoDownloaderMiddleWare(object):
def
__init__
(
self
,
timeout
=
None
):
self
.
timeout
=
timeout
# options = webdriver.ChromeOptions()
# options.add_argument('headless')
# options.add_argument('
--
headless')
# self.browser = webdriver.Chrome(options=options)
self
.
browser
=
webdriver
.
Chrome
()
options
=
webdriver
.
ChromeOptions
()
options
.
add_argument
(
'--headless'
)
self
.
browser
=
webdriver
.
Chrome
(
options
)
self
.
browser
.
set_window_size
(
1000
,
600
)
self
.
browser
.
set_page_load_timeout
(
self
.
timeout
)
self
.
browser
.
implicitly_wait
(
10
)
# self.browser.add_cookie({})
# self.browser.set_page_load_timeout(self.timeout)
def
__del__
(
self
):
self
.
browser
.
close
()
...
...
@@ -124,6 +128,7 @@ class TaobaoDownloaderMiddleWare(object):
def
process_request
(
self
,
request
,
spider
):
try
:
self
.
browser
.
get
(
request
.
url
)
# Chrome对象的page_source代表了页面的HTML代码(带动态内容)
return
HtmlResponse
(
url
=
request
.
url
,
body
=
self
.
browser
.
page_source
,
request
=
request
,
encoding
=
'utf-8'
,
status
=
200
)
except
TimeoutException
:
...
...
Day91-100/93.MySQL性能优化.md
浏览文件 @
6a639f0d
## MySQL性能优化
### 基本原则
想要发挥 MySQL 的最佳性能,需要遵循 3 个基本使用原则。
1.
让MySQL回归存储的基本职能:MySQL 数据库只用于数据的存储,不进行数据的复杂计算,不承载业务逻辑,确保存储和计算分离;
2.
查询数据时,尽量单表查询,减少跨库查询和多表关联;
3.
杜绝大事务、大 SQL、大批量、大字段等一系列性能杀手。
-
大事务:运行步骤较多,涉及的表和字段较多,容易造成资源的争抢,甚至形成死锁。一旦事务回滚,会导致资源占用时间过长。
-
大 SQL:复杂的SQL意味着过多的表的关联,MySQL 数据库处理关联超过3张表以上的SQL时,占用资源多,性能低下。
-
大批量:多条SQL一次性执行完成,可以减少一条条执行SQL产生的额外开销,但必须确保进行充分的测试,并且在业务低峰时段或者非业务时段执行。
-
大字段:blob、text类型的大字段要尽量少用,必须要用时,尽量与主业务表分离,减少对这类字段的检索和更新。
### 建库建表
1.
必须指定默认存储引擎为 InnoDB,并且禁用 MyISAM 存储引擎,随着 MySQL 8.0 版本的发布,所有的数据字典表都已经转换成了 InnoDB,MyISAM 存储引擎已成为了历史。
2.
默认字符集 UTF8mb4,以前版本的 UTF8 是 UTF8mb3,未包含个别特殊字符,新版本的 UTF8mb4 包含所有字符,官方强烈建议使用此字符集。
3.
关闭区分大小写功能。设置参数
`lower_case_table_names`
的值为
`1`
,即可关闭区分大小写功能,即大写字母 T 和小写字母 t 一样。
4.
存储过程、触发器、视图、event等功能尽量在程序中实现,一方面是为了存储和计算分离,另一方面是因为这些功能非常不完整,调试、排错、监控都非常困难,相关数据字典也不完善,存在潜在的风险。一般在生产数据库中,禁止使用。
5.
单个数据库实例表数量控制在2000个以内。
#### InnoDB表的注意事项
1.
主键列使用
`unsigned`
整数,可以使用
`auto_increment`
,但是要禁止手动更新主键。
2.
每个列都必须添加
`comment`
注释。
3.
在建表时必须显示指定
`engine`
。
4.
表必备三字段:
`xxx_id`
、
`xxx_create`
、
`xxx_modified`
。其中
`xxx_id`
为主键,类型
`unsigned`
整数类型(例如:
`int unsigned`
);
`xxx_create`
、
`xxx_modified`
的类型均为
`datetime`
类型,分别记录该条数据的创建时间、修改时间。
5.
所有字段必须指定
`not null`
,为空值指定
`default`
值,因为MySQL难以优化
`null`
值,含
`null`
值的复合索引会失效,最终导致查询效率低。
6.
单张表的字段数尽量空值在50个字段以内,如果字段过多可以考虑垂直拆分。
7.
禁用
`enum`
和
`set`
类型,因为这样的类型兼容性不好且性能较差。
8.
大文件不应该使用
`blob`
类型而是保存它们的路径,
`blob`
和
`text`
这样的类型会导致处理性能下降,全表扫描代价大大增加。
9.
对货币等对精度敏感的数据,应该使用定点数(
`decimal`
)而不是浮点数(
`float`
)。
10.
保存IP地址不要用
`char(15)`
,应该使用
`int unsigned`
,可以使用
`inet_aton`
和
`inet_ntoa`
函数实现整数和IP地址的转换。
### 使用索引
在前面
[
《关系型数据库MySQL》
](
../Day36-40/36-38.关系型数据库MySQL.md
)
一文中,我们已经讲到过索引的相关知识,这里我们做一个简单的回顾。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录