亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > MongoDB > 正文

MongoDB中的一些坑(最好不要用)

2020-10-29 18:52:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

MongoDB 是目前炙手可熱的 NoSQL 文檔型數(shù)據(jù)庫(kù),它提供的一些特性很棒:如自動(dòng) failover 機(jī)制,自動(dòng) sharding,無(wú)模式 schemaless,大部分情況下性能也很棒。但是薄荷在深入使用 MongoDB 過(guò)程中,遇到了不少問(wèn)題,下面總結(jié)幾個(gè)我們遇到的坑。特別申明:我們目前用的 MongoDB 版本是 2.4.10,曾經(jīng)升級(jí)到 MongoDB 2.6.0 版本,問(wèn)題依然存在,又回退到 2.4.10 版本。

MongoDB 數(shù)據(jù)庫(kù)級(jí)鎖

坑爹指數(shù):5星(最高5星)

MongoDB的鎖機(jī)制和一般關(guān)系數(shù)據(jù)庫(kù)如 MySQL(InnoDB), Oracle 有很大的差異,InnoDB 和 Oracle 能提供行級(jí)粒度鎖,而 MongoDB 只能提供 庫(kù)級(jí)粒度鎖,這意味著當(dāng) MongoDB 一個(gè)寫鎖處于占用狀態(tài)時(shí),其它的讀寫操作都得干等。

初看起來(lái)庫(kù)級(jí)鎖在大并發(fā)環(huán)境下有嚴(yán)重的問(wèn)題,但是 MongoDB 依然能夠保持大并發(fā)量和高性能,這是因?yàn)?MongoDB 的鎖粒度雖然很粗放,但是在鎖處理機(jī)制和關(guān)系數(shù)據(jù)庫(kù)鎖有很大差異,主要表現(xiàn)在:

MongoDB 沒(méi)有完整事務(wù)支持,操作原子性只到單個(gè) document 級(jí)別,所以通常操作粒度比較?。?br />MongoDB 鎖實(shí)際占用時(shí)間是內(nèi)存數(shù)據(jù)計(jì)算和變更時(shí)間,通常很快;
MongoDB 鎖有一種臨時(shí)放棄機(jī)制,當(dāng)出現(xiàn)需要等待慢速 IO 讀寫數(shù)據(jù)時(shí),可以先臨時(shí)放棄,等 IO 完成之后再重新獲取鎖。
通常不出問(wèn)題不等于沒(méi)有問(wèn)題,如果數(shù)據(jù)操作不當(dāng),依然會(huì)導(dǎo)致長(zhǎng)時(shí)間占用寫鎖,比如下面提到的前臺(tái)建索引操作,當(dāng)出現(xiàn)這種情況的時(shí)候,整個(gè)數(shù)據(jù)庫(kù)就處于完全阻塞狀態(tài),無(wú)法進(jìn)行任何讀寫操作,情況十分嚴(yán)重。

解決問(wèn)題的方法,盡量避免長(zhǎng)時(shí)間占用寫鎖操作,如果有一些集合操作實(shí)在難以避免,可以考慮把這個(gè)集合放到一個(gè)單獨(dú)的 MongoDB 庫(kù)里,因?yàn)?MongoDB 不同庫(kù)鎖是相互隔離的,分離集合可以避免某一個(gè)集合操作引發(fā)全局阻塞問(wèn)題。

建索引導(dǎo)致數(shù)據(jù)庫(kù)阻塞

坑爹指數(shù):3星

上面提到了 MongoDB 庫(kù)級(jí)鎖的問(wèn)題,建索引就是一個(gè)容易引起長(zhǎng)時(shí)間寫鎖的問(wèn)題,MongoDB 在前臺(tái)建索引時(shí)需要占用一個(gè)寫鎖(而且不會(huì)臨時(shí)放棄),如果集合的數(shù)據(jù)量很大,建索引通常要花比較長(zhǎng)時(shí)間,特別容易引起問(wèn)題。

