84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
认证高级PHP讲师
修正一下拼寫,應該是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也有對應的方案,只是在維上可能要複雜一些。安全性上面各家沒有太大的差別。
MySQL 在處理大量資料時會變得很捉急,相反 MongoDB 通過叢集的話應該會好一些。
其實你完全可以不用資料庫,對於爬蟲而言這將有可能成為 IO 的瓶頸。
你可以嘗試使用 Hadoop 的 HDFS。
你應該會選擇Hadoop作為處理平台,這樣子的話底層資料儲存一般都是用MySQL的.mangodb+hadoop的組合做即時監控比較好,例如春晚直播時候的彈幕,因為mongodb支援毫秒級的資料查詢,即時分析。 hadoop一次寫入多次取用,加上MySQL的話比較適合你這個專案。安全其實都差不多。關鍵防火牆做好安全就ok了,畢竟你們的資料庫是隔離的。所以我建議可以選擇MySQL。
我們現在準備寫一個爬蟲抓取大量資料(預測後期可能會達到兩百萬到兩千萬記錄的數量級)
如果只是這點資料, MySQL 或 MongoDB 都可以. 但相對來說, MongoDB 會靈活一些.
200w到2000w的資料量相對來說不是很大,可以考慮這2中自己比較熟悉那個就使用那個。但基本上資料庫達到千萬等級都會有查詢效能的問題,所以如果資料持續成長的話,可以考慮用mongodb。畢竟mongodb分片集群搭建起來比mysql集群簡單多了。而且處理起來更靈活。
200-2000w的資料量沒有必要上hadoop,除非你們團隊對hadoop的技術棧很熟悉;
從效能角度來看,這個量級的資料對於MySQL和mongoDB都可以勝任,關鍵看你的資料是結構化的還是非結構化的,相對而言mongo更靈活點
剛好現在所在公司做過這方面的東西,並且也是本人負責,可以說出來給題主參考一下。 我這邊主要做的是日誌處理和歸檔,對每天所產生的訪問日誌進行冷熱統計,生成各種數據報表等等,爬蟲實際上最終也差不多。 剛開始考慮過MYSQL,但MYSQL單表在超過千萬級以上效能表現不佳,所以當時還是選擇使用mongodb。 其實做的也很簡單,無非是用python定時將每日的伺服器日誌抓取到本地,然後利用pandas庫,將資料構造成自己想要的資料結構,需要計算分組聚合的就聚合,最終把每日的數據結果丟到mongodb。 現在公司mongodb資料大概放了有8KW條左右,進行資料檢索效率還是可以的,切記記得加索引。 我們這邊除了把數據記錄到mongodb之外,還用flask寫了個restfulAPI,專門給運營系統調用數據統計結果,運營那邊也會在MYSQL上創建一張表,將我mongodb統計出的結果再統計出一個總數據,放到MYSQL裡,這樣就不用每次從API那邊拿數據呼叫mongodb進行重複聚合計算了。
修正一下拼寫,應該是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也有對應的方案,只是在維上可能要複雜一些。安全性上面各家沒有太大的差別。
MySQL 在處理大量資料時會變得很捉急,相反 MongoDB 通過叢集的話應該會好一些。
其實你完全可以不用資料庫,對於爬蟲而言這將有可能成為 IO 的瓶頸。
你可以嘗試使用 Hadoop 的 HDFS。
你應該會選擇Hadoop作為處理平台,這樣子的話底層資料儲存一般都是用MySQL的.mangodb+hadoop的組合做即時監控比較好,例如春晚直播時候的彈幕,因為mongodb支援毫秒級的資料查詢,即時分析。 hadoop一次寫入多次取用,加上MySQL的話比較適合你這個專案。安全其實都差不多。關鍵防火牆做好安全就ok了,畢竟你們的資料庫是隔離的。所以我建議可以選擇MySQL。
如果只是這點資料, MySQL 或 MongoDB 都可以. 但相對來說, MongoDB 會靈活一些.
200w到2000w的資料量相對來說不是很大,可以考慮這2中自己比較熟悉那個就使用那個。但基本上資料庫達到千萬等級都會有查詢效能的問題,所以如果資料持續成長的話,可以考慮用mongodb。畢竟mongodb分片集群搭建起來比mysql集群簡單多了。而且處理起來更靈活。
200-2000w的資料量沒有必要上hadoop,除非你們團隊對hadoop的技術棧很熟悉;
從效能角度來看,這個量級的資料對於MySQL和mongoDB都可以勝任,關鍵看你的資料是結構化的還是非結構化的,相對而言mongo更靈活點
剛好現在所在公司做過這方面的東西,並且也是本人負責,可以說出來給題主參考一下。
我這邊主要做的是日誌處理和歸檔,對每天所產生的訪問日誌進行冷熱統計,生成各種數據報表等等,爬蟲實際上最終也差不多。
剛開始考慮過MYSQL,但MYSQL單表在超過千萬級以上效能表現不佳,所以當時還是選擇使用mongodb。
其實做的也很簡單,無非是用python定時將每日的伺服器日誌抓取到本地,然後利用pandas庫,將資料構造成自己想要的資料結構,需要計算分組聚合的就聚合,最終把每日的數據結果丟到mongodb。
現在公司mongodb資料大概放了有8KW條左右,進行資料檢索效率還是可以的,切記記得加索引。
我們這邊除了把數據記錄到mongodb之外,還用flask寫了個restfulAPI,專門給運營系統調用數據統計結果,運營那邊也會在MYSQL上創建一張表,將我mongodb統計出的結果再統計出一個總數據,放到MYSQL裡,這樣就不用每次從API那邊拿數據呼叫mongodb進行重複聚合計算了。