MongoDB筆記
轉載請注明出處:https://blog.csdn.net/zbf8441372
MongoDB是現今最火的NoSQL之一,暑假終於有時間把《MongoDB權威指南》和NoSQL Fan上關於它的一些文章瀏覽了一些,下麵我簡單總結幾點MongoDB吸引人的地方。關於MongoDB的基本操作,運維,使用,大家可以自己去看書或者學習資料。
1. 較之別的NoSQL
《MongoDB: The Definition Guide》一書中說,“要是不能用的話,再牛的技術也是空談,MongoDB致力於容易上手、便於使用”。前段時間,阿裏的一位搞HBase的師兄,春輝,花了兩個多小時,深入淺出講解了HBase的一些東西,感觸很深。相比於HBase這樣一個基於HDFS的Big Data的實現,它的架構和層次更複雜。而對於Facebook一手捧紅而今又不再維護了的Cassandra,難免讓人覺得不太promising了。
MongoDB的社區還是相當活躍的。MongoDB是一個麵向文檔的數據庫,目前由10gen開發並維護,它的功能豐富,齊全。
MongoDB使用JSON的變種BSON作為內部存儲的格式和語法。針對MongoDB的操作都使用JSON風格語法,客戶端提交或接收的數據都使用JSON形式來展現。相對於SQL來說,更加直觀,容易理解和掌握。
Schema-less,支持嵌入子文檔:MongoDB是一個Schema-free的文檔數據庫。一個數據庫可以有多個Collection,每個 Collection是Documents的集合。Collection和Document和傳統數據庫的Table和Row並不對等。無需事先定義 Collection,隨時可以創建。
CRUD更加簡單,支持in-place update:隻要定義一個數組,然後傳遞給MongoDB的insert/update方法就可自動插入或更 新;對於更新模式,MongoDB支持一個upsert選項,即:“如果記錄存在那麼更新,否則插入”。MongoDB的update方法還支持 Modifier,通過Modifier可實現在服務端即時更新,省去客戶端和服務端的通訊。這些modifer可以讓MongoDB具有和Redis、 Memcached等KV類似的功能:較之MySQL,MonoDB更加簡單快速。Modifier也是MongoDB可以作為對用戶行為跟蹤的容器。在實際中使用Modifier來將用戶的交互行為快速保存到MongoDB中以便後期進行統計分析和個性化定製。
性能高效,速度快: MongoDB使用c++/boost編寫,在多數場合,其查詢速度對比MySQL要快的多,對於CPU占用非常小。部署也很簡單,對大多數係統,隻需下載後二進製包解壓就可以直接運行,幾乎是零配置。
2. 支持多種複製模式
MongoDB支持不同的服務器間進行複製,包括雙機互備的容錯方案。Master-Slave是最常見的。通過Master-Slave可以實現數據的備份。在我們的實踐中,我們使用的是Master-Slave模式,Slave隻用於後備,實際的讀寫都是從Master節點執行。Replica Pairs/Replica Sets允許2個MongoDB相互監聽,實現雙機互備的容錯。
3. MongoDB內融合的一些東西
MongoDB的shell命令全麵支持js,甚至比js多一些類型,而且可以存儲js函數和變量。MongoDB自帶Mapreduce的功能,隻是這個MapReduce功能隻支持js語法(函數map和reduce是js寫的),且js引擎的實現導致一個實例隻能運行一個map/reduce線程。MongoDB允許在服務端執行腳本,可以用Javascript編寫某個函數,直接在服務端執行,也可以把函數的定義存儲在服務端,下次直接調用即可。MongoDB不支持事務級別的鎖定,對於某些需要自定義的“原子性”操作,可以使用Server side腳本來實 現,此時整個MongoDB處於鎖定狀態。Map/Reduce也是MongoDB中比較吸引人的特性。Map/Reduce可以對大數據量的表進行統 計、分類、合並的工作,完成原先SQL的GroupBy等聚合函數的功能。並且Mapper和Reducer的定義都是用Javascript來定義服務 端腳本。此外,MongoDB shell下支持的正則表達式是Perl兼容的PCRE。MongoDB支持java驅動,可以結合Python,PHP,Ruby這些腳本語言使用,如PyMongo。
4. GridFS
GridFS用於MongoDB中存儲大二文件,基本思想是將將文件文成很多塊,每塊作為一個單獨的文檔存儲。隻要使用./mongofile put filename,文件就會被存在GridFS內,經md5處理,存在MongoDB的fs.files數據庫內。GridFS可以應用於存視頻,圖片,而MongoDB有Sharding和Replica Set的支持,還順便解決了分布存儲的問題,所以很誘惑人。附上一個應用例子: 基於MongoDB GridFS的圖片存儲
5. 產品的代替和演變
LAMP(linux+apache+mysql+php)是以前web開發中的一盞明燈。而隨著web應用規模的擴大,越來越多的Nginx開始取代apache,緩存層將mysql的功能逐漸弱化,越來越多的NoSQL產品以其簡單靈活和高性能向MySQL的地位發起挑戰,由全新的組合:Unix係列係統,加node.js,再加上MongoDB組成一個新的web開發框架。
最後更新:2017-04-02 16:47:54