最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

記一次Mongodb中admin數(shù)據(jù)庫(kù)導(dǎo)致的事故

 更新時(shí)間:2018年03月11日 11:09:48   作者:laixintao  
這篇文章主要給大家介紹了關(guān)于一次Mongodb中admin數(shù)據(jù)庫(kù)導(dǎo)致的事故的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

MongoDB副本集默認(rèn)會(huì)創(chuàng)建local、admin數(shù)據(jù)庫(kù),local數(shù)據(jù)庫(kù)主要存儲(chǔ)副本集的元數(shù)據(jù),admin數(shù)據(jù)庫(kù)則主要存儲(chǔ)MongoDB的用戶、角色等信息。

Mongodb的gridfs一次插入數(shù)據(jù)的時(shí)候會(huì)自動(dòng)創(chuàng)建幾個(gè)索引,我們程序里面的賬號(hào)沒(méi)有createIndex權(quán)限,我需要手動(dòng)創(chuàng)建一下。結(jié)果連接到mongo服務(wù)器之后忘記執(zhí)行use xxxdb來(lái)切換數(shù)據(jù)庫(kù)了,于是在admin數(shù)據(jù)庫(kù)里面創(chuàng)建了一個(gè)索引,結(jié)果導(dǎo)出一邊的程序報(bào)出來(lái)很多驗(yàn)證問(wèn)題。

Mongo的admin數(shù)據(jù)庫(kù)太脆弱了,只是創(chuàng)建一個(gè)索引就掛了。長(zhǎng)個(gè)教訓(xùn),以后千萬(wàn)不要手動(dòng)修改它,更不要用admin保存數(shù)據(jù)。

反思一下,這次操作失誤其實(shí)爆出我平時(shí)一些不好的習(xí)慣。

首先,連接mongo應(yīng)該指定目標(biāo)數(shù)據(jù)。而我之前都是連接到admin,然后用use切換到目標(biāo)數(shù)據(jù)庫(kù)。這樣難免會(huì)忘記。

$ # 錯(cuò)誤使用
$ mongo ourdomain.com/admin -u tom -p tompass
$ # 正確的使用
$ mongo ourdomain.com/mydb -u tom -p tompass --authenticationDatabase admin

第二,錯(cuò)誤的在admin數(shù)據(jù)庫(kù)執(zhí)行createIndex,返回的結(jié)果明確顯示索引創(chuàng)建成功。

{
  "createdCollectionAutomatically" : true,
  "numIndexesBefore" : 1,
  "numIndexesAfter" : 2,
  "ok" : 1,
  ...
}

但是我忽略了,繼續(xù)在正確的數(shù)據(jù)庫(kù)創(chuàng)建索引。不然可以早一些發(fā)現(xiàn)問(wèn)題。

最后,創(chuàng)建索引應(yīng)該自動(dòng)化,比如gridfs這種對(duì)md5, filename創(chuàng)建索引的。

慎用admin數(shù)據(jù)庫(kù)

當(dāng)Mongod啟用auth選項(xiàng)時(shí),用戶需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)帳號(hào),訪問(wèn)時(shí)根據(jù)帳號(hào)信息來(lái)鑒權(quán),而數(shù)據(jù)庫(kù)帳號(hào)信息就存儲(chǔ)在admin數(shù)據(jù)庫(kù)下。

mongo-9551:PRIMARY> use admin
switched to db admin
mongo-9551:PRIMARY> db.getCollectionNames()
[ "system.users", "system.version" ]
  • system.version存儲(chǔ)authSchema的版本信息
  • system.users存儲(chǔ)了數(shù)據(jù)庫(kù)帳號(hào)信息
  • 如果用戶創(chuàng)建了自定義的角色,還會(huì)有system.roles集合

用戶可以在admin數(shù)據(jù)庫(kù)下建立任意集合,存儲(chǔ)任何數(shù)據(jù),但強(qiáng)烈建議不要使用admin數(shù)據(jù)庫(kù)存儲(chǔ)應(yīng)用業(yè)務(wù)數(shù)據(jù),最好創(chuàng)建新的數(shù)據(jù)庫(kù)。

admin數(shù)據(jù)庫(kù)里的system.users、system.roles2個(gè)集合的數(shù)據(jù),MongoDB會(huì)cache在內(nèi)存里,這樣不用每次鑒權(quán)都從磁盤(pán)加載用戶角色信息。目前cache的維護(hù)代碼,只有在保證system.users、system.roles的寫(xiě)入都串行化的情況下才能正確工作,詳情參考官方issue SERVER-16092

從代碼中我們可以看出,MongoDB將將admin數(shù)據(jù)庫(kù)上的意向?qū)戞i(MODE_IX)直接升級(jí)為寫(xiě)鎖(MODE_X),也就是說(shuō)admin數(shù)據(jù)庫(kù)的寫(xiě)入操作的鎖級(jí)別只能到DB級(jí)別,不支持多個(gè)collection并發(fā)寫(xiě)入,在寫(xiě)入時(shí)也不支持并發(fā)讀取。如果用戶在admin數(shù)據(jù)庫(kù)里存儲(chǔ)業(yè)務(wù)數(shù)據(jù),則可能遭遇性能問(wèn)題。

