更新時間:2020年12月11日14時00分 來源:傳智教育 瀏覽次數(shù):
python爬蟲用什么數(shù)據(jù)庫好?爬蟲適合使用Mysql還是Mongdb?我們從Mysql、Mongdb各自特點和關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫的特點來分析。
MySQL屬于關系型數(shù)據(jù)庫,它具有以下特點
·在不同的引擎上有不同的存儲方式。
·查詢語句是使用傳統(tǒng)的sql語句,擁有較為成熟的體系,成熟度很高。
·開源數(shù)據(jù)庫的份額在不斷增加,MySQL的份額也在持續(xù)增長。
·處理海量數(shù)據(jù)的效率會顯著變慢。
Mongodb屬于非關系型數(shù)據(jù)庫,它具有以下特點:
·數(shù)據(jù)結構由鍵值對組成。
·存儲方式:虛擬內(nèi)存+持久化。
·查詢語句是獨特的Mongodb的查詢方式。
·可以通過副本集、分片來實現(xiàn)高可用。
·數(shù)據(jù)是存儲在硬盤上的,只不過需要經(jīng)常讀取的數(shù)據(jù)會被加載到內(nèi)存中,將數(shù)據(jù)存儲在物理內(nèi)存中,從而達到高速讀寫。
·新興數(shù)據(jù)庫,成熟度較低。
關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫特點
關系型數(shù)據(jù)庫可以理解為依賴一個模型來創(chuàng)建的數(shù)據(jù)庫,比如我們使用的MySQL中的表是由橫列和縱列組成的一個二維表格。關系型數(shù)據(jù)庫可以通過關系模型使多個表的數(shù)據(jù)關聯(lián)起來,比如我們平時說的 一對一、一對多、多對一。由于是建立在數(shù)據(jù)模型的基礎上,所以我們可以通過SQL語句很方便的在多個表之間做復雜的查詢操作。關系型數(shù)據(jù)庫相對安全,因為直接存儲在硬盤中所以突然的宕機、停電等意外不會導致數(shù)據(jù)丟失。MySQL的存儲方式是由自身的引擎決定的,常用的引擎有Innodb和MyISAM。他們主要的區(qū)別就是MyISAM 不支持事務,強調(diào)的是性能,執(zhí)行速度比Innodb要快,Innodb提供支持事務等高級數(shù)據(jù)庫功能。
非關系型數(shù)據(jù)庫即我們常說的NoSQL數(shù)據(jù)庫,部署起來都比較簡單,沒有關系型數(shù)據(jù)庫那么復雜。Mongo的存儲方式為虛擬內(nèi)存+持久化存儲,Mongo將數(shù)據(jù)寫入內(nèi)存中,再由虛擬內(nèi)存管理器將其持久化到硬盤中,因此寫操作會比關系型數(shù)據(jù)庫快很多。NOSQL的存儲格式是key-value形式,可以像關系型數(shù)據(jù)庫那樣存儲基礎數(shù)據(jù)類型的數(shù)據(jù),也可以存儲集合、對象等等。NoSQL雖然性能比較高,但是并不支持事物,也不能進行聯(lián)表查詢,一般用于較大規(guī)模數(shù)據(jù)的存儲。
爬蟲適合使用Mysql還是Mongdb?
建議用MongoDB,理由是:因為你用爬蟲,不光是要把網(wǎng)頁抓下來,重要的是,要把抓取的網(wǎng)頁中的信息提取出來,保存到數(shù)據(jù)庫中。而如果未來的字段會發(fā)生變化(增加、刪除、修改),那么用MongoDB這種鍵值數(shù)據(jù)庫是再合適不過了,因為,你插入到數(shù)據(jù)庫中的每條記錄中都同時包含著數(shù)據(jù)的的“鍵”和“值”,新數(shù)據(jù)使用新的格式保存,而舊數(shù)據(jù)使用舊的格式保存,你不需要做任何的操作就可以保持數(shù)據(jù)格式的一致性。反之,如果你用SQL類數(shù)據(jù)庫的話,你就必須修改數(shù)據(jù)庫的格式,還要保證舊數(shù)據(jù)在新格式下的可用性,而這往往是非常麻煩的。
猜你喜歡:
關系數(shù)據(jù)庫和非關系型數(shù)據(jù)庫詳解