1. 程式人生 > >數據庫——MongoDB

數據庫——MongoDB

好處 方式 聚合 val -o 固定 表現 處理 讀取

what‘s the MongoDB

  MongoDB是一個介於關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。MongoDB具有易用性、易擴展性、功能豐富、性能卓越的優勢。

易用性:

  MongoDB是一個面向文檔(document-oriented)的數據庫,而不是關系型數據庫。
  不采用關系型主要是為了獲得更好得擴展性。當然還有一些其他好處,與關系數據庫相比,面向文檔的數據庫不再有“行“(row)的概念取而代之的是更為靈活的“檔”(document)模型。
  通過在文檔中嵌入文檔和數組,面向文檔的方法能夠僅使用一條記錄來表現復雜的層級關系,這與現代的面向對象語言的開發者對數據的看法一致。
  另外,不再有預定義模式(predefined schema):文檔的鍵(key)和值(value)不再是固定的類型和大小。由於沒有固定的模式,根據需要添加或刪除字段變得更容易了。通常由於開發者能夠進行快速叠代,所以開發進程得以加快。而且,實驗更容易進行。開發者能嘗試大量的數據模型,從中選一個最好的。

易擴展性:

  應用程序數據集的大小正在以不可思議的速度增長。隨著可用帶寬的增長和存儲器價格的下降,即使是一個小規模的應用程序,需要存儲的數據量也可能大的驚人,甚至超出
了很多數據庫的處理能力。過去非常罕見的T級數據,現在已經是司空見慣了。
  由於需要存儲的數據量不斷增長,開發者面臨一個問題:應該如何擴展數據庫,分為縱向擴展和橫向擴展,縱向擴展是最省力的做法,但缺點是大型機一般都非常貴,而且
當數據量達到機器的物理極限時,花再多的錢也買不到更強的機器了,此時選擇橫向擴展更為合適,但橫向擴展帶來的另外一個問題就是需要管理的機器太多。
  MongoDB的設計采用橫向擴展。面向文檔的數據模型使它能很容易地在多臺服務器之間進行數據分割。MongoDB能夠自動處理跨集群的數據和負載,自動重新分配文檔,以及將用戶的請求路由到正確的機器上。這樣,開發者就能夠集中精力編寫應用程序,而不需要再去考慮如何擴展的問題。如果一個集群需要更大的容量,只需要向集群添加新服務器MongoDB就會自動將現有的數據向新服務器傳送。

功能豐富:

  MongoDB作為一款通用型數據庫,除了能夠創建、讀取、更新和刪除數據之外,還提供了一系列不斷擴展的獨特功能

  1. 索引:支持通用二級索引,允許多種快速查詢,且提供唯一索引、復合索引、地理空間索引、全文索引
  2. 聚合:支持聚合管道,用戶能通過簡單的片段創建復雜的集合,並通過數據庫自動優化
  3. 特殊的集合類型:支持存在時間有限的集合,適用於那些將在某個時刻過期的數據,如會話session。類似地,MongoDB也支持固定大小的集合,用於保存近期數據,如日誌
  4. 文件存儲:支持一種非常易用的協議,用於存儲大文件和文件元數據。MongoDB並不具備一些在關系型數據庫中很普遍的功能,如鏈接join和復雜的多行事務。省略這些的功能是處於架構上的考慮,或者說為了得到更好的擴展性,因為在分布式系統中這兩個功能難以高效地實現

性能卓越:

  MongoDB的一個主要目標是提供卓越的性能,這很大程度上決定了MongoDB的設計。MongoDB把盡可能多的內存用作緩存cache,視圖為每次查詢自動選擇正確的索引。總之各方面的設計都旨在保持它的高性能雖然MongoDB非常強大並試圖保留關系型數據庫的很多特性,但它並不追求具備關系型數據庫的所有功能。只要有可能,數據庫服務器就會將處理邏輯交給客戶端。這種精簡方式的設計是MongoDB能夠實現如此高性能的原因之一。

安裝

  好,以上都是廢話,根本無需多看。接下來進入正題部分。

數據庫——MongoDB