if (supportsDocLocking() || enableCollectionLocking) { 
if (supportsDocLocking() || enableCollectionLocking) {
+
+ // The check for the admin db is to ensure direct writes to auth collections
+ // are serialized (see SERVER-16092).
+ if (_id == resourceIdAdminDB && !isRead) {
+ _mode = MODE_X;
+ }
+
_lockState->lock(_id, _mode); 

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Windows系統(tǒng)下安裝MongoDB并內(nèi)網(wǎng)穿透遠(yuǎn)程連接

    Windows系統(tǒng)下安裝MongoDB并內(nèi)網(wǎng)穿透遠(yuǎn)程連接

    這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下安裝MongoDB并內(nèi)網(wǎng)穿透遠(yuǎn)程連接的相關(guān)資料,文中通過(guò)圖文將步驟介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • MongoDB模糊查詢正則regex(類似like?和?not?like)

    MongoDB模糊查詢正則regex(類似like?和?not?like)

    在類關(guān)系型數(shù)據(jù)庫(kù)中,like和not?like是常用的模糊查詢操作符,它允許我們?cè)谄ヅ渥侄蔚臅r(shí)候使用通配符,在MongoDB中,也有類似的操作符,MongoDB?可以使用?$regex?操作符來(lái)設(shè)置匹配字符串的正則表達(dá)式,MongoDB?使用?PCRE(Perl?兼容的正則表達(dá)式)作為正則表達(dá)式語(yǔ)言
    2024-02-02
  • MongoDB基礎(chǔ)入門(mén)之創(chuàng)建、刪除集合操作

    MongoDB基礎(chǔ)入門(mén)之創(chuàng)建、刪除集合操作

    這篇文章主要給大家介紹了關(guān)于MongoDB基礎(chǔ)入門(mén)之集合操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • MongoDB 3.4配置文件避免入坑的注意事項(xiàng)

    MongoDB 3.4配置文件避免入坑的注意事項(xiàng)

    最近在配置mongodb的時(shí)候遇到了一些問(wèn)題,現(xiàn)總結(jié)出來(lái)方便以后需要或同樣遇到該問(wèn)題的朋友們參考,下面這篇文章主要給大家介紹了關(guān)于MongoDB 3.4配置文件時(shí)避免入坑的兩個(gè)注意事項(xiàng),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09
  • Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無(wú)法連接服務(wù)器的問(wèn)題及解決方案

    Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無(wú)法連接服務(wù)器的問(wèn)題及解決方案

    在Windows系統(tǒng)中啟動(dòng)MongoDB時(shí)遇到連接拒絕的錯(cuò)誤,通常是因?yàn)榉?wù)未運(yùn)行或配置問(wèn)題,本文給大家分享Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無(wú)法連接服務(wù)器的問(wèn)題及解決方案,一起看看吧
    2024-10-10
  • MongoDB Windows安裝服務(wù)方法與注意事項(xiàng)

    MongoDB Windows安裝服務(wù)方法與注意事項(xiàng)

    這篇文章主要介紹了MongoDB Windows安裝服務(wù)方法與注意事項(xiàng)的相關(guān)資料,MongoDB作為一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),近兩年大受追捧。數(shù)據(jù)靈活的存取方式和高效的處理使得它廣泛用于互聯(lián)網(wǎng)應(yīng)用,需要的朋友可以參考下
    2016-12-12
  • MongoDB數(shù)據(jù)查詢方法干貨篇

    MongoDB數(shù)據(jù)查詢方法干貨篇

    查詢操作在我們?nèi)粘2僮鲾?shù)據(jù)庫(kù)的時(shí)候是必不可少的一部分,最近有些空閑時(shí)間,所有就將MongoDB數(shù)據(jù)查詢的一些方法技巧總結(jié)了處理,這篇文章主要介紹了MongoDB數(shù)據(jù)查詢的相關(guān)資料,需要的朋友可以參考借鑒,一起來(lái)看看吧。
    2017-05-05
  • MongoDB各種查詢操作詳解

    MongoDB各種查詢操作詳解

    這篇文章主要介紹了MongoDB各種查詢操作詳解,包括比較查詢、關(guān)聯(lián)查詢、數(shù)組查詢等,需要的朋友可以參考下
    2014-03-03
  • C#實(shí)現(xiàn)窗體中的各個(gè)控件同比自動(dòng)放縮大小

    C#實(shí)現(xiàn)窗體中的各個(gè)控件同比自動(dòng)放縮大小

    這篇文章主要介紹了C#實(shí)現(xiàn)窗體中的各個(gè)控件同比自動(dòng)放縮大小,實(shí)現(xiàn)方式主要是利用panel控件為主題,對(duì)于每個(gè)控件的大小位置和字體這幾個(gè)屬性進(jìn)行記錄,然后根據(jù)窗體改變的大小同時(shí)放縮,需要的朋友可以參考下
    2014-10-10
  • MongoDB系列教程(六):java操作mongodb實(shí)例

    MongoDB系列教程(六):java操作mongodb實(shí)例

    這篇文章主要介紹了MongoDB系列教程(六):java操作mongodb實(shí)例,本文講解了java中操作mongodb數(shù)據(jù)增加、刪除、修改、查詢數(shù)據(jù)等代碼實(shí)例,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

许昌县| 宁武县| 林周县| 武强县| 南京市| 凤凰县| 孝昌县| 乐清市| 曲阳县| 罗甸县| 鄢陵县| 卓尼县| 丰顺县| 桐城市| 景洪市| 茌平县| 阿图什市| 隆子县| 上高县| 延川县| 兴城市| 京山县| 南宁市| 苗栗县| 淄博市| 曲靖市| 堆龙德庆县| 德庆县| 富川| 新乡市| 舞阳县| 九龙县| 文安县| 将乐县| 昂仁县| 尼玛县| 白朗县| 浪卡子县| 岚皋县| 宾川县| 得荣县|