File tree 2 files changed +41
-3
lines changed
Day61-65/code/image360/image360 2 files changed +41
-3
lines changed Original file line number Diff line number Diff line change @@ -112,18 +112,23 @@ class TaobaoDownloaderMiddleWare(object):
112
112
def __init__ (self , timeout = None ):
113
113
self .timeout = timeout
114
114
# options = webdriver.ChromeOptions()
115
- # options.add_argument('headless')
115
+ # options.add_argument('-- headless')
116
116
# self.browser = webdriver.Chrome(options=options)
117
- self .browser = webdriver .Chrome ()
117
+ options = webdriver .ChromeOptions ()
118
+ options .add_argument ('--headless' )
119
+ self .browser = webdriver .Chrome (options )
118
120
self .browser .set_window_size (1000 , 600 )
119
- self .browser .set_page_load_timeout (self .timeout )
121
+ self .browser .implicitly_wait (10 )
122
+ # self.browser.add_cookie({})
123
+ # self.browser.set_page_load_timeout(self.timeout)
120
124
121
125
def __del__ (self ):
122
126
self .browser .close ()
123
127
124
128
def process_request (self , request , spider ):
125
129
try :
126
130
self .browser .get (request .url )
131
+ # Chrome对象的page_source代表了页面的HTML代码(带动态内容)
127
132
return HtmlResponse (url = request .url , body = self .browser .page_source ,
128
133
request = request , encoding = 'utf-8' , status = 200 )
129
134
except TimeoutException :
Original file line number Diff line number Diff line change 1
1
## MySQL性能优化
2
2
3
+ ### 基本原则
4
+
5
+ 想要发挥 MySQL 的最佳性能,需要遵循 3 个基本使用原则。
6
+
7
+ 1 . 让MySQL回归存储的基本职能:MySQL 数据库只用于数据的存储,不进行数据的复杂计算,不承载业务逻辑,确保存储和计算分离;
8
+ 2 . 查询数据时,尽量单表查询,减少跨库查询和多表关联;
9
+ 3 . 杜绝大事务、大 SQL、大批量、大字段等一系列性能杀手。
10
+ - 大事务:运行步骤较多,涉及的表和字段较多,容易造成资源的争抢,甚至形成死锁。一旦事务回滚,会导致资源占用时间过长。
11
+ - 大 SQL:复杂的SQL意味着过多的表的关联,MySQL 数据库处理关联超过3张表以上的SQL时,占用资源多,性能低下。
12
+ - 大批量:多条SQL一次性执行完成,可以减少一条条执行SQL产生的额外开销,但必须确保进行充分的测试,并且在业务低峰时段或者非业务时段执行。
13
+ - 大字段:blob、text类型的大字段要尽量少用,必须要用时,尽量与主业务表分离,减少对这类字段的检索和更新。
14
+
15
+ ### 建库建表
16
+
17
+ 1 . 必须指定默认存储引擎为 InnoDB,并且禁用 MyISAM 存储引擎,随着 MySQL 8.0 版本的发布,所有的数据字典表都已经转换成了 InnoDB,MyISAM 存储引擎已成为了历史。
18
+ 2 . 默认字符集 UTF8mb4,以前版本的 UTF8 是 UTF8mb3,未包含个别特殊字符,新版本的 UTF8mb4 包含所有字符,官方强烈建议使用此字符集。
19
+ 3 . 关闭区分大小写功能。设置参数` lower_case_table_names ` 的值为` 1 ` ,即可关闭区分大小写功能,即大写字母 T 和小写字母 t 一样。
20
+ 4 . 存储过程、触发器、视图、event等功能尽量在程序中实现,一方面是为了存储和计算分离,另一方面是因为这些功能非常不完整,调试、排错、监控都非常困难,相关数据字典也不完善,存在潜在的风险。一般在生产数据库中,禁止使用。
21
+ 5 . 单个数据库实例表数量控制在2000个以内。
22
+
23
+ #### InnoDB表的注意事项
24
+
25
+ 1 . 主键列使用` unsigned ` 整数,可以使用` auto_increment ` ,但是要禁止手动更新主键。
26
+ 2 . 每个列都必须添加` comment ` 注释。
27
+ 3 . 在建表时必须显示指定` engine ` 。
28
+ 4 . 表必备三字段:` xxx_id ` 、 ` xxx_create ` 、 ` xxx_modified ` 。其中` xxx_id ` 为主键,类型` unsigned ` 整数类型(例如:` int unsigned ` );` xxx_create ` 、` xxx_modified ` 的类型均为` datetime ` 类型,分别记录该条数据的创建时间、修改时间。
29
+ 5 . 所有字段必须指定` not null ` ,为空值指定` default ` 值,因为MySQL难以优化` null ` 值,含` null ` 值的复合索引会失效,最终导致查询效率低。
30
+ 6 . 单张表的字段数尽量空值在50个字段以内,如果字段过多可以考虑垂直拆分。
31
+ 7 . 禁用` enum ` 和` set ` 类型,因为这样的类型兼容性不好且性能较差。
32
+ 8 . 大文件不应该使用` blob ` 类型而是保存它们的路径,` blob ` 和` text ` 这样的类型会导致处理性能下降,全表扫描代价大大增加。
33
+ 9 . 对货币等对精度敏感的数据,应该使用定点数(` decimal ` )而不是浮点数(` float ` )。
34
+ 10 . 保存IP地址不要用` char(15) ` ,应该使用` int unsigned ` ,可以使用` inet_aton ` 和` inet_ntoa ` 函数实现整数和IP地址的转换。
35
+
3
36
### 使用索引
4
37
5
38
在前面[ 《关系型数据库MySQL》] ( ../Day36-40/36-38.关系型数据库MySQL.md ) 一文中,我们已经讲到过索引的相关知识,这里我们做一个简单的回顾。
You can’t perform that action at this time.
0 commit comments