mongodb如何定位?
MongoDB 是一個基于分布式文件存儲的數據庫,由 C++語言編寫。旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。它支持的數據結構非常松散,是類似 json 的 bson 格式,因此可以存儲比較復雜的數據類型。Mongo 最大的特點是它支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。MongoDB 適用場景MongoDB 的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)和傳統的 RDBMS 系統(具有豐富的功能)之間架起一座橋梁,它集兩者的優勢于一身。Mongo 主要適用于以下場景:網站數據:Mongo 非常適合實時的插入,更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性。緩存:由于性能很高,Mongo 也適合作為信息基礎設施的緩存層。在系統重啟之后, 由 Mongo 搭建的持久化緩存層可以避免下層的數據源過載。大尺寸、低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。高伸縮性的場景:Mongo 非常適合由數十或數百臺服務器組成的數據庫,Mongo 的路線圖中已經包含對 MapReduce 引擎的內置支持。用于對象及 JSON 數據的存儲:Mongo 的 BSON 數據格式非常適合文檔化格式的存儲及查詢。MongoDB 的使用也會有一些限制,它不適合于以下幾個地方:高度事務性的系統:例如,銀行或會計系統。傳統的關系型數據庫目前還是更適用于需要大量原子性復雜事務的應用程序。傳統的商業智能應用:針對特定問題的 BI 數據庫會產生高度優化的查詢方式。對于此類應用,數據倉庫可能是更合適的選擇。需要 SQL 的問題。MongoDB 原理MongoDB 復(副)本集與分片:每個復(副)本集中存儲的數據是相同的,相當于主備方式的數據冗余,目的是為了容災。分片是為了數據的拓展,按照片鍵進行結點劃分,數據根據片鍵存儲到對應的服務器上。
2.MongoDB 部署方案
MongoDB 的集群部署方案中有三類角色:實際數據存儲結點(Shared Sever)、配置文件存儲結點(Config Sever)和路由接入結點(Route Server)??蛻舳酥苯优c路由結點相連,從配置結點上查詢數據,根據查詢結果到實際的存儲結點上查詢和存儲數據。MongoDB 讀寫數據的流程如圖:寫入數據時,先由客戶端訪問路由結點,向配置結點獲取相關信息后,將數據寫入存儲結點。讀取數據時,由客戶端訪問路由結點,向配置結點獲取相關信息后,對存儲結點進行訪問, 獲取到相應數據,再經由路由結點將數據返回至客戶端。對于復本集,又有主和從兩種角色,寫數據和讀數據也是不同,寫數據的過程是只寫到主結點中,由主結點以異步的方式同步到從結點中。而讀數據則只要從任一結點中讀取,具體到哪個結點讀取是可以指定的。對于 MongoDB 的分片,假設我們以某一索引鍵(ID)為片鍵,ID 的區間[0,50),劃分成 5 個chunk,分別存儲到 3 個片服務器中,可以進行如下分片:當數據量很大,需要增加片服務器時,只需移動 chunk 來均分數據即可。配置結點:存儲配置文件的服務器其實存儲的是片鍵與 chunk 以及 chunk 與 server 的映射關系。路由結點:路由角色的結點在分片的情況下起到負載均衡的作用。MongoDB 和 MySQL 的區別MySQL 是關系型數據庫優點:在不同的引擎上有不同的存儲方式。查詢語句是傳統的 SQL 語句,擁有成熟的體系,成熟度很高。缺點:在處理海量數據時,效率會顯著變慢。2、MongoDB 介于關系數據庫和非關系數據庫之間,面向集合的、模式自由的文檔型數據庫。多個鍵值對有序地放置在一起即是文檔,文檔是 MongoDB 中數據的基本單元,類似關系數據庫的行。MongoDB 中的查詢語法是獨特的,有點類似 Javascript 面向對象的查詢語言。存儲方式:虛擬內存+持久化。查詢語句:獨特的 MongoDB 的查詢方式。架構特點:可以通過副本集,以及分片來實現高可用。數據處理:數據存儲在硬盤上,需要經常讀取的數據(熱數據)會被加載到物理內存中,從而達到高速讀寫的效果。成熟度與廣泛度:新興數據庫,成熟度較低,Nosql 數據庫中最為接近關系型數據庫,比較完善的數據庫之一,適用人群不斷增長。優點:讀寫速度快。在適量級的內存的 MongoDB 的速度是十分快速的,通過將熱數據存儲在物理內存中,使得熱數據的讀寫變得十分快速。高擴展性。存儲的數據格式是類似 json 的 bson 格式。缺點:不支持事務。
3、MongoDB 與 MySQL 命令對比
傳統的關系數據庫一般由數據庫(database)、表(table)、記錄(record)三個層次概念組成,MongoDB 是由數據庫(database)、集合(collection)、文檔對象(document)三個層次組成。MongoDB 對于關系型數據庫里的表,但是集合中不包括列、行和關系概念,這體現了模式自由的特點。MongoDB 備份方式文件快照備份文件快照備份基于操作系統,通過 Linux 的 LVM 特性對 MongoDB 數據文件所在的設備進行備份。正是由于這種備份方式使用操作系統級別的工具,故而兼備了高可靠性和高效率。不過這樣也導致了宿主環境必須要給予支持。文件快照備份的特點:優點:支持時間點高可靠性、高效率增量備份缺點:需要操作系統支持需要開啟日志功能,否則無法保證數據的有效性和一致性其他:可以獲取分片集群的一致快照,需要關閉集群均衡器并在大致相同的時刻從集群的每個分片和配置服務器上抓取快照。沒有開啟日志功能時,備份前需要完全完成寫操作,備份過程中將停止任何寫操作(MMAPv1)。開啟日志功能后,在快照時 MMAPv1 無需停止寫操作達到一致狀態,Wired Tiger 通過最后的檢查點達到一致狀態(檢查點為每 2G 數據或每分鐘一次)。文件快照創建的是整個磁盤的鏡像,所以把數據文件、配置、日志放在一個邏輯磁盤上會節約空間。2、mongodump 備份/mongorestore 恢復執行 mongodump 命令讀取 MongoDB 數據庫,可以生成一個備份文件,該備份文件格式為BJSON,執行 mongorestore 命令可以通過讀取該備份文件將 MongoDB 數據庫恢復。使用這種方式進行備份時,對于小型的 MongoDB 集群而言,占用空間更少,也更高效;但是對于大型的 MongoDB 集群,效率則不是很高。在備份的過程中,可以繼續修改數據,會記錄與 oplog 中;備份的數據也不包括本地數據庫、索引,故而恢復數據庫時必須重建索引;此外備份還會產生網絡流量,影響當前mongod 性能。一旦備份數據超過系統內存,查詢操作就會產生錯誤。執行備份時一定要有對應的訪問控制權限。mongodump 不同版本之間不能互相兼容,無法使用較新的版本備份老數據。