MongoDB中的查詢讓人很舒適,沒有SQL難記的語法,直接使用JSON,相當(dāng)?shù)闹庇^。對不同的開發(fā)語言,你可以使用它最基本的數(shù)組或散列格式進(jìn)行查詢。配合附加的operator,MongoDB支持范圍查詢,正則表達(dá)式查詢,對子文檔內(nèi)屬性的查詢,可以取代原來大多數(shù)任務(wù)的SQL查詢。
·所有的屬性類型都支持索引,甚至數(shù)組:這可以讓某些任務(wù)實(shí)現(xiàn)起來非常的輕松。在MongoDB中,“_id”屬性是主鍵,默認(rèn)MongoDB會對_id創(chuàng)建一個唯一索引。
·服務(wù)端腳本和Map/Reduce:MongoDB允許在服務(wù)端執(zhí)行腳本,可以用Javascript編寫某個函數(shù),直接在服務(wù)端執(zhí)行,也可以把函數(shù)的定義存儲在服務(wù)端,下次直接調(diào)用即可。MongoDB不支持事務(wù)級別的鎖定,對于某些需要自定義的“原子性”操作,可以使用Server side腳本來實(shí)現(xiàn),此時整個MongoDB處于鎖定狀態(tài)。Map/Reduce也是MongoDB中比較吸引人的特性。Map/Reduce可以對大數(shù)據(jù)量的表進(jìn)行統(tǒng)計、分類、合并的工作,完成原先SQL的GroupBy等聚合函數(shù)的功能。并且Mapper和Reducer的定義都是用Javascript來定義服務(wù)端腳本。
·性能高效,速度快: MongoDB使用c++/boost編寫,在多數(shù)場合,其查詢速度對比MySQL要快的多,對于CPU占用非常小。部署也很簡單,對大多數(shù)系統(tǒng),只需下載后二進(jìn)制包解壓就可以直接運(yùn)行,幾乎是零配置。
切實(shí)領(lǐng)會MongoDB的Document模型,從實(shí)際出發(fā),扔掉關(guān)系數(shù)據(jù)庫的范式思維定義,重新設(shè)計類;在服務(wù)端運(yùn)行的JavaScript代碼避免使用遍歷記錄這種耗時的操作,相反要用Map/Reduce來完成這種表數(shù)據(jù)的處理;屬性的類型插入和查詢時應(yīng)該保持一致。若插入時是字符串“1”,則查詢時用數(shù)字1是不匹配的;優(yōu)化MongoDB的性能可以從磁盤速度和內(nèi)存著手;MongoDB對每個Document的限制是最大不超過4MB;在符合上述條件下多啟用Embed Document, 避免使用DatabaseReference;內(nèi)部緩存可以避免N+1次查詢問題(MongoDB不支持joins)。
用Capped Collection解決需要高速寫入的場合,如實(shí)時日志;大數(shù)據(jù)量情況下,新建同步時要調(diào)高oplogSize的大小,并且自己預(yù)先生成數(shù)據(jù)文件,避免出現(xiàn)客戶端超時;Collection+I(xiàn)ndex合計數(shù)量默認(rèn)不能超過24000;當(dāng)前版本(<v1.6)刪除數(shù)據(jù)的空間不能被回收,如果你頻繁刪除數(shù)據(jù),那么需要定期執(zhí)行repairDatabase,釋放這些空間。
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版