首頁  >  問答  >  主體

python - 对爬虫抓取的数据进行分析该用MySQL还是mogodb?

PHP中文网PHP中文网2741 天前645

全部回覆(7)我來回復

  • 高洛峰

    高洛峰2017-04-18 10:03:31

    修正一下拼寫,應該是MongoDB。
    每種資料庫都有自己的優點和不足,適用的場合也不一樣。既然我是站在MongoDB這邊的,上面也有人提到了MySQL和HDFS,我就分析一下MongoDB比MySQL和HDFS在資料分析上的優勢。題主不妨看看這些優勢是不是你想要的,再根據自己專案的實際狀況來做決定。
    MySQL是老牌的RDBMS,具備RDBMS的常見特性,對ACID有完善的支援。其技術經過長時間的沉澱和應用考驗,已經在一個比較穩定應用的階段。 RDBMS在實際應用上的對NoSQL的主要優點就是強事務。但在一個OLAP的應用上,強事務沒有太多用武之地,卻阻礙了分散式支援。在充分發展的前提下,最終水平擴展會成為你選擇MySQL的主要瓶頸。另外對於爬蟲這樣的應用,爬取的通常都是非結構化數據,這在關係模型的儲存和查詢上面都有很大的限制。但也有一個可能性是你感興趣的網站都是同類型的網站,你只對網頁上的特定內容有興趣,這樣可以把它們組織成結構化數據,從而在這方面MySQL仍然是可以勝任的。但就算這樣,隨著應用程式的發展將來在資料儲存的彈性上仍然會有所犧牲。所以對爬蟲這樣的應用,MySQL的主要問題是資料模型不夠靈活和無法(或者說比較難)水平擴展。
    就上面主要的兩個問題而言,HDFS其實都可以勝任。所以HDFS在爬蟲這樣的應用上面較MySQL是有優勢的。同樣MongoDB也很好地解決了這兩個問題。那麼MongoDB對比HDFS的優勢在什麼地方?很重要的一點來自於MongoDB可以像關聯式資料庫一樣對文件中的任何一個欄位建立二級索引,從而在分析過程中可能盡可能大地利用索引帶來的效能優勢。另外,HDFS提供的更像一個檔案系統,而MongoDB提供的則是一個靈活的資料庫技術,在MongoDB上可以輕易地實現地理位置分佈,過期文檔歸檔等操作。
    從生態系上,HDFS的周邊工具肯定要豐富一些,畢竟發展歷史放在那裡。而MongoDB目前主要支援的則有:

    • BI Connector:MongoDB對外提供PostgreSQL或MySQL介面以利用現有的BI工具

    • Spark Connector:MongoDB與Spark對接進行計算

    回到你的問題,效率上面平心而論百萬到千萬級別不算大,無論使用哪個數據庫,在正確使用的前提下性能差異不會有質上的區別。可用性問題上MongoDB的高可用可以達到秒級的錯誤復原。 MySQL也有對應的方案,只是在維上可能要複雜一些。安全性上面各家沒有太大的差別。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:03:31

    MySQL 在處理大量資料時會變得很捉急,相反 MongoDB 通過叢集的話應該會好一些。

    其實你完全可以不用資料庫,對於爬蟲而言這將有可能成為 IO 的瓶頸。

    你可以嘗試使用 Hadoop 的 HDFS。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:03:31

    你應該會選擇Hadoop作為處理平台,這樣子的話底層資料儲存一般都是用MySQL的.mangodb+hadoop的組合做即時監控比較好,例如春晚直播時候的彈幕,因為mongodb支援毫秒級的資料查詢,即時分析。 hadoop一次寫入多次取用,加上MySQL的話比較適合你這個專案。安全其實都差不多。關鍵防火牆做好安全就ok了,畢竟你們的資料庫是隔離的。所以我建議可以選擇MySQL。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:03:31

    我們現在準備寫一個爬蟲抓取大量資料(預測後期可能會達到兩百萬到兩千萬記錄的數量級)

    如果只是這點資料, MySQL 或 MongoDB 都可以. 但相對來說, MongoDB 會靈活一些.

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:03:31

    200w到2000w的資料量相對來說不是很大,可以考慮這2中自己比較熟悉那個就使用那個。但基本上資料庫達到千萬等級都會有查詢效能的問題,所以如果資料持續成長的話,可以考慮用mongodb。畢竟mongodb分片集群搭建起來比mysql集群簡單多了。而且處理起來更靈活。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:03:31

    1. 200-2000w的資料量沒有必要上hadoop,除非你們團隊對hadoop的技術棧很熟悉;

    2. 從效能角度來看,這個量級的資料對於MySQL和mongoDB都可以勝任,關鍵看你的資料是結構化的還是非結構化的,相對而言mongo更靈活點

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:03:31

    剛好現在所在公司做過這方面的東西,並且也是本人負責,可以說出來給題主參考一下。
    我這邊主要做的是日誌處理和歸檔,對每天所產生的訪問日誌進行冷熱統計,生成各種數據報表等等,爬蟲實際上最終也差不多。
    剛開始考慮過MYSQL,但MYSQL單表在超過千萬級以上效能表現不佳,所以當時還是選擇使用mongodb。
    其實做的也很簡單,無非是用python定時將每日的伺服器日誌抓取到本地,然後利用pandas庫,將資料構造成自己想要的資料結構,需要計算分組聚合的就聚合,最終把每日的數據結果丟到mongodb。
    現在公司mongodb資料大概放了有8KW條左右,進行資料檢索效率還是可以的,切記記得加索引。
    我們這邊除了把數據記錄到mongodb之外,還用flask寫了個restfulAPI,專門給運營系統調用數據統計結果,運營那邊也會在MYSQL上創建一張表,將我mongodb統計出的結果再統計出一個總數據,放到MYSQL裡,這樣就不用每次從API那邊拿數據呼叫mongodb進行重複聚合計算了。

    回覆
    0
  • 取消回覆