4.3剧罩、MongDB

安裝

使用 brew 安裝
brew install mongodb

運(yùn)行 MongoDB
1、首先我們創(chuàng)建一個(gè)數(shù)據(jù)庫存儲(chǔ)目錄 /data/db:
mkdir -p /data/db

2一膨、啟動(dòng)mongo
sudo mongo

http://localhost:8080/user/zhangsan

概述

MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫呀邢。由C++語言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案豹绪。
MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品价淌,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的瞒津。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散蝉衣,是類似json的bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型巷蚪。Mongo最大的特點(diǎn)是它支持的查詢語言非常強(qiáng)大病毡,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能屁柏,而且還支持對(duì)數(shù)據(jù)建立索引啦膜。
結(jié)構(gòu):MongoDB結(jié)構(gòu)分為:文檔(行)、集合(表)淌喻、數(shù)據(jù)庫僧家。

特性

事務(wù)

MongoDB 目前只支持單文檔事務(wù),需要復(fù)雜事務(wù)支持的場(chǎng)景暫時(shí)不適合裸删。

單文檔事務(wù)

在早期八拱,我們說的MongoDB支持事務(wù)是指針對(duì)MongoDB的單文檔級(jí)別,與我們MySQL等關(guān)系型數(shù)據(jù)庫中的事務(wù)是不同的涯塔,那什么是單文檔事務(wù)呢肌稻?
>db.username.update({'name': 'helei'}, {$set: {'age': 26, 'score': 85}})
上述命令對(duì)username集合中,name為helei列的行進(jìn)行更新伤塌,如果age更新為26灯萍,score由于宕機(jī)或其他原因?qū)е赂率。敲碝ongoDB則會(huì)回滾這一操作每聪。

Part2:單文檔ACID實(shí)現(xiàn)

MongoDB在更新單個(gè)文檔時(shí)旦棉,會(huì)對(duì)該文檔加鎖齿风,而要理解MongoDB的鎖機(jī)制,需要先了解以下幾個(gè)概念:

  1. Intent Lock绑洛, 意圖鎖表明讀寫方(reader-writer)意圖針對(duì)更細(xì)粒度的資源進(jìn)行讀取或?qū)懭氩僮骶劝摺@纾喝绻?dāng)某個(gè)集合被加了意向鎖,那么說明讀真屯、寫方意圖針對(duì)該集合中的某個(gè)文檔進(jìn)行讀或?qū)懙牟僮鳌?/li>
  2. MGL多粒度鎖機(jī)制(Multiple granularity locking )脸候,有S鎖(Shared lock), IS鎖(Intent Share lock), X鎖(Exclusive lock)绑蔫,IX鎖(Intent Exclusive lock)
    MongoDB會(huì)為name為helei的文檔加上X鎖运沦,同時(shí)為包含該文檔的集合,數(shù)據(jù)庫和實(shí)例都加上意向?qū)戞i(IX)配深,這時(shí)携添,針對(duì)該文檔的操作就保證了原子性。

多文檔事務(wù)

MongoDB 4.0 將支持多文檔事務(wù)篓叶,屆時(shí)MongoDB將成為唯一能夠同時(shí)支持速度烈掠,靈活性,JSON文檔模型優(yōu)勢(shì)和ACID數(shù)據(jù)完整性保證的數(shù)據(jù)庫缸托。通過快照隔離左敌,(MongoDB)的事務(wù)能夠提供一個(gè)全局一致的數(shù)據(jù)視圖,并可以實(shí)現(xiàn)all-or-nothing的事務(wù)提交及回滾機(jī)制俐镐,保證數(shù)據(jù)的完整性矫限。


使用場(chǎng)景:

更高的寫入負(fù)載

