僅僅幾年前,MySQL還是開來源資料庫領域公認的王者,但是隨著NoSQL以82%的年複合增長率狂飆,MySQL在Web應用市場正面臨被NoSQL淘汰的危險。
向NoSQL的遷移不但成為IT業發展趨勢的一個註腳,還讓人們領略了開源驅動的產業創新正如疾風驟雨般來臨。
在Web應用領域,NoSQL對MySQL形成了明顯的威脅,雖然很少有人更換現有應用的支撐台資料庫,但是越來越多的新Web應用選擇了NoSQL的道路。451 Research認為:“那些強調高可擴充性、效能和靈活性的新項目更多地採用了NoSQL資料庫技術。”
MongoDB是一個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中功能最豐富,最像關聯式資料庫的。他支援的資料結構非常鬆散,是類似json的bjson格式,因此可以儲存比較複雜的資料類型。Mongo最大的特點是他支援的查詢語言非常強大,其文法有點類似於物件導向的查詢語言,幾乎可以實作類別似關聯式資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。
它的特點是高效能、易部署、易使用,儲存資料非常方便。主要功能特性有:
- 面向集合儲存,易儲存物件類型的資料。
- 模式自由。
- 支援動態查詢。
- 支援完全索引,包含內部對象。
- 支援查詢。
- 支援複製和故障恢複。
- 使用高效的位元據儲存,包括大型物件(如視頻等)。
- 自動處理片段,以支援雲端運算層次的擴充性
- 支援RUBY,PYTHON,JAVA,C++,PHP等多種語言。
- 檔案儲存體格式為BSON(一種JSON的擴充)
- 可通過網路訪問
所謂“面向集合”(Collenction-Orented),意思是資料被分組儲存在資料集中,被稱為一個集合(Collenction)。每個 集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關係型資料庫(RDBMS)裡的表(table),不同的是它不需要定 義任何模式(schema)。
模式自由(schema-free),意味著對於儲存在mongodb資料庫中的檔案,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的檔案儲存體在同一個資料庫裡。
儲存在集合中的文檔,被儲存為鍵-值對的形式。鍵用於唯一標識一個文檔,為字串類型,而值則可以是各中複雜的檔案類型。我們稱這種儲存形式為BSON(Binary Serialized dOcument Format)。
MongoDB服務端可運行在Linux、Windows或OS X平台,支援32位和64位應用,預設連接埠為27017。推薦運行在64位平台,因為MongoDB
在32位元模式運行時支援的最大檔案尺寸為2GB。
MongoDB把資料存放區在檔案中(預設路徑為:/data/db),為提高效率使用記憶體對應檔進行管理
MongoDB的主要目標是在鍵/值儲存方式(提供了高效能和高度伸縮性)以及傳統的RDBMS系統 (豐富的功能)架起一座橋樑,集兩者的優勢於一 身。根據官方網站的描述,Mongo 適合用於以下情境:
1、網站資料:Mongo非常適合即時的插入,更新與查詢,並具備網站即時資料儲存所需的複製及高度伸縮性。
2、緩衝 :由於效能很高,Mongo也適合作為資訊基礎設施的緩衝層。在系統重啟之後,由Mongo搭建的持久化緩衝層可以避免下層的資料來源 過載。
3、大尺寸,低價值的資料:使用傳統的關係型資料庫儲存一些資料時可能會比較昂貴,在此之前,很 多時候程式員往往會選擇傳統的檔案 進行儲存。
4、高伸縮性的情境:Mongo非常適合由數十或數百台伺服器組成的資料庫。Mongo的路線圖中已經包含對MapReduce引擎的內建支 持。
5、用於 對象及JSON資料的儲存:Mongo的BSON資料格式非常適合文檔化格式的儲存 及查詢。
自然,MongoDB的使用也會有一些限制,例如它不適合:
1、高度事務性的系統:例如銀行或會計系統。傳統的關係型資料庫目前還是更適用於需要大量原子性複雜事務的應用 程式。
2、傳統的商業智慧應用:針對特定問題的BI資料庫會對產生高度最佳化的查詢方式。對於此類應用,資料倉儲可能是更合適的選擇。
3、需要SQL的問題