MongoDB 入門須知

MongoDB是一個開源的,高性能,無模式(或者說是模式自由),使用C++語言編寫的面向文檔的數據庫。正由於MongoDB是面向文檔的,因此它能夠管理相似JSON的文檔集合。又由於數據能夠被嵌套到複雜的體系中並保持能夠查詢可索引,這樣一來,應用程序即可以以一種更加天然的方式來爲數據建模。javascript

MongoDB

下面介紹MongoDB的特色:java

  1. 統一的UTF-8編碼:不是UTF-8編碼集合的數據也能夠經過使用一種特殊的二進制數據類型來保存,查詢。
  2. 跨平臺支持:二進制文件能夠在Windows,Linux,OS X和Solaris平臺上使用。MongoDB能夠在大多數小端系統上編譯經過。
  3. 支持豐富的類型:支持 dates, regular expressions, code, binary data 等類型。
  4. 查詢結果支持Cursor操做。
  5. 支持Ad hoc queries(Ad hoc query:即席查詢,數據庫應用最廣泛的一種查詢,利用數據倉庫技術,可讓用戶隨時能夠面對數據庫,獲取所但願的數據。在MongoDB中,能夠在任什麼時候候查詢任何一個field。它支持 range queries,regular expression searches 和其餘特殊的查詢類型。同時查詢也能夠包含用戶定義的javascript函數。
  6. 支持嵌套域的查詢:查詢能夠深刻到嵌套的對象和數組中,若是下面的對象被插入到users集合。
  7. 支持索引:支持二級索引包括 single-key, compound, unique, non-unique, geospatial indexes.嵌套的域一樣也能夠被索引。若是咱們對一個數組類型進行索引,那麼數組中全部元素也會自動被索引。當一個查詢執行時,MongoDB的查詢優化器會嘗試多個不一樣的query plan,並選擇執行速度最快的。開發者能夠經過explain功能看到索引被使用的過程,而後能夠經過hint功能來選擇另外一個不一樣的索引。能夠在任什麼時候候建立和刪除索引。
  8. aggregation:除了ad hoc queries外,MongoDB還支持一系列工具來支持聚合,例如MapReduce和其餘相似於SQL的GROUP BY的函數集合。
  9. 文件存儲:該軟件實現了一個稱爲GridFS的協議,這個協議是用來幫助從數據庫中存儲和獲取文件的。
  10. 支持服務器端javascript執行:javaScript是MongoDB的一種通用語言,它能夠被用在查詢,彙集函數,直接由數據庫執行。
  11. capped collection:MongoDB支持被稱爲capped collections(定量集合)的定長集合。Capped collections是惟一一種維持插入順序的集合,其中,若是達到容量最大值,那麼就會覆蓋第一個元素,也就是說capped collection的行爲相似於一個環形隊列。一種特殊的cursor類型,稱爲tailable cursor,能夠被用在capped collection上,當完成結果返回時,這種cursor不會關閉,而是會繼續等待更多的結果來返回。也就是說若是有新的記錄插入到capped collection的話,cursor會自動返回。
  12. 目前提供多種語言的driver。
  13. 部署:MongoDB使用的是memory-mapped files(內存映射文件),因此在32位機器上限制數據的最大大小爲2GB,同時MongoDB服務器只能在小端系統上運行。
  14. Replication:MongoDB不該被部署到少於兩臺的服務器上,也就是說至少有一臺做爲master,另外一臺做爲slave。Master能夠用來執行讀寫,而slave能夠從master上覆制數據,可是它只能執行讀操做或備份操做。開發者能夠根據狀況讓一個operation能夠被replicate到多個servers上。

下面的代碼是啓動一個master服務器和對應的slave服務器:程序員

$ mkdir –p ~/dbs/master ~/dbs/slave
$ ./mongod –master –port 10000 –dbpath ~/dbs/master
$ ./mongod –slave  --port10001 –dbpath ~/dbs/slave  -- source localhost:10000

補充知識

所謂「面向集合」(Collenction-Orented),意思是數據被分組存儲在數據集中,被稱爲一個集合(Collenction)。每一個集合在數據庫中都有一個惟一的標識名,而且能夠包含無限數目的文檔。集合的概念相似關係型數據庫(RDBMS)裏的表(table),不一樣的是它不須要定義任何模式(schema)。mongodb

模式自由(schema-free),意味着對於存儲在mongodb數據庫中的文件,咱們不須要知道它的任何結構定義。若是須要的話,你徹底能夠把不一樣結構的文件存儲在同一個數據庫裏。數據庫

存儲在集合中的文檔,被存儲爲鍵-值對的形式。鍵用於惟一標識一個文檔,爲字符串類型,而值則能夠是各中複雜的文件類型。咱們稱這種存儲形式爲BSON(Binary Serialized dOcument Format)。express

MongoDB把數據存儲在文件中(默認路徑爲:/data/db),爲提升效率使用內存映射文件進行管理。MongoDB的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋樑,集二者的優點於一身。segmentfault

根據官方網站的描述,Mongo適合用於如下場景:數組

  • 網站數據:Mongo很是適合實時的插入,更新與查詢,並具有網站實時數據存儲所需的複製及高度伸縮性。
  • 緩存:因爲性能很高,Mongo也適合做爲信息基礎設施的緩存層。在系統重啓以後,由Mongo搭建的持久化緩存層能夠避免下層的數據源過載。
  • 大尺寸,低價值的數據:使用傳統的關係型數據庫存儲一些數據時可能會比較昂貴,在此以前,不少時候程序員每每會選擇傳統的文件進行存儲。
  • 高伸縮性的場景:Mongo很是適合由數十或數百臺服務器組成的數據庫。Mongo的路線圖中已經包含對MapReduce引擎的內置支持。
  • 用於對象及JSON數據的存儲:Mongo的BSON數據格式很是適合文檔化格式的存儲及查詢。

天然,MongoDB的使用也會有一些限制,例如它不適合:緩存

  • 高度事務性的系統:例如銀行或會計系統。傳統的關係型數據庫目前仍是更適用於須要大量原子性復瑣事務的應用程序。
  • 傳統的商業智能應用:針對特定問題的BI數據庫會對產生高度優化的查詢方式。對於此類應用,數據倉庫多是更合適的選擇。
  • 須要SQL的問題

MongoDB主頁服務器


via nowamagic.net

相關文章
相關標籤/搜索