默認(rèn)情況下,MongoDB更側(cè)重高數(shù)據(jù)寫入性能京革,而非事務(wù)安全奇唤,MongoDB很適合業(yè)務(wù)系統(tǒng)中有大量“低價(jià)值”數(shù)據(jù)的場(chǎng)景幸斥。但是應(yīng)當(dāng)避免在高事務(wù)安全性的系統(tǒng)中使用MongoDB匹摇,除非能從架構(gòu)設(shè)計(jì)上保證事務(wù)安全。

高可用性

MongoDB的復(fù)副集(Master-Slave)配置非常簡潔方便甲葬,此外廊勃,MongoDB可以快速響應(yīng)的處理單節(jié)點(diǎn)故障,自動(dòng)经窖、安全的完成故障轉(zhuǎn)移坡垫。這些特性使得MongoDB能在一個(gè)相對(duì)不穩(wěn)定(如云主機(jī))的環(huán)境中,保持高可用性画侣。

數(shù)據(jù)量很大或者未來會(huì)變得很大

依賴數(shù)據(jù)庫(MySQL)自身的特性冰悠,完成數(shù)據(jù)的擴(kuò)展是較困難的事,在MySQL中配乱,當(dāng)一個(gè)單達(dá)表到5-10GB時(shí)會(huì)出現(xiàn)明顯的性能降級(jí)溉卓,此時(shí)需要通過數(shù)據(jù)的水平和垂直拆分皮迟、庫的拆分完成擴(kuò)展,使用MySQL通常需要借助驅(qū)動(dòng)層或代理層完成這類需求桑寨。而MongoDB內(nèi)建了多種數(shù)據(jù)分片的特性伏尼,可以很好的適應(yīng)大數(shù)據(jù)量的需求。

基于位置的數(shù)據(jù)查詢

MongoDB支持二維空間索引尉尾,因此可以快速及精確的從指定位置獲取數(shù)據(jù)爆阶。

表結(jié)構(gòu)不明確,且數(shù)據(jù)在不斷變大

在一些傳統(tǒng)RDBMS中沙咏,增加一個(gè)字段會(huì)鎖住整個(gè)數(shù)據(jù)庫/表辨图,或者在執(zhí)行一個(gè)重負(fù)載的請(qǐng)求時(shí)會(huì)明顯造成其它請(qǐng)求的性能降級(jí)。通常發(fā)生在數(shù)據(jù)表大于1G的時(shí)候(當(dāng)大于1TB時(shí)更甚)肢藐。 因MongoDB是文檔型數(shù)據(jù)庫徒役,為非結(jié)構(gòu)貨的文檔增加一個(gè)新字段是很快速的操作,并且不會(huì)影響到已有數(shù)據(jù)窖壕。另外一個(gè)好處當(dāng)業(yè)務(wù)數(shù)據(jù)發(fā)生變化時(shí)忧勿,是將不在需要由DBA修改表結(jié)構(gòu)。

沒有DBA支持

如果沒有專職的DBA瞻讽,并且準(zhǔn)備不使用標(biāo)準(zhǔn)的關(guān)系型思想(結(jié)構(gòu)化鸳吸、連接等)來處理數(shù)據(jù),那么MongoDB將會(huì)是你的首選速勇。MongoDB對(duì)于對(duì)像數(shù)據(jù)的存儲(chǔ)非常方便晌砾,類可以直接序列化成JSON存儲(chǔ)到MongoDB中。 但是需要先了解一些最佳實(shí)踐烦磁,避免當(dāng)數(shù)據(jù)變大后养匈,由于文檔設(shè)計(jì)問題而造成的性能缺陷。

示例:京東的留言系統(tǒng)

Tailable Cursors