解決的方法很簡(jiǎn)單,MongoDB 提供了兩種建索引的訪問(wèn),一種是 background 方式,不需要長(zhǎng)時(shí)間占用寫鎖,另一種是非 background 方式,需要長(zhǎng)時(shí)間占用鎖。使用 background 方式就可以解決問(wèn)題。 例如,為超大表 posts 建立索引, 千萬(wàn)不用使用

復(fù)制代碼 代碼如下:

db.posts.ensureIndex({user_id: 1})

而應(yīng)該使用

復(fù)制代碼 代碼如下:

db.posts.ensureIndex({user_id: 1}, {background: 1})

不合理使用嵌入 embed document

坑爹指數(shù):5星

embed document 是 MongoDB 相比關(guān)系數(shù)據(jù)庫(kù)差異明顯的一個(gè)地方,可以在某一個(gè) document 中嵌入其它子 document,這樣可以在父子 document 保持在單一 collection 中,檢索修改比較方便。

比如薄荷的應(yīng)用情景中有一個(gè) Group document,用戶申請(qǐng)加入 Group 建模為 GroupRequest document,我們最初的時(shí)候使用 embed 方式把 GroupRequest 放置到 Group 中。 Ruby 代碼如下所示(使用了 Mongoid ORM):

復(fù)制代碼 代碼如下:

class Group
  include Mongoid::Document
  ...
  embeds_many :group_requests
  ...
end

class GroupRequest
  include Mongoid::Document
  ...
  embedded_in :group
  ...
end


這個(gè)使用方式讓我們掉到坑里了,差點(diǎn)就爬不出來(lái),它導(dǎo)致有接近兩周的時(shí)間系統(tǒng)問(wèn)題,高峰時(shí)段常有幾分鐘的系統(tǒng)卡頓,最嚴(yán)重一次甚至引起 MongoDB 宕機(jī)。

仔細(xì)分析后,發(fā)現(xiàn)某些活躍的 Group 的 group_requests 增加(當(dāng)有新申請(qǐng)時(shí))和更改(當(dāng)通過(guò)或拒絕用戶申請(qǐng)時(shí))異常頻繁,而這些操作經(jīng)常長(zhǎng)時(shí)間占用寫鎖,導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)阻塞。原因是當(dāng)有增加 group_request 操作時(shí),Group 預(yù)分配的空間不夠,需要重新分配空間(內(nèi)存和硬盤都需要),耗時(shí)較長(zhǎng),另外 Group 上建的索引很多,移動(dòng) Group 位置導(dǎo)致大量索引更新操作也很耗時(shí),綜合起來(lái)引起了長(zhǎng)時(shí)間占用鎖問(wèn)題。

解決問(wèn)題的方法,說(shuō)起來(lái)也簡(jiǎn)單,就是把 embed 關(guān)聯(lián)更改成的普通外鍵關(guān)聯(lián),就是類似關(guān)系數(shù)據(jù)庫(kù)的做法,這樣 group_request 增加或修改都只發(fā)生在 GroupRequest 上,簡(jiǎn)單快速,避免長(zhǎng)時(shí)間占用寫鎖問(wèn)題。當(dāng)關(guān)聯(lián)對(duì)象的數(shù)據(jù)不固定或者經(jīng)常發(fā)生變化時(shí),一定要避免使用 embed 關(guān)聯(lián),不然會(huì)死的很慘。

不合理使用 Array 字段

坑爹指數(shù):4星

MongoDB 的 Array 字段是比較獨(dú)特的一個(gè)特性,它可以在單個(gè) document 里存儲(chǔ)一些簡(jiǎn)單的一對(duì)多關(guān)系。

薄荷有一個(gè)應(yīng)用情景使用遇到嚴(yán)重的性能問(wèn)題,直接上代碼如下所示:

復(fù)制代碼 代碼如下:

