MongoDB快速上手指南:業(yè)務(wù)場景、三高特點及相關(guān)概念
1.1 業(yè)務(wù)場景
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫 (比如 MySQL), 在數(shù)據(jù)操作的”三高”需求以及對應(yīng)的 Web 2.0 網(wǎng)站需求面前, 會有”力不從心”的感覺
所謂的三高需求:
高并發(fā), 高性能, 高可用, 簡稱三高
- High Performance: 對數(shù)據(jù)庫的高并發(fā)讀寫的要求
- High Storage: 對海量數(shù)據(jù)的高效率存儲和訪問的需求
- High Scalability && High Available: 對數(shù)據(jù)的高擴展性和高可用性的需求
而 MongoDB 可以應(yīng)對三高需求
具體的應(yīng)用場景:
- 社交場景, 使用 MongoDB 存儲用戶信息, 以及用戶發(fā)表的朋友圈信息, 通過地理位置索引實現(xiàn)附近的人, 地點等功能.
- 游戲場景, 使用 MongoDB 存儲游戲用戶信息, 用戶的裝備, 積分等直接以內(nèi)嵌文檔的形式存儲, 方便查詢, 高效率存儲和訪問.
- 物流場景, 使用 MongoDB 存儲訂單信息, 訂單狀態(tài)在運送過程中會不斷更新, 以 MongoDB 內(nèi)嵌數(shù)組的形式來存儲, 一次查詢就能將訂單所有的變更讀取出來.
- 物聯(lián)網(wǎng)場景, 使用 MongoDB 存儲所有接入的智能設(shè)備信息, 以及設(shè)備匯報的日志信息, 并對這些信息進行多維度的分析.
- 視頻直播, 使用 MongoDB 存儲用戶信息, 點贊互動信息等.
這些應(yīng)用場景中, 數(shù)據(jù)操作方面的共同點有:
- 數(shù)據(jù)量大
- 寫入操作頻繁
- 價值較低的數(shù)據(jù), 對事務(wù)性要求不高
對于這樣的數(shù)據(jù), 更適合用 MongoDB 來實現(xiàn)數(shù)據(jù)存儲
那么我們什么時候選擇 MongoDB 呢?
除了架構(gòu)選型上, 除了上述三個特點之外, 還要考慮下面這些問題:
- 應(yīng)用不需要事務(wù)及復(fù)雜 JOIN 支持
- 新應(yīng)用, 需求會變, 數(shù)據(jù)模型無法確定, 想快速迭代開發(fā)
- 應(yīng)用需要 2000 - 3000 以上的讀寫QPS(更高也可以)
- 應(yīng)用需要 TB 甚至 PB 級別數(shù)據(jù)存儲
- 應(yīng)用發(fā)展迅速, 需要能快速水平擴展
- 應(yīng)用要求存儲的數(shù)據(jù)不丟失
- 應(yīng)用需要
99.999%
高可用 - 應(yīng)用需要大量的地理位置查詢, 文本查詢
如果上述有1個符合, 可以考慮 MongoDB, 2個及以上的符合, 選擇 MongoDB 絕不會后悔.
如果上述業(yè)務(wù)場景使用用MySQL呢?
顯然相對于MySQL, MongoDB可以以更低的成本解決問題(包括學(xué)習(xí), 開發(fā), 運維等成本)
1.2 MongoDB 簡介
MongoDB是一個開源, 高性能, 無模式的文檔型數(shù)據(jù)庫, 當(dāng)初的設(shè)計就是用于簡化開發(fā)和方便擴展, 是NoSQL數(shù)據(jù)庫產(chǎn)品中的一種.是最 像關(guān)系型數(shù)據(jù)庫(MySQL)的非關(guān)系型數(shù)據(jù)庫. 它支持的數(shù)據(jù)結(jié)構(gòu)非常松散, 是一種類似于 JSON 的 格式叫BSON, 所以它既可以存儲比較復(fù)雜的數(shù)據(jù)類型, 又相當(dāng)?shù)撵`活. MongoDB中的記錄是一個文檔, 它是一個由字段和值對(?eld:value)組成的數(shù)據(jù)結(jié)構(gòu).MongoDB文檔類似于JSON對象, 即一個文檔認 為就是一個對象.字段的數(shù)據(jù)類型是字符型, 它的值除了使用基本的一些類型外, 還可以包括其他文檔, 普通數(shù)組和文檔數(shù)組.
“最像關(guān)系型數(shù)據(jù)庫的 NoSQL 數(shù)據(jù)庫”. MongoDB 中的記錄是一個文檔, 是一個 key-value pair. 字段的數(shù)據(jù)類型是字符型, 值除了使用基本的一些類型以外, 還包括其它文檔, 普通數(shù)組以及文檔數(shù)組
Mongo和Mysql對比
MongoDB 數(shù)據(jù)模型是面向文檔的, 所謂文檔就是一種類似于 JSON 的結(jié)構(gòu), 簡單理解 MongoDB 這個數(shù)據(jù)庫中存在的是各種各樣的 JSON(BSON)
- 數(shù)據(jù)庫 (database)
- 數(shù)據(jù)庫是一個倉庫, 存儲集合 (collection)
- 集合 (collection)
- 類似于數(shù)組, 在集合中存放文檔
- 文檔 (document)
- 文檔型數(shù)據(jù)庫的最小單位, 通常情況, 我們存儲和操作的內(nèi)容都是文檔
在 MongoDB 中, 數(shù)據(jù)庫和集合都不需要手動創(chuàng)建, 當(dāng)我們創(chuàng)建文檔時, 如果文檔所在的集合或者數(shù)據(jù)庫不存在, 則會自動創(chuàng)建數(shù)據(jù)庫或者集合
1.2.1 數(shù)據(jù)庫 (databases) 管理語法
1.2.2 集合 (collection) 管理語法
1.3. 數(shù)據(jù)類型
MongoDB的最小存儲單位就是文檔(document)對象。文檔(document)對象對應(yīng)于關(guān)系型數(shù)據(jù)庫的行。數(shù)據(jù)在MongoDB中以 BSON(Binary-JSON)文檔的格式存儲在磁盤上。
BSON(Binary Serialized Document Format)是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON。BSON和JSON一樣,支持 內(nèi)嵌的文檔對象和數(shù)組對象,但是BSON有JSON沒有的一些數(shù)據(jù)類型,如Date
和BinData
類型。
BSON采用了類似于 C 語言結(jié)構(gòu)體的名稱、對表示方法,支持內(nèi)嵌的文檔對象和數(shù)組對象,具有輕量性、可遍歷性、高效性的三個特點,可以有效描述非結(jié)構(gòu)化數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)。這種格式的優(yōu)點是靈活性高,但它的缺點是空間利用率不是很理想。
Bson中,除了基本的JSON類型:string,integer,boolean,double,null,array和object,mongo還使用了特殊的數(shù)據(jù)類型。這些類型包括 date,object id,binary data,regular expression 和code。每一個驅(qū)動都以特定語言的方式實現(xiàn)了這些類型,查看你的驅(qū)動的文檔來獲取詳細信息。
提示: shell默認使用64位浮點型數(shù)值。{“x”:3.14}或{“x”:3}。對于整型值,可以使用NumberInt(4字節(jié)符號整數(shù))或NumberLong(8字節(jié)符 號整數(shù)),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}
1.4 MongoDB 的特點
1.4.1 高性能
MongoDB 提供高性能的數(shù)據(jù)持久化
- 嵌入式數(shù)據(jù)模型的支持減少了數(shù)據(jù)庫系統(tǒng)上的 I/O 活動
- 索引支持更快的查詢, 并且可以包含來自嵌入式文檔和數(shù)組的鍵 (文本索引解決搜索的需求, TTL 索引解決歷史數(shù)據(jù)自動過期的需求, 地理位置索引可以用于構(gòu)件各種 O2O 應(yīng)用)
- mmapv1, wiredtiger, mongorocks (rocksdb) in-memory 等多引擎支持滿足各種場景需求
- Gridfs 解決文件存儲需求。
1.4.2 高可用
MongoDB 的復(fù)制工具稱作副本集 (replica set) 可以提供自動故障轉(zhuǎn)移和數(shù)據(jù)冗余。
1.4.3 高擴展
水平擴展是其核心功能一部分。
分片將數(shù)據(jù)分布在一組集群的機器上 (海量數(shù)據(jù)存儲, 服務(wù)能力水平擴展)。
MongoDB 支持基于片鍵創(chuàng)建數(shù)據(jù)區(qū)域, 在一個平衡的集群當(dāng)中, MongoDB 將一個區(qū)域所覆蓋的讀寫只定向到該區(qū)域的那些片。
1.4.4 豐富的查詢支持
MongoDB支持豐富的查詢語言, 支持讀和寫操作(CRUD), 比如數(shù)據(jù)聚合, 文本搜索和地理空間查詢等。
1.4.5 其他
無模式(動態(tài)模式), 靈活的文檔模型。
作者:是小梁同學(xué)呀
來源:稀土掘金
版權(quán)聲明:
本站所有文章和圖片均來自用戶分享和網(wǎng)絡(luò)收集,文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請勿用于商業(yè)用途,如果損害了您的權(quán)利,請聯(lián)系網(wǎng)站客服處理。