MongoDB 有一個(gè)叫 Tailable Cursors的特性都伪,它類似于tail -f 命令呕乎,你在一個(gè)Capped Collection上面執(zhí)行查詢操作,當(dāng)操作完成后陨晶,你可以不關(guān)閉返回的數(shù)據(jù)Cursor猬仁,并持續(xù)地從中讀出新加入的數(shù)據(jù)。
In MongoDB tailable cursors can only be opened on capped collections. This is because a capped collection is a fixed size and only allows insertions. This means that once the number of documents exhausts the collection size, newly written documents will start overwriting the first inserted documents.
在高寫入的 固定集合(Capped Collection)上先誉,索引不可用時(shí)湿刽,可使用Tailable Cursors。例如褐耳,MongoDB復(fù)制使用了Tailable Cursors來獲取Primary的尾oplog日志诈闺。

考慮以下與Tailable Cursors相關(guān)的行為:

  • Tailable Cursors不使用索引,并以自然排序返回文檔铃芦。
  • 因?yàn)門ailable Cursors不使用索引雅镊,查詢的初始掃描非常耗性能把曼;但是,游標(biāo)初始化完后漓穿,隨后獲取到的新增加的文檔是很快速的嗤军。
  • Tailable Cursors如果遇到以下情況之一將會(huì)僵死或無效:
    (1)查詢無匹配結(jié)果。
    (2)游標(biāo)在集合尾部返回文檔晃危,隨后應(yīng)用程序刪除了該文檔叙赚。
    僵死的游標(biāo)id為0。

cursor.tailable() — MongoDB Manual
http://shtylman.com/post/the-tail-of-mongodb/

public interface MyEventRepository extends ReactiveMongoRepository<MyEvent, Long> {
    @Tailable
    Flux<MyEvent> findBy();
}

參考:

MongoDB CRUD Operations — MongoDB Manual
別再用 MongoDB 了僚饭! - 開源中國

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末震叮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鳍鸵,更是在濱河造成了極大的恐慌苇瓣,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偿乖,死亡現(xiàn)場(chǎng)離奇詭異击罪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贪薪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門媳禁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人画切,你說我怎么就攤上這事竣稽。” “怎么了霍弹?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵毫别,是天一觀的道長。 經(jīng)常有香客問我典格,道長岛宦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任钝计,我火速辦了婚禮恋博,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘私恬。我一直安慰自己,他們只是感情好炼吴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布本鸣。 她就那樣靜靜地躺著,像睡著了一般硅蹦。 火紅的嫁衣襯著肌膚如雪荣德。 梳的紋絲不亂的頭發(fā)上闷煤,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音涮瞻,去河邊找鬼鲤拿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛署咽,可吹牛的內(nèi)容都是我干的近顷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼宁否,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼窒升!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起慕匠,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤饱须,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后台谊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蓉媳,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年锅铅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了督怜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狠角,死狀恐怖号杠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丰歌,我是刑警寧澤姨蟋,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站立帖,受9級(jí)特大地震影響眼溶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晓勇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一堂飞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绑咱,春花似錦绰筛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窿克,卻和暖如春骏庸,著一層夾襖步出監(jiān)牢的瞬間毛甲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國打工具被, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玻募,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓一姿,卻偏偏與公主長得像七咧,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子啸蜜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 春天來了坑雅, 帶著陽光的溫度, 青草的香氣衬横。 血液的溪流活潑歡快地流淌著裹粤, 浸潤每一個(gè)細(xì)胞, 喚醒每一根末梢蜂林, 呼吸...
    雛菊淺笑閱讀 209評(píng)論 0 0
  • 初遇你如荷花出淤泥 生活再也不平淡無奇 被初晨一縷陽光叫醒 淡泊的心悸動(dòng)又欣喜 你說希望會(huì)不離不棄 茫茫人海遇見不...
    沈九壹閱讀 208評(píng)論 0 3
  • 前言 隨著敏捷開發(fā)的流行遥诉,編寫單元測(cè)試已經(jīng)成為業(yè)界共識(shí)。但如何來衡量單元測(cè)試的質(zhì)量呢噪叙?有些管理者片面追求單元測(cè)試的...
    FX_SKY閱讀 3,535評(píng)論 0 1