月初在云棲社區(qū)上發(fā)起了一個(gè) MongoDB 使用場(chǎng)景及運(yùn)維管理問(wèn)題交流探討 的技術(shù)話題秸抚,有近5000人關(guān)注了該話題討論强饮,這里就 MongoDB 的使用場(chǎng)景做個(gè)簡(jiǎn)單的總結(jié)雹有,談?wù)勈裁磮?chǎng)景該用 MongoDB?
很多人比較關(guān)心 MongoDB 的適用場(chǎng)景,也有用戶在話題里分享了自己的業(yè)務(wù)場(chǎng)景失球,比如
案例1
用在應(yīng)用服務(wù)器的日志記錄岖是,查找起來(lái)比文本靈活,導(dǎo)出也很方便她倘。也是給應(yīng)用練手璧微,從外圍系統(tǒng)開(kāi)始使用MongoDB作箍。
用在一些第三方信息的獲取或者抓取硬梁,因?yàn)镸ongoDB的schema-less,所有格式靈活胞得,不用為了各種格式不一樣的信息專(zhuān)門(mén)設(shè)計(jì)統(tǒng)一的格式荧止,極大得減少開(kāi)發(fā)的工作。
案例2
mongodb之前有用過(guò)阶剑,主要用來(lái)存儲(chǔ)一些監(jiān)控?cái)?shù)據(jù)跃巡,No schema 對(duì)開(kāi)發(fā)人員來(lái)說(shuō),真的很方便牧愁,增加字段不用改表結(jié)構(gòu)素邪,而且學(xué)習(xí)成本極低。
案例3
使用MongoDB做了O2O快遞應(yīng)用猪半,·將送快遞騎手兔朦、快遞商家的信息(包含位置信息)存儲(chǔ)在 MongoDB偷线,然后通過(guò) MongoDB 的地理位置查詢(xún),這樣很方便的實(shí)現(xiàn)了查找附近的商家沽甥、騎手等功能声邦,使得快遞騎手能就近接單,目前在使用MongoDB 上沒(méi)遇到啥大的問(wèn)題摆舟,官網(wǎng)的文檔比較詳細(xì)亥曹,很給力。
經(jīng)常跟一些同學(xué)討論 MongoDB 業(yè)務(wù)場(chǎng)景時(shí)恨诱,會(huì)聽(tīng)到類(lèi)似『你這個(gè)場(chǎng)景 mysql 也能解決媳瞪,沒(méi)必要一定用 MongoDB』的聲音,的確照宝,并沒(méi)有某個(gè)業(yè)務(wù)場(chǎng)景必須要使用 MongoDB才能解決材失,但使用 MongoDB 通常能讓你以更低的成本解決問(wèn)題(包括學(xué)習(xí)、開(kāi)發(fā)硫豆、運(yùn)維等成本)龙巨,下面是 MongoDB 的主要特性,大家可以對(duì)照自己的業(yè)務(wù)需求看看熊响,匹配的越多旨别,用 MongoDB 就越合適。
MONGODB 特性 優(yōu)勢(shì)
事務(wù)支持 MongoDB 目前只支持單文檔事務(wù)汗茄,需要復(fù)雜事務(wù)支持的場(chǎng)景暫時(shí)不適合
靈活的文檔模型 JSON 格式存儲(chǔ)最接近真實(shí)對(duì)象模型秸弛,對(duì)開(kāi)發(fā)者友好,方便快速開(kāi)發(fā)迭代
高可用復(fù)制集 滿足數(shù)據(jù)高可靠洪碳、服務(wù)高可用的需求递览,運(yùn)維簡(jiǎn)單,故障自動(dòng)切換
可擴(kuò)展分片集群 海量數(shù)據(jù)存儲(chǔ)瞳腌,服務(wù)能力水平擴(kuò)展
高性能 mmapv1绞铃、wiredtiger、mongorocks(rocksdb)嫂侍、in-memory 等多引擎支持滿足各種場(chǎng)景需求
強(qiáng)大的索引支持 地理位置索引可用于構(gòu)建 各種 O2O 應(yīng)用儿捧、文本索引解決搜索的需求、TTL索引解決歷史數(shù)據(jù)自動(dòng)過(guò)期的需求
Gridfs 解決文件存儲(chǔ)的需求
aggregation & mapreduce 解決數(shù)據(jù)分析場(chǎng)景需求挑宠,用戶可以自己寫(xiě)查詢(xún)語(yǔ)句或腳本菲盾,將請(qǐng)求都分發(fā)到 MongoDB 上完成
從目前阿里云 MongoDB 云數(shù)據(jù)庫(kù)上的用戶看,MongoDB 的應(yīng)用已經(jīng)滲透到各個(gè)領(lǐng)域各淀,比如游戲懒鉴、物流、電商碎浇、內(nèi)容管理临谱、社交咆畏、物聯(lián)網(wǎng)、視頻直播等吴裤,以下是幾個(gè)實(shí)際的應(yīng)用案例旧找。
游戲場(chǎng)景,使用 MongoDB 存儲(chǔ)游戲用戶信息麦牺,用戶的裝備钮蛛、積分等直接以?xún)?nèi)嵌文檔的形式存儲(chǔ),方便查詢(xún)剖膳、更新
物流場(chǎng)景魏颓,使用 MongoDB 存儲(chǔ)訂單信息,訂單狀態(tài)在運(yùn)送過(guò)程中會(huì)不斷更新吱晒,以 MongoDB 內(nèi)嵌數(shù)組的形式來(lái)存儲(chǔ)甸饱,一次查詢(xún)就能將訂單所有的變更讀取出來(lái)。
社交場(chǎng)景仑濒,使用 MongoDB 存儲(chǔ)存儲(chǔ)用戶信息叹话,以及用戶發(fā)表的朋友圈信息,通過(guò)地理位置索引實(shí)現(xiàn)附近的人墩瞳、地點(diǎn)等功能
物聯(lián)網(wǎng)場(chǎng)景驼壶,使用 MongoDB 存儲(chǔ)所有接入的智能設(shè)備信息,以及設(shè)備匯報(bào)的日志信息喉酌,并對(duì)這些信息進(jìn)行多維度的分析
視頻直播热凹,使用 MongoDB 存儲(chǔ)用戶信息、禮物信息等
……
如果你還在為是否應(yīng)該使用 MongoDB泪电,不如來(lái)做幾個(gè)選擇題來(lái)輔助決策(注:以下內(nèi)容改編自 MongoDB 公司 TJ 同學(xué)的某次公開(kāi)技術(shù)分享)般妙。
應(yīng)用特征 YES / NO
應(yīng)用不需要事務(wù)及復(fù)雜 join 支持 必須 Yes
新應(yīng)用,需求會(huì)變相速,數(shù)據(jù)模型無(wú)法確定碟渺,想快速迭代開(kāi)發(fā) ?
應(yīng)用需要2000-3000以上的讀寫(xiě)QPS(更高也可以) 和蚪?
應(yīng)用需要TB甚至 PB 級(jí)別數(shù)據(jù)存儲(chǔ) ?
應(yīng)用發(fā)展迅速止状,需要能快速水平擴(kuò)展 ?
應(yīng)用要求存儲(chǔ)的數(shù)據(jù)不丟失 ?
應(yīng)用需要99.999%高可用 ?
應(yīng)用需要大量的地理位置查詢(xún)烹棉、文本查詢(xún) 攒霹?
如果上述有1個(gè) Yes,可以考慮 MongoDB浆洗,2個(gè)及以上的 Yes催束,選擇 MongoDB 絕不會(huì)后悔。