大數據“復活”記
1013
2025-03-31
目錄
Mongdb
什么是mongdb?
mongdb的特點
主要特性
基本概念
深入認知
應用場景
每文一語
Mongdb
什么是mongdb?
mongodb 是一個文檔型數據庫 也就是非關系型(nosql),同時MongoDB也是一款為web應用程序和互聯網基礎設施設計的數據庫管理系統。
它是由c++語言編寫的,在大數據的背景時代下,我們的數據過于的多,而且并不是簡簡單單的二維數據,有時候網頁日志、全國信息,電商平臺信息等都需要運用大數據技術進行處理和解決,這個時候我們可以利用MySQL來處理,但是我們知道MySQL只能處理有結構的數據,那么難道我們每次進行處理的時候還要對大量的數據進行預處理和清洗嗎?顯然在這樣的高速的信息時代背景下,并不是好的方案。所以我們引進nosql語言-mongdb數據庫來解決這些我們認為的不足和難題。
mongdb的特點
(1)MongoDB提出的是文檔、集合的概念,使用BSON(類JSON)作為其數據模型結構,其結構是面向對象的而不是二維表,存儲一個用戶在MongoDB中是這樣子的。
{
username:'王小王',
password:'123321'
}
使用這樣的數據模型,使得MongoDB能在生產環境中提供高讀寫的能力,吞吐量較于mysql等SQL數據庫大大增強。
(2)易伸縮,自動故障轉移。易伸縮指的是提供了分片能力,可以對數據集進行分片,數據的存儲壓力分攤給多臺服務器。自動故障轉移是副本集的概念,MongoDB能檢測主節點是否存活,當失活時能自動提升從節點為主節點,達到故障轉移。
(3)數據模型因為是面向對象的,所以可以表示豐富的、有層級的數據結構,比如博客系統中能把“評論”直接懟到“文章“的文檔中,而不必像myqsl一樣創建三張表來描述這樣的關系,它的應用場景比較的廣泛,我們在日常的開發當中需要不斷地去理解,這樣才能在我們的工作當中做到事半功倍的效果。
主要特性
(1)文檔數據類型
MongoDB沒有固定的Schema,正因為MongoDB少了一些這樣的約束條件,可以讓數據的存儲數據結構更靈活,存儲速度更加快。
(2)即時查詢能力
MongoDB保留了關系型數據庫即時查詢的能力,保留了索引(底層是基于B tree)的能力,相比于同類型的NoSQL redis 并沒有上述的能力。
(3)復制能力
MongoDB自身提供了副本集能將數據分布在多臺機器上實現冗余,目的是可以提供自動故障轉移、擴展讀能力。
(4)速度與持久性
MongoDB的驅動實現一個寫入語義 fire and forget ,即通過驅動調用寫入時,可以立即得到返回得到成功的結果(即使是報錯),這樣讓寫入的速度更加快,當然會有一定的不安全性,完全依賴網絡。
(5)數據擴展
MongoDB使用分片技術對數據進行擴展,MongoDB能自動分片、自動轉移分片里面的數據塊,讓每一個服務器里面存儲的數據都是一樣大小。
基本概念
深入認知
(1)文檔
文檔是 MongoDB 中數據的基本單位,類似于關系數據庫中的行(但是比行復雜)。多個鍵及其關聯的值有序地放在一起就構成了文檔。不同的編程語言對文檔的表示方法不同,在JavaScript 中文檔表示為:
{“greeting”:“hello,world”}
這個文檔只有一個鍵“greeting”,對應的值為“hello,world”。多數情況下,文檔比這個更復雜,它包含多個鍵/值對。例如:
{“greeting”:“hello,world”,“foo”: 3}
文檔中的鍵/值對是有序的,下面的文檔與上面的文檔是完全不同的兩個文檔。
{“foo”: 3 ,“greeting”:“hello,world”}
文檔中的值不僅可以是雙引號中的字符串,也可以是其他的數據類型,例如,整型、布爾型等,也可以是另外一個文檔,即文檔可以嵌套。文檔中的鍵類型只能是字符串。
(2)集合
集合就是一組文檔,類似于關系數據庫中的表。集合是無模式的,集合中的文檔可以是各式各樣的。例如,{“hello,word”:“Mike”}和{“foo”: 3},它們的鍵不同,值的類型也不同,但是它們可以存放在同一個集合中,也就是不同模式的文檔都可以放在同一個集合中。既然集合中可以存放任何類型的文檔,那么為什么還需要使用多個集合?
這是因為所有文檔都放在同一個集合中,無論對于開發者還是管理員,都很難對集合進行管理,而且這種情形下,對集合的查詢等操作效率都不高。
所以在實際使用中,往往將文檔分類存放在不同的集合中,例如,對于網站的日志記錄,可以根據日志的級別進行存儲,Info級別日志存放在Info 集合中,Debug 級別日志存放在Debug 集合中,這樣既方便了管理,也提供了查詢性能。但是需要注意的是,這種對文檔進行劃分來分別存儲并不是MongoDB 的強制要求,用戶可以靈活選擇。
可以使用“.”按照命名空間將集合劃分為子集合。例如,對于一個博客系統,可能包括blog.user 和blog.article 兩個子集合,這樣劃分只是讓組織結構更好一些,blog 集合和blog.user、blog.article 沒有任何關系。雖然子集合沒有任何特殊的地方,但是使用子集合組織數據結構清晰,這也是MongoDB 推薦的方法。
(3)數據庫
MongoDB 中多個文檔組成集合,多個集合組成數據庫。一個MongoDB 實例可以承載多個數據庫。它們之間可以看作相互獨立,每個數據庫都有獨立的權限控制。在磁盤上,不同的數據庫存放在不同的文件中。MongoDB 中存在以下系統數據庫。
應用場景
MongoDB 的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)和傳統的RDBMS 系統(具有豐富的功能)之間架起一座橋梁,它集兩者的優勢于一身。根據官方網站的描述,Mongo 適用于以下場景。
● 網站數據:Mongo 非常適合實時的插入,更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性。
● 緩存:由于性能很高,Mongo 也適合作為信息基礎設施的緩存層。在系統重啟之后,由Mongo 搭建的持久化緩存層可以避免下層的數據源過載。
● 大尺寸、低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。
● 高伸縮性的場景:Mongo 非常適合由數十或數百臺服務器組成的數據庫,Mongo 的路線圖中已經包含對MapReduce 引擎的內置支持。
● 用于對象及JSON 數據的存儲:Mongo 的BSON 數據格式非常適合文檔化格式的存儲及查詢。
MongoDB 的使用也會有一些限制,例如,它不適合于以下幾個地方。
● 高度事務性的系統:例如,銀行或會計系統。傳統的關系型數據庫目前還是更適用于需要大量原子性復雜事務的應用程序。
● 傳統的商業智能應用:針對特定問題的BI 數據庫會產生高度優化的查詢方式。對于此類應用,數據倉庫可能是更合適的選擇。
● 需要SQL 的問題。
每文一語
知其然還須知其所以然
MongoDB 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。