教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Python爬取數(shù)據(jù)后使用哪個數(shù)據(jù)庫存儲數(shù)據(jù)比較好?

更新時間:2021年05月21日18時22分 來源:傳智教育 瀏覽次數(shù):

一般爬蟲使用的數(shù)據(jù)庫,是根據(jù)項目來定的。如需求方指定了使用什么數(shù)據(jù)庫、如果沒指定,那么決定權就在爬蟲程序員手里,如果自選的話,mysql 和mongodb 用的都是比較多的。但不同的數(shù)據(jù)庫品種有各自的優(yōu)缺點,不同的場景任何一種數(shù)據(jù)庫都可以用來存儲,但是某種可能會更好。比如如果抓取的數(shù)據(jù)之間的耦合性很高,關系比較復雜的話,那么mysql可能會是更好的選擇。如果抓取的數(shù)據(jù)是分版塊的,并且它們之間沒有相似性或關聯(lián)性不強,那么可能mongodb 會更好。

另外主流的幾種永久存儲數(shù)據(jù)庫,都是具備處理高并發(fā)、具備存儲大量數(shù)據(jù)的能力的,只是由于各自的實現(xiàn)機制不一樣,因此優(yōu)化方案也是不盡相同??偨Y就是:數(shù)據(jù)庫的選擇盡量從項目的數(shù)據(jù)存在的特性來考慮,還有一個問題就是開發(fā)人員最擅長那種數(shù)據(jù)庫。

MongoDB 是使用比較多的數(shù)據(jù)庫,這里以MongoDB 為例,大家需要結合自己真實開發(fā)環(huán)境選擇。

原因:


1)與關系型數(shù)據(jù)庫相比,MongoDB 的優(yōu)點如下。

①弱一致性(最終一致),更能保證用戶的訪問速度舉例來說,在傳統(tǒng)的關系型數(shù)據(jù)庫中,一個COUNT類型的操作會鎖定數(shù)據(jù)集,這樣可以保證得到“當前”情況下的較精確值。這在某些情況下,例如通過ATM查看賬戶信息的時候很重要,但對于Wordnik說,數(shù)據(jù)是不斷更新和增長的,這種“較精確”的保證幾乎沒有任何意義,反而會產(chǎn)生很大的延 遲。他們需要的是一個“大約”的數(shù)字以及更快的處理速度。但某些情況下MongoDB 會鎖住數(shù)據(jù)庫。如果此時正有數(shù)百個請求,則它們會堆積起來,造成許多問題。我們使用了下面的優(yōu)化方式來避免鎖定。每次更新前,我們會先查詢記錄。查詢操作會將對象放入內(nèi)存,于是更新則會盡可能的迅速。在主/從部署方案中,從節(jié)點可以使用“-pretouch”參數(shù)運行,這也可以得到相同的效果。使用多個mongod 進程。我們根據(jù)訪問模式將數(shù)據(jù)庫拆分成多個進程。

②文檔結構的存儲方式,能夠更便捷的獲取數(shù)據(jù)。

對于一個層級式的數(shù)據(jù)結構來說,如果要將這樣的數(shù)據(jù)使用扁平式的,表狀的結構來保存數(shù)據(jù),這無論是在查詢還是獲取數(shù)據(jù)時都十分困難。

③內(nèi)置GridFS,支持大容量的存儲。

GridFS 是一個出色的分布式文件系統(tǒng),可以支持海量的數(shù)據(jù)存儲。內(nèi)置了GridFS 了MongoDB,能夠滿足對大數(shù)據(jù)集的快速范圍查詢。

④內(nèi)置Sharding。

提供基于Range 的Auto Sharding 機制:一個collection 可按照記錄的范圍,分成若干個段,切分到不同的Shard 上。Shards 可以和復制結合,配合Replica sets 能夠?qū)崿F(xiàn)Sharding+fail-over,不同的Shard 之間可以負載均衡。查詢是對 客戶端是透明的??蛻舳藞?zhí)行查詢,統(tǒng)計,MapReduce等操作,這些會被MongoDB 自動路由到后端的數(shù)據(jù)節(jié)點。這讓我們關注于自己的業(yè)務,適當?shù)臅r候可以無痛的升級。MongoDB 的Sharding 設計能力較大可支持約20 petabytes,足以支撐一般應用。

這可以保證MongoDB 運行在便宜的PC 服務器集群上。PC 集群擴充起來非常方便并且成本很低,避免了“sharding”操作的復雜性和成本。

⑤第三方支持豐富。(這是與其他的NoSQL 相比,MongoDB 也具有的優(yōu)勢)

現(xiàn)在網(wǎng)絡上的很多NoSQL 開源數(shù)據(jù)庫完全屬于社區(qū)型的,沒有官方支持,給使用者帶來了很大的風險。而開源文檔數(shù)據(jù)庫MongoDB 背后有商業(yè)公司10gen 為其提供供商業(yè)培訓和支持。

而且MongoDB 社區(qū)非常活躍,很多開發(fā)框架都迅速提供了對MongDB 的支持。不少知名大公司和網(wǎng)站也在生產(chǎn)環(huán)境中使用MongoDB,越來越多的創(chuàng)新型企業(yè)轉而使用MongoDB 作為和Django,RoR 來搭配的技術方案。

⑥性能優(yōu)越

在使用場合下,千萬級別的文檔對象,近10G 的數(shù)據(jù),對有索引的ID的查詢不會比mysql慢,而對非索引字段的查詢,則是全面勝出。mysql實際無法勝任大數(shù)據(jù)量下任意字段的查詢,而mongodb的查詢性能實在讓我驚訝。寫入性能同樣很令人滿意,同樣寫入百萬級別的數(shù)據(jù),mongodb 比我以前試用過的couchdb要快得多,基本10分鐘以下可以解決。補上一句,觀察過程中mongodb 都遠算不上是CPU殺手。


2)Mongodb與redis相比較

①mongodb 文件存儲是BSON 格式類似JSON,或自定義的二進制格式。

mongodb 與redis 性能都很依賴內(nèi)存的大小,mongodb 有豐富的數(shù)據(jù)表達、索引;最類似于關系數(shù)據(jù)庫,支持豐富的查詢語言,redis數(shù)據(jù)豐富,較少的IO,這方面mongodb優(yōu)勢明顯。

②mongodb 不支持事物,靠客戶端自身保證,redis 支持事物,比較弱,僅能保證事物中的操作按順序執(zhí)行,這方面 redis 優(yōu)于mongodb。

③mongodb 對海量數(shù)據(jù)的訪問效率提升,redis 較小數(shù)據(jù)量的性能及運算,這方面 mongodb性能優(yōu)于redis .monbgodb 有mapredurce 功能,提供數(shù)據(jù)分析,redis沒有,這方面 mongodb優(yōu)于redis。





Python興趣課程,0基礎Python 3天入門課程

   ·了解Python主流就業(yè)方向,把握最新熱點技術
   ·掌握Python的基礎語法及API調(diào)用
   ·能夠使用Python對數(shù)據(jù)獲取、使用和展示
   ·打造自己的數(shù)據(jù)分析項目并自動生成工作報告

Python零基礎3天課程


0 分享到:
和我們在線交談!