數(shù)據(jù)庫:
數(shù)據(jù)庫優(yōu)化
1.符合三范式
2.建立索引凌摄,單表不超過五個
3.sql優(yōu)化
4.加緩存
5.歷史數(shù)據(jù)遷移,把長期不用的數(shù)據(jù)放到mongodb中
6.讀寫分離
7.分庫分表
8.分布式
sql優(yōu)化
1.查詢中不要使用*
2.盡量使用關聯(lián)查詢代替子查詢
3.先查大表在查小表
4.減少使用in,lnot,in,or,!=,<>
5.update語句,如果只跟新一兩個字段糕再,不要update全部字段淹真,否則頻繁調(diào)用會引起頻繁的性能消耗检激,也會產(chǎn)生大量日志信息
關系型數(shù)據(jù)庫和非關系型數(shù)據(jù)庫
常用的:
關系型:MySQL,SQL Server ,Oracle
非關系型:Redis,MongoDB
關系型數(shù)據(jù)庫最典型的數(shù)據(jù)結(jié)構(gòu)是表巍扛,由二維表及其之間的聯(lián)系所組成的一個數(shù)據(jù)組織
關系型
優(yōu)點:
1.易于維護,都使用表結(jié)構(gòu)乏德,格式一致
2.使用方便撤奸,sql語句通用
3.支持復雜查詢
缺點:
1.讀寫性能查,尤其是海量數(shù)據(jù)的高效讀寫
2.表結(jié)構(gòu)固定喊括,靈活性欠缺
3.高并發(fā)讀寫時胧瓜,硬盤I/O是很大的瓶頸
非關系型
非關系型數(shù)據(jù)庫嚴格上不是一種數(shù)據(jù)庫,是數(shù)據(jù)結(jié)構(gòu)化存儲方法的集合郑什,可以是文檔或鍵值對
優(yōu)點:
1.格式靈活:可以使鍵值對府喳,文檔,圖片等
2.速度快:可以使用硬盤使用硬盤或隨機存儲器作為載體蘑拯,關系型數(shù)據(jù)庫只能使用硬盤
3.高擴展性
4.基本都是開源軟件钝满,成本低
缺點:
1.不提供sql支持,學習和使用成本較高
2.無事務處理
3.數(shù)據(jù)結(jié)構(gòu)相對復雜申窘,復雜查詢方面稍欠
mongodb和redis的區(qū)別
1.內(nèi)存管理:
redis數(shù)據(jù)全部存在內(nèi)存弯蚜,定期寫入磁盤
mongodb數(shù)據(jù)存在內(nèi)存,當內(nèi)存不夠是剃法,只將主要數(shù)據(jù)放入內(nèi)存碎捺,其他數(shù)據(jù)存在磁盤
2.支持數(shù)據(jù)結(jié)構(gòu):
redis支持的數(shù)據(jù)結(jié)構(gòu)豐富,包括hash,set,list等
mongodb數(shù)據(jù)存在內(nèi)存,當內(nèi)存不夠時收厨,只將主要數(shù)據(jù)放入內(nèi)存晋柱,其他數(shù)據(jù)存在磁盤
3.事務:
redis事務支持比較弱,只能保證事務中的每個操作連續(xù)執(zhí)行
mongoDB不支持事務
5.使用場景:
redis:秒殺诵叁,緩存雁竞,熱門搜索,二級菜單
mongoDB:日志黎休,通知浓领,推送(數(shù)據(jù)不是很重要,或表結(jié)構(gòu)變化頻繁势腮,或數(shù)據(jù)量大時)
MySQL如何支持事務联贩?
用begin,rollback捎拯,commit來實現(xiàn)
begin開始一個事務
rollback事務回滾
commit 事務確認
orm框架
通過對象和數(shù)據(jù)庫之間的映射泪幌,將二者聯(lián)系起來,使面向?qū)ο笈c關系數(shù)據(jù)庫互相匹配
MySQL索引類型:
1.普通索引
2.唯一索引:索引列的值必須唯一署照,但允許有空值祸泪。如果是組合索引,則列值的組合必須唯一
3.主鍵索引:是一種特殊的唯一索引建芙,一個表只能有一個主鍵没隘,不允許有空值。一般是在建表的時候同時創(chuàng)建主鍵索引
4.全文索引
常用的mysql引擎有哪些禁荸?各引擎間有什么區(qū)別右蒲?
主要MyISAM與InnoDB兩個引擎,其主要區(qū)別如下:
1.InnoDB支持事務赶熟,MyISAM不支持瑰妄,這一點是非常之重要。事務是一種高級的處理方式映砖,如在一些列增刪改中只要那個出錯還可以回滾還原间坐,而MyISAM就不可以了
2.InnoDB支持外鍵,MyISAM不支持
3.MyISAM是默認引擎邑退,InnoDB需要指定
解決高并發(fā)
1.頁面靜態(tài)化
2.前端攔截竹宋,ip限制
3.圖片服務器分離
4.緩存
5.數(shù)據(jù)庫集群
爬蟲
scrapy數(shù)據(jù)流是由執(zhí)行的核心引擎控制的,流程如下:
1.爬蟲引擎或缺初始請求開始抓取
2.爬蟲引擎開始請求調(diào)度程序地技,并準備對下一次的請求進行抓取
3.爬蟲調(diào)度器返回下一個請求給爬蟲引擎
4.引擎將請求發(fā)送給下載器逝撬,下載器中間件下載網(wǎng)絡數(shù)據(jù)
5.一旦下載器完成頁面下載,將下載結(jié)果返回給引擎
6.引擎將下載器的響應通過中間件返回給爬蟲進行處理
7.爬蟲處理響應乓土,并通過中間件返回處理后的items宪潮,以及新的請求給引擎
8.引擎發(fā)送處理后的items到項目管道溯警,然后把處理結(jié)果返回給調(diào)度器,調(diào)度器計劃處理下一個請求抓取
9.重復該過程狡相,直到爬取完所有的url請求