class User
  include Mongoid::Document
  ...
  field :follower_user_ids, type: Array, default: []
  ...
end

User 中通過(guò)一個(gè) Array 類型字段 follower_user_ids 保存用戶關(guān)注的人的 id,用戶關(guān)注的人從 10個(gè)到 3000 個(gè)不等,變化是比較頻繁的,和上面 embed 引發(fā)的問(wèn)題類似,頻繁的 follower_user_ids 增加修改操作導(dǎo)致大量長(zhǎng)時(shí)間數(shù)據(jù)庫(kù)寫鎖,從而引發(fā) MongoDB 數(shù)據(jù)庫(kù)性能急劇下降。

解決問(wèn)題的方法:我們把 follower_user_ids 轉(zhuǎn)移到了內(nèi)存數(shù)據(jù)庫(kù) redis 中,避免了頻繁更改 MongoDB 中的 User, 從而徹底解決問(wèn)題。如果不使用 redis,也可以建立一個(gè) UserFollower 集合,使用外鍵形式關(guān)聯(lián)。

先列舉上面幾個(gè)坑吧,都是害人不淺的陷阱,使用 MongoDB 過(guò)程一定要多加注意,避免掉到坑里。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
91女人18毛片水多国产| 国产精品天天av精麻传媒| www.色多多| 九九热视频这里只有精品| 国产色视频在线| 亚洲欧美精品午睡沙发| 欧美在线激情视频| 成人动漫一区二区在线| 亚洲精品中文在线影院| 欧美国产在线观看| 免费的很黄很污的视频网站| 久久免费国产精品1| 一区二区三区日韩精品| 熟女高潮一区二区三区| 欧美日韩视频在线播放| 97久久精品一区二区三区的观看方式| 国产理论在线观看| 精品一二三四在线| 少妇人妻无码专区视频| 情趣视频在线观看| 欧美精品久久久久久久久25p| 中文字幕第八页| 成人在线不卡| 图片婷婷一区| 97精品人妻一区二区三区| jizz日本| 一级香蕉视频在线观看| 中文字幕视频一区二区在线有码| 性欧美video另类hd3| 欧美三级黄视频| 日本性生活网站| www.91精品| www.超碰在线.com| 欧美日韩视频专区在线播放| 国产精品99久久久久久有的能看| 亚洲第一网站在线观看| 伊人影院久久| 超碰在线公开免费| 美日韩一二三区| 成人毛片高清视频观看| 91麻豆国产在线| 亚洲欧美视频在线播放| 国产精品国产三级国产专区53| 男人天堂手机在线视频| 久久激情网站| 无遮挡aaaaa大片免费看| 国模极品一区二区三区| 青青青青国产视频| 亚洲一区二区三区在线观看网站| 高清无码一区二区在线观看吞精| www.91精品| 国产精品入口麻豆免费观看| 欧洲亚洲在线| 美女无遮挡网站| 手机在线精品视频| 欧美日韩伦理一区二区| 日韩高清在线观看一区二区| 91popny丨九色丨国产| 黄色免费福利视频| 欧美最猛黑人xxxx黑人猛交黄| 亚洲乱妇老熟女爽到高潮的片| 欧美午夜精品| 成人国产二区| 国产精品久久观看| 精品无码人妻一区二区三区| 国产精品亚洲精品| 色妞www精品视频| 精品国产一区二区三区久久| 成熟的女同志hd| 国产超碰91| 亚洲国产一区二区三区在线播放| 日韩av网站电影| 色综合天天综合网国产成人综合天| 麻豆亚洲av熟女国产一区二| 精品国产视频| 久久成人国产精品入口| 国产欧美日韩另类一区| 中国黄色在线视频| 亚洲综合视频网站| 国产成人澳门| 午夜影院在线看| 91日韩免费| 99国内精品久久久久| 91精品国产综合久久福利软件| 91国内精品| jizzjizz中国精品麻豆| 黄色片视频免费观看| 韩国三级在线播放| 欧美黑人双插| 欧美国产欧美亚州国产日韩mv天天看完整| 国内精品久久久久久久影视简单| 中文字幕有码在线| eeuss在线播放| 亚洲福利在线视频| 色婷婷精品大视频在线蜜桃视频| 91精彩视频| 亚洲免费观看高清完整版在线观看| 黄瓜视频污在线观看| 日韩三级影视基地| 久久er99精品| 2019男人天堂| 日韩美女在线看| 欧美一区二区三区激情视频| 无码国产精品一区二区免费式直播| 亚洲天堂日韩电影| 日韩亚洲欧美一区二区三区| 国产精品第一视频| 精品视频一区二区三区四区| 在线播放成人| 亚洲高清毛片| 男人的天堂avav| 永久免费av无码网站性色av| 嗯用力啊快一点好舒服小柔久久| 亚洲一区二区三区免费| 国产精品.com| 久久久久免费观看| xxx国产在线观看| 国产欧美日韩高清| 一级二级三级在线观看| 精品播放一区二区| a级大胆欧美人体大胆666| 亚洲丰满在线| 熟女少妇在线视频播放| 国产伦精品一区二区三区四区视频_| 亚洲免费福利一区| 亚洲日本va中文字幕久久| 精品日本一线二线三线不卡| 亚洲天堂国产| 亚洲自拍另类综合| 波多野结衣办公室双飞| 国产精品无码久久久久一区二区| 一级做a爰片久久毛片美女图片| 亚洲va久久久噜噜噜无码久久| 高清视频一区二区三区| 日av在线播放中文不卡| 菠萝蜜视频网站入口| 三级视频在线| 日韩综合在线| wwwxxx免费| 欧美亚洲国产一区二区三区va| 国产鲁鲁视频在线观看免费| 西西人体一区二区| 四虎在线免费看| 在线观看免费高清视频97| 国产乱码精品一区二区三区忘忧草| 狠狠干视频网站| 国内外激情在线| 国产成人av无码精品| 黄色一级大片在线免费看国产| 欧美亚洲国产一区二区三区| 欧美激情综合亚洲一二区| 欧美日韩国产美| av免费观看在线| 国产精品18在线| 亚洲超碰精品一区二区| 中文字幕av一区二区三区人| 捆绑调教日本一区二区三区| 婷婷激情五月综合| 国产综合av在线| 四虎影音在线| 57pao国产精品一区| 欧美精品尤物在线| 国产视频1区| 懂色中文一区二区三区在线视频| 污视频在线看网站| 欧美动物xxx| 久久精品人人做人人爽97| 亚洲毛片av| 99久久婷婷国产综合| 理论片在线不卡免费观看| 大桥未久一区二区| 国产精品日本一区二区不卡视频| 99re在线精品| xxxx黄色片| 最新亚洲精品国自产在线观看| 三年中文高清在线观看第6集| 国产综合视频一区二区三区免费| 成人毛片视频在线观看| 日本一二三不卡| 99国产精品免费网站| √天堂8资源中文在线| 欧美高清在线观看| 乱亲女h秽乱长久久久| 天堂午夜影视日韩欧美一区二区| 国产精品毛片一区视频播| 自拍在线播放| 精品一区二区在线播放| 露出调教综合另类| 亚洲黄色免费在线观看| 国产激情综合| 99久久综合狠狠综合久久aⅴ| 久久久久久久久久久久久女过产乱| 国产真实精品久久二三区| av大片免费观看| 亚洲大片免费观看| 麻豆精品视频在线观看免费| 欧美一级免费看| 91麻豆免费在线视频| 亚洲精品a区| 国产免费人做人爱午夜视频| 2021国产精品视频| 国产亚洲美州欧州综合国| 国产精品大陆在线观看| 俄罗斯性欧美| 美日韩丰满少妇在线观看| 久久久久无码精品国产sm果冻| 国产一区二区不卡在线| aaaaa黄色片| 成人精品免费看| 国产91在线视频| 欧美精品一区二区不卡| 日韩毛片在线看| 欧美精彩视频一区二区三区| 色婷婷一区二区三区| 成人免费短视频| 国产视频三级在线观看播放| 不卡一区2区| 99热.com| 日韩精品视频在线看| 精品国产精品一区二区夜夜嗨| gogo人体高清视频| 欧美最新大片在线看| 四虎影视4hu4虎成人| 国产欧美一区二区| 精品国产乱码久久久久久1区二区| 欧美精品粉嫩高潮一区二区| 痴汉一区二区三区| 日韩中文字幕免费| 日韩av不卡播放| 欧美13videosex性极品| 青青草综合在线| 永久免费av在线| 好看的日韩av电影| 神马午夜伦理影院| 香蕉人妻av久久久久天天| 国产一区红桃视频| 福利一区二区在线| 欧美一级片免费| 亚洲欧美小视频| 成人性做爰aaa片免费看不忠| 久久er99热精品一区二区三区| 欧美极品aaaaabbbbb| 天堂资源在线视频| 日本最黄视频| 中日韩午夜理伦电影免费| 超碰在线97av| 岛国av免费在线| 亚洲人成在线免费观看| 四虎影院中文字幕| 国产中文字幕在线视频| 亚洲精品免费av| 99在线精品免费视频| 久久福利毛片| 日韩中文不卡| 自拍另类欧美| 91精品1区2区| 免费国产亚洲视频| 羞羞色院91蜜桃| 动漫一区二区在线| 夜色77av精品影院| 3751色影院一区二区三区| 成人国产1314www色视频| 欧美一区二视频在线免费观看| 91精品国产三级| 欧美一级播放| xvideos成人免费中文版| 免费欧美电影| av小次郎收藏| 91在线国产福利| 国产亚洲一区二区三区在线播放| 亚洲一区二区三区日本久久九| 日本成在线观看| 三级网站在线| 亚洲国产精品毛片| 四虎精品一区二区永久在线观看| 欧美mv日韩mv| 欧美午夜精品理论片| 国产sm精品调教视频网站| 国产精品久久久久久久一区探花| 国产xxxx视频| 亚洲精品一区视频| 午夜一区二区视频| 91网页版在线| 超碰人人干人人| 亚洲人成绝费网站色www| 99中文字幕一区| 色噜噜色狠狠狠狠狠综合色一| 亚洲精品乱码久久久久久蜜桃91| 国产精品一区二区av日韩在线| 妞干网福利视频| 日韩精品丝袜在线| 国产伦精品一区二区三区免费视频| 欧美激情18p| 日本成人一区二区| 久久婷婷麻豆| 亚洲综合好骚| 偷拍亚洲色图| 成人在线免费观看视频| 国产精品美女一区二区三区四区| 91国语精品自产拍| 日本欧美一区二区在线观看| 亚洲资源网站| 中文字幕日韩免费视频| 国产精品无码免费播放| 国产伦精品一区二区三区照片| 在线一级成人| 欧美三级韩国三级日本三斤| 久久精品国产综合| 91欧美精品午夜性色福利在线| 欧美与黑人午夜性猛交久久久| 国产日本韩国在线播放| 美女喷白浆视频| 香蕉视频一区二区三区| 国 产 黄 色 大 片| 91大片在线观看| 97视频在线观看网址| 欧美人体视频| 91成人一区二区三区| 国产精品亚洲片在线播放| 亚洲精品wwww| 欧美国产高跟鞋裸体秀xxxhd| 国产在线国偷精品产拍免费yy| 50度灰在线| 免费网站看av| 精品久久国产精品| 亚洲国产精品系列| 欧美猛男gaygay网站| 欧美一级搡bbbb搡bbbb|