1. 程式人生 > >mongodb優缺點分析

mongodb優缺點分析

自己 數據存儲 id字段 缺點 不存在 比較 以及 數據格式 特殊

主要是對比MySQL來說明

優點

  不存在sql註入:MySQL的是sql註入是一個很嚴重的缺點,雖然可以使用參數綁定和預處理以及特殊字符轉義來處理。但是MongoDB根本不存在這個問題。不過xss攻擊還是需要防範的。

  不需要提前創建表:在MySQL中如果想要寫入一條數據的話必須要先創建好一張表然後才能寫入數據,比如:要在user表裏寫入id=1,username=‘aaa’,sex=‘女‘,age=‘20’這條數據,那你就必須在MySQL數據庫上提前建好一張user表,並且至少必須有id,username,sex,age這幾個字段才能寫入成功。但是MongoDB可以直接寫入數據,不需要提前創建表,例子:db.user.insert({"id":1,"username":"aaa","sex":"女","age":20}) 就好

  可以任意添加或減少字段:用上一個例子,在MySQL中假設我要在上一條數據上再加一個身高height字段,那麽我就必須再去user表上再去添加一個height字段才能寫入height數據。但是在MongoDB中你可以直接寫就行,而且假設你的第一條數據是 id,username,sex,age,那麽你的第二條數據大可以寫成 id,username,age,leight。

  字段數據格式自由:在MySQL中,如果id字段是數字的話你寫一個字符串進去是會報錯的,但是MongoDB不會。

  可以處理json結構:在MongoDB可以存儲一個json對象,比如 字段a的值為{"a":11,"b":12,"c":"abc","d":[1,2,3]},你可以直接去讀取或設置a字段的b值 a.b,讀取a字段d數組的第二個值:a.d.1,可以去刪除a字段的a數據$unset:{"a.a":1},就會變成:{"b":12,"c":"abc","d":[1,2,3]}

  充分利用了計算機內存,所以查詢和插入效率要遠大於MySQL。我自己測試(400w隨機數據)的時候只有在沒有索引的情況下MongoDB的查詢效率要遠大於MySQL,插入效率和MySQL差不多都是8w條左右1分鐘。在有索引的時候MySQL的查詢要速度要高於MongoDB。

缺點

  MongoDB是個nosql數據,所以關系能力薄弱,不能像MySQL一樣使用join,union來進行聯合查找,只能通過結合一些特殊語法來達到類似的結果。

  事務能力薄弱,雖然MongoDB裏事務,但是好像只能針對單條語句(查了好多但是有些看不懂),不能像MySQL一樣利用事務執行多條語句,可以根據情況來選著全部提交執行或者全部取消回滾。

  相比MySQL,MongoDB的效率存在一定的波動性,不是很穩定。

  由於數據存儲的問確定性2,3,4條,MongoDB的管理相對MySQL會困難一些

  MongoDB的管人員(DBA)比較少

總結: 

  如果會頻繁使用事務和關聯查詢,並且最求服務的穩定性最好還是選用MySQL

  如果數據格式不確定,卻少數據庫管理人員,不怎麽使用關聯查詢和事務,不是特別追求服務的穩定性可以使用MongoDB

  不是很重要的數據可以使用MongoDB,比較重要的使用可以用使用MySQL。

 

mongodb優缺點分析