《技術貼—Mongodb解析》要點:
本文介紹了技術貼—Mongodb解析,希望對您有用。如果有疑問,可以聯系我們。
相關主題:非關系型數據庫
MongoDB 是一個基于分布式文件存儲的數據庫.旨在為 WEB 應用提供可擴展的高性能數據存儲辦理方案.MongoDB是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的.
MongoDB將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成.MongoDB 文檔類似于 JSON 對象.字段值可以包括其他文檔,數組及文檔數組.
MongoDB的提供了一個面向文檔存儲,操作起來比擬簡單和容易.
可以在MongoDB記錄中設置任何屬性的索引(如:FirstName="Sameer",Address="8Gandhi Road")來實現更快的排序.
可以通過當地或者網絡創建數據鏡像,這使得MongoDB有更強的擴展性.
如果負載的增加(必要更多的存儲空間和更強的處理能力),它可以分布在計算機網絡中的其他節點上這就是所謂的分片.
Mongo支持豐富的查詢表達式.查詢指令使用JSON形式的標志,可輕易查詢文檔中內嵌的對象及數組.
MongoDb 使用update()命令可以實現替換完成的文檔(數據)或者一些指定的數據字段 .
Mongodb中的Map/reduce主要是用來對數據進行批量處置和聚合操作.
Map和Reduce.Map函數調用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數進行處置.
Map函數和Reduce函數是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執行MapReduce操作.
GridFS是MongoDB中的一個內置功能,可以用于寄存大量小文件.
MongoDB允許在服務端執行腳本,可以用Javascript編寫某個函數,直接在服務端執行,也可以把函數的定義存儲在服務端,下次直接挪用即可.
MongoDB支持各類編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言.
MongoDB安裝簡單.
Mongodb現階段已被許多大型網站應用,例如:淘寶,京東,github,ebay等.許多網站并非完全將傳統的關系型數據庫替換為mongodb,而是選擇性的在部分模塊應用.在應用mongodb之前,要根據自身需求以及mongodb的特點、不敷進行選擇.目前,mongodb適用于以下一些場景:
網站數據:mongo非常得當實時的插入,更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性.
緩存:由于性能很高,mongo也得當作為信息基礎設施的緩存層.在系統重啟之后,由mongo搭建的持久化緩存可以避免下層的數據源過載.
大尺寸、低價值的數據:使用傳統的關系數據庫存儲一些數據時可能會比擬貴,在此之前,很多程序員往往會選擇傳統的文件進行存儲.
高伸縮性的場景:mongo非常得當由數十或者數百臺服務器組成的數據庫.用于對象及JSON數據的存儲:mongo的BSON數據格式非常得當文檔格式化的存儲及查詢.
Mongodb相對關系型數據庫有如下長處:
高可擴展性
散布式計算
低本錢
架構的靈活性,半布局化數據
沒有繁雜的關系
在滿足以上長處的同時,卻沒有關系型數據庫那樣嚴格的事物支持,通常情況下,mongodb這一缺點阻礙了人們對其的選擇.對于習慣利用關系型數據庫的開發人員來說,mongodb沒有關聯查詢,這也是在做數據庫選型時會考慮到的.
在非關系型數據庫中,mongdb擁有相對突出的優勢,mongodb之所以是介于關系型數據庫和非關系型數據庫的產品,在于它提供了非常豐富的功能,例如MySQL中常用的數據增編削查,索引,聚合查詢,分頁這些功能,mongodb都提供了相應的能力,與hbase列存儲相比,方便了數據的可操作性.
針對開發者在進行項目數據庫選型時,根據mongodb的特點,優勢,缺點綜合考慮其適合性.例如在項目中進行的事務性操作比擬多,那么mongodb就不是合適的選擇.考慮到mongodb的數據存儲結構比擬靈活,并非固定結構,即擴展性高,那么在項目中經常出現需要擴展數據字段的情況,則可以選擇mongodb.當然,項目中也可以利用不同的數據庫,根據數據的性質選擇存儲的位置.
以下通過與MySQL對照介紹mongodb基本的術語:
通過下圖實例,我們也可以更直觀的的了解Mongo中的一些概念:
在mongodb中不存在表關聯這一概念,但可以利用文檔的內嵌到達數據的直接關聯.
數據庫
一個mongodb中可以建立多個數據庫. MongoDB的默認數據庫為"db",該數據庫存儲在data目錄中. MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有本身的集合和權限,不同的數據庫也放置在不同的文件中.
集合
集合就是MongoDB文檔組,類似于RDBMS(關系數據庫管理系統:RelationalDatabase Management System)中的表格.集合存在于數據庫中,集合沒有固定的結構,這意味著你在對集合可以插入不同格式和類型的數據,但通常情況下我們插入集合的數據都會有必定的關聯性.
文檔
文檔是一組鍵值(key-value)對(即BSON).MongoDB的文檔不必要設置相同的字段,并且相同的字段不必要相同的數據類型,這與關系型數據庫有很大的區別,也是 MongoDB 非常突出的特點.
MongoDB 數據類型
下表為MongoDB中常用的幾種數據類型.
Mongodb的Linux安裝比擬簡單,在安裝完mongodb后,正常啟動的情況下,進入應用的/bin目錄下,執行命令./mongo便進入mongodb的后臺管理shell,第一次進入shell時是默認選擇test庫.可通過exit或quit(),或trl+C退出shell.
Mongodb中常用的shell指令
以上簡單介紹指令的用法,詳細闡明可參考官方文檔:https://docs.mongodb.com/manual/mongo/
在mongodb中創建索引時必要注意的事項:
索引占據存儲空間,存儲在內存中,不克不及超過內存的限制,如果超過會自動刪除索引,影響性能.
集合中索引不克不及超過64個
索引名的長度不克不及超過125個字符
一個復合索引最多可以有31個字段
GridFS是MongoDB中的一個內置功能,可以用于寄存大量小文件,以下簡單介紹gridFS的用途特點:
GridFS 用于存儲和恢復那些跨越16M(BSON文件限制)的文件(如:圖片、音頻、視頻等).
GridFS 也是文件存儲的一種方式,然則它是存儲在MonoDB的集合中.
GridFS 可以更好的存儲年夜于16M的文件.
GridFS會將年夜文件對象分割成多個小的chunk(文件片段),一般為256k/個,每個chunk將作為MongoDB的一個文檔(document)被存儲在chunks集合中.
GridFS 用兩個集合來存儲一個文件:fs.files與fs.chunks.
每個文件的實際內容被存在chunks(二進制數據)中,和文件有關的meta數據(filename,content_type,還有用戶自界說的屬性)將會被存在files集合中.
fs.files 集合文檔舉例:
{
"filename": "test.txt",
"chunkSize": NumberInt(261120),
"uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
"md5": "7b762939321e146569b07f72c62cca4f",
"length": NumberInt(646)
}
fs.chunks 集合文檔舉例:
{
"files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
"n": NumberInt(0),
"data": "Mongo Binary Data"
}
詳細闡明可參考官方文檔:https://docs.mongodb.com/manual/core/gridfs/
在mongodb3.0之前,存儲引擎是MMAP,屬于庫級鎖,所有數據庫的集合文檔,索引數據存入一個文件.
Mongodb3.0,推出了MMAPV1,wiredtiger .
MMAPV1,適應于所有MongoDB版本,MongoDB3.0的默認引擎,屬于集合級鎖.相對付MMAP,并發性能有所提升,同時其空間預分配策略以2的N次方規則進行分配,優化了空間的利用.
Wiredtiger,在mongodb3.2作為默認的存儲引擎,通過多版本并發控制完成文檔級別鎖,并發量提高;數據壓縮率高于MMAPV1,由于數據壓縮率高,占用內存及CPU也增高;wiredtiger通過按期數據快照操作和預寫日志完成數據的一致性,同時可作為數據恢復的依據.
在mongodb3.2版本還推出了In-Memory存儲引擎,其特點是數據存儲于內存中,只將少量元數據和診斷日志存儲到磁盤.
Mongodb的存儲引擎類型可通過參數進行配置,開發者可依據幾個存儲引擎的特點結合實際需求進行選擇.
《技術貼—Mongodb解析》是否對您有啟發,歡迎查看更多與《技術貼—Mongodb解析》相關教程,學精學透。維易PHP學院為您提供精彩教程。