這個問題咱們能夠從兩個角度去解答。一個是100G的數據量用MySQL和MongoDB在存讀取上有什麼區別,另外一個是數據自己的結構和你要進行的應用來考慮使用哪一種數據庫比較方便。mysql
100G的數據量 目前來看100G的數據量其實對MySQL和MongoDB在存放都沒有什麼壓力,若是你要常常讀取,那麼我建議你的MongoDB來作存儲。緣由在於MongoDB是內存映射模式,能夠充分利用系統的內存資源,內存越大MongoDB的查詢速度越快,畢竟磁盤與內存的I/O效率不是一個量級的。sql
若是你對查詢的速度要求不高,並且爬下來的數據是結構化數據,你又熟悉MySQL的語法及相關操做,徹底能夠用MySQL去存這個級別的數據量,就至關於你存儲了一個大型Excel表格。mongodb
數據結構數據庫
若是數據結構是不一致的,即不會有些行缺失某些字段,有些行又多出一些字段,那麼我建議使用MongoDB作存儲處理。由於Mongo沒有schema的嚴格定義,是json格式存取。若是爬蟲的字段會常常變化,字段定義可能會變動,Mongo對這方面很寬鬆,很容易兼容。但若是你對事務有要求,最好仍是選擇MySQL。由於MongoDB這種NoSQL數據庫並非爲了事務關係而設計的,具體應用仍是看需求。json
總而言之,我我的是比較建議使用MongoDB作海量爬蟲數據庫存儲。不管從數據結構的不規整以及數據存讀取的速度要求,Mongo均可以勝任,同時MongoDB能夠很輕鬆的橫向擴展,分片,複製集羣分分鐘的事。緩存
不過最終落地仍是看需求,仍是要從數據存讀取頻度、量級還有應用場景綜合考慮。數據結構
每一個技術都有本身的應用場景,技術的選擇都須要與本身的應用場景結合!工具
一般來講,千萬條以上的數據,mysql數據庫的性能會有明顯降低,固然能夠經過配置主從,或者使用中間件來提升性能。對於mongoDB來講,100G,2000W的數據量應該算是正常,管理上會比mysql簡單。可是若是須要較強的事務性、一致性等,mongo可能就不能知足要求。性能
爬蟲爬取下來的數據不少能夠直接非結構化的存儲,對存儲的字段還沒有有清晰肯定,且由於你的量級很大,不會立馬分析,因此建議存儲在mongodb 中,以便於進行下一步數據挖掘處理學習
接下來讓小編介紹一下mysq和mongodb的區別
本人從事Python開發近9年,若是你們在學習Python的學習方法,學習路徑,還有之後發展有任何疑問,均可以隨時來諮詢我,關注我,私信給我「Python」,我會給你係統學習資料以及學習交流的地址(必定要看到最後,地址有,是羣)
插入穩定性分析
插入穩定性是指,隨着數據量的增大,每插入必定量數據時的插入速率狀況。
在本次測試中,咱們把這個指標的規模定在10w,即顯示的數據是在每插入10w條數據時,在這段時間內每秒鐘能插入多少條數據。
先呈現四張圖上來:
1.MongoDB指定_id插入:
2.MongoDB不指定_id插入:
3.MySQL指定PRIMARY KEY插入:
4.MySQL不指定PRIMARY KEY插入:
分析:
1.若是MySQL沒有通過查詢優化的話,其查詢速度就不要跟MongoDB比了。MongoDB能夠充分利用系統的內存資源,咱們的測試機器內存是64GB的,內存越大MongoDB的查詢速度就越快,畢竟。
2.本次實驗的查詢的數據也是隨機生成的,所以全部待查詢的數據都存在MongoDB的內存緩存中的機率是很小的。在查詢時,MongoDB須要屢次將內存中的數據與磁盤進行交互以便查找,所以其查詢速率取決於其交互的次數。這樣就存在這樣一種可能性,儘管待查詢的數據數目較多,但這段隨機生成的數據被MongoDB以較少的次數從磁盤中取出。所以,其查詢的平均速度反而更快一些。這樣看來,MongoDB的查詢速度波動也處在一個合理的範圍內。
3.MySQL的穩定性仍是毋庸置疑的。
在數據庫存放的數據中,有一種特殊的鍵值叫作主鍵,它用於唯一地標識表中的某一條記錄。也就是說,一個表不能有多個主鍵,而且主鍵不能爲空值。
不管是MongoDB仍是MySQL,都存在着主鍵的定義。
對於MongoDB來講,其主鍵名叫」_id」,在生成數據的時候,若是用戶不主動爲其分配一個主鍵的話,MongoDB會自動爲其生成一個隨機分配的值。
在MySQL中,主鍵的指定是在MySQL插入數據時指明PRIMARY KEY來定義的。當沒有指定主鍵的時候,另外一種工具——索引,至關於替代了主鍵的功能。索引能夠爲空,也能夠有重複,另外有一種不容許重複的索引叫唯一索引。若是既沒有指定主鍵也沒有指定索引的話,MySQL會自動爲數據建立一個。
總結:
1.總體上的插入速度仍是和上一回的統計數據相似:MongoDB不指定_id插入> MySQL不指定主鍵插入> MySQL指定主鍵插入> MongoDB指定_id插入。
2.從圖中能夠看出,在指定主鍵插入數據的時候,MySQL與MongoDB在不一樣數據數量級時,每秒插入的數據每隔一段時間就會有一個波動,在圖表中顯示成爲規律的毛刺現象。而在不指定插入數據時,在大多數狀況下插入速率都比較平均,但隨着數據庫中數據的增多,插入的效率在某一時段有瞬間降低,隨即又會變穩定。
3.總體上來看,MongoDB的速率波動比MySQL的嚴重,方差變化較大。
4.MongoDB在指定_id插入時,當插入的數據變多以後,插入效率有明顯地降低。在其餘三種的插入測試中,從開始到結束,其插入的速率在大多數的時候都固定在一個標準上。
分析:
1.毛刺現象是由於,當插入的數據太多的時候,MongoDB須要將內存中的數據寫進硬盤,MySQL須要從新分表。這些操做每當數據庫中的數據達到必定量級後就會自動進行,所以每隔一段時間就會有一個明顯的毛刺。
2.MongoDB畢竟仍是新生事物,其穩定性沒有已應用多年的MySQL優秀。
3.MongoDB在指定_id插入的時候,其性能的降低仍是很厲害的。
1.在讀取的數據規模不大時,MongoDB的查詢速度真是一騎絕塵,甩開MySQL好遠好遠。
2.在查詢的數據量逐漸增多的時候,MySQL的查詢速度是穩步降低的,而MongoDB的查詢速度卻有些起伏。
+4913.08659,編碼:柯西,編碼:柯西