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

MongoDB釋放空閑空間的幾種常用方法

 更新時(shí)間:2018年07月05日 10:37:35   作者:二表  
這篇文章主要給大家介紹了關(guān)于MongoDB釋放空閑空間的幾種常用方法,分別包括compact、db.repairDatabase()、secondary節(jié)點(diǎn)重同步以及db.copyDatabase()這幾種方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧

前言

當(dāng)我們從MongoDB中刪除文檔或集合時(shí),MongoDB并不會(huì)將已經(jīng)占用了的磁盤(pán)空間釋放,它會(huì)一直維護(hù)已經(jīng)占用了磁盤(pán)空間的數(shù)據(jù)文件,盡管數(shù)據(jù)文件中可能存在大大小小的空記錄列表(empty record list)。當(dāng)客戶(hù)端程序再次插入文檔時(shí),MongoDB會(huì)從空記錄列表中分配存儲(chǔ)空間給新文檔。那么為了更加有效的使用磁盤(pán)空間,我們需要對(duì)mongodb的數(shù)據(jù)文件做碎片整理以及未使用空間的回收。思想無(wú)非兩種:

1、對(duì)原數(shù)據(jù)進(jìn)行重組

2、僅將數(shù)據(jù)復(fù)制出來(lái),形成僅數(shù)據(jù)的完整備份

以下介紹幾種常用的實(shí)施方法:

1、compact

2、db.repairDatabase()

3、secondary節(jié)點(diǎn)重同步

4、db.copyDatabase()

一、compat

官網(wǎng)對(duì)該命令的定義:對(duì)集合中的所有數(shù)據(jù)和索引進(jìn)行重寫(xiě)和碎片整理。

使用方法

use yourdatabase;
db.runCommand({ compact : 'yourCollection' });

注意事項(xiàng)

1、在執(zhí)行命令前請(qǐng)保證你有比較新的備份

2、在使用MMAPv1存儲(chǔ)引擎的MongoDB上compact需要數(shù)據(jù)文件所在分區(qū)至少有2G的空閑空間

3、在使用WiredTiger存儲(chǔ)引擎的MongoDB上,compact命令將重寫(xiě)集合和索引,且釋放未使用的空間,但使用MMAPv1存儲(chǔ)引擎的MongoDB上,該命令只對(duì)集合的數(shù)據(jù)文件進(jìn)行碎片整理并重新創(chuàng)建其索引。不會(huì)釋放空間,在使用MMAPv1存儲(chǔ)引擎的MongoDB上回收空間,建議使用第三種方法“secondary節(jié)點(diǎn)重同步”

4、使用MMAPv1存儲(chǔ)引擎的MongoDB中的Capped Collections,是無(wú)法被壓縮的,但使用WiredTiger存儲(chǔ)引擎的MongoDB在執(zhí)行compact時(shí)會(huì)進(jìn)行壓縮。

5、在副本集上運(yùn)行該命令時(shí),要分別在每個(gè)節(jié)點(diǎn)執(zhí)行

6、該命令只能在mongod實(shí)例上執(zhí)行,不能再mongos實(shí)例上運(yùn)行。也就是說(shuō)針對(duì)分片集群的compact操作要分別在每個(gè)分片節(jié)點(diǎn)上執(zhí)行。

7、一般該命令運(yùn)行在secondary節(jié)點(diǎn)上,在執(zhí)行時(shí),會(huì)強(qiáng)制節(jié)點(diǎn)進(jìn)入RECOVERING狀態(tài),RECOVERING狀態(tài)的實(shí)例讀寫(xiě)操作將被阻塞

8、再碰到特殊情況要停止運(yùn)行該命令時(shí),可通過(guò)db.currentOp()查詢(xún)進(jìn)程信息,然后通過(guò)db.killOp()干掉進(jìn)程

9、compact可能會(huì)增加數(shù)據(jù)文件的總大小和數(shù)量,尤其是第一次運(yùn)行時(shí)。但這不會(huì)增加總集合使用的磁盤(pán)空間,因?yàn)榇鎯?chǔ)大小是數(shù)據(jù)庫(kù)文件中分配的數(shù)據(jù)量,而不是文件系統(tǒng)上文件的大小/數(shù)量

10、使用MMAPv1存儲(chǔ)引擎的MongoDB中的Capped Collections,是無(wú)法被壓縮的,但使用WiredTiger存儲(chǔ)引擎的MongoDB在執(zhí)行compact時(shí)會(huì)進(jìn)行壓縮。

二、db.repairDatabase()

官網(wǎng)該命令的定義:通過(guò)丟無(wú)效或損壞的數(shù)據(jù)老重建數(shù)據(jù)庫(kù)和索引。類(lèi)似于文件系統(tǒng)修復(fù)命令fsck。所以此命令主要是用于修復(fù)數(shù)據(jù)。

使用方法

use yourdatabase;
db.repairDatabase();

注意事項(xiàng)

1、db.repairDatabase()主要用于修復(fù)數(shù)據(jù)。若你擁有數(shù)據(jù)的完整副本,且有權(quán)限訪問(wèn),請(qǐng)使用第三種方法“secondary節(jié)點(diǎn)重同步”

2、在執(zhí)行命令前請(qǐng)保證你有比較新的備份

3、此命令會(huì)完全阻塞數(shù)據(jù)庫(kù)的讀寫(xiě),謹(jǐn)慎操作

4、此命令執(zhí)行需要數(shù)據(jù)文件所在位置有等同于所有數(shù)據(jù)文件大小總和的空閑空間再加上2G

5、在使用MMAPv1存儲(chǔ)引擎的secondary節(jié)點(diǎn)上執(zhí)行該命令可以壓縮集合數(shù)據(jù)

6、在使用WiredTiger存儲(chǔ)引擎的MongoDB庫(kù)上執(zhí)行不會(huì)有壓縮的效果

7、再碰到特殊情況要停止運(yùn)行該命令時(shí),可通過(guò)db.currentOp()查詢(xún)進(jìn)程信息,然后通過(guò)db.killOp()干掉進(jìn)程

8、非常消耗時(shí)間

三、secondary節(jié)點(diǎn)重同步

主要思想就是:刪除secondary節(jié)點(diǎn)中指定數(shù)據(jù),使之與primary重新開(kāi)始數(shù)據(jù)同步。當(dāng)副本集成員數(shù)據(jù)太過(guò)陳舊,也可以使用重新同步。數(shù)據(jù)的重新同步與直接復(fù)制數(shù)據(jù)文件不同,MongoDB會(huì)只同步數(shù)據(jù),因此重同步完成后的數(shù)據(jù)文件是沒(méi)有空集合的,以此實(shí)現(xiàn)了磁盤(pán)空間的回收。

使用方法

首先必須確保數(shù)據(jù)有完整的備份。

1、若是primary節(jié)點(diǎn),先強(qiáng)制將之變?yōu)閟econdary節(jié)點(diǎn),否則跳過(guò)此步驟:

 rs.stepdown(120);

2、然后在primary上刪除secondary節(jié)點(diǎn):

 rs.remove("IP:port");

3、刪除secondary節(jié)點(diǎn)dbpath下的所有文件。

4、將節(jié)點(diǎn)重新加入集群,然后使之自動(dòng)進(jìn)行數(shù)據(jù)的同步:

 rs.add("IP:port");

5、等數(shù)據(jù)同步完成后,循環(huán)1-4的步驟可以將集群中所有節(jié)點(diǎn)的磁盤(pán)空間釋放

針對(duì)一些特殊情況,不能下線(xiàn)secondary節(jié)點(diǎn)的,可以新增一個(gè)節(jié)點(diǎn)到副本集中,然后secondary就自動(dòng)開(kāi)始數(shù)據(jù)的同步了。

總的來(lái)說(shuō),重同步的方法是比較好的,第一基本不會(huì)阻塞副本集的讀寫(xiě),第二消耗的時(shí)間相對(duì)前兩種比較短

四、db.copyDatabase()

mongodb還支持在線(xiàn)復(fù)制數(shù)據(jù):db.copyDatabase("from","to","IP:port"),此種方法也能釋放空間,因?yàn)閐b.copyDatabase復(fù)制的數(shù)據(jù),而不是表示在磁盤(pán)中的數(shù)據(jù)文件。但,該命令在4.0版本起被棄用;3.x版本還能繼續(xù)使用

如:

 db.copyDatabase("sourceDB","DistDB");

    將源庫(kù)sourceDB??截悶镈istDB。

當(dāng)然,該命令支持遠(yuǎn)程復(fù)制。

該命令的完整語(yǔ)法為:

db.copyDatabase(<源數(shù)據(jù)庫(kù)名稱(chēng)>, <目標(biāo)數(shù)據(jù)庫(kù)名稱(chēng)>, <源mongodb的IP:port>, <源數(shù)據(jù)庫(kù)連接需要的賬戶(hù)>,<密碼>, <mechanism>)

以上:命令必須在目標(biāo)數(shù)據(jù)庫(kù)服務(wù)器上執(zhí)行。若源數(shù)據(jù)庫(kù)與目標(biāo)數(shù)據(jù)庫(kù)存在于一個(gè)MongoDB服務(wù)器,<源mongodb的IP:port>, <源數(shù)據(jù)庫(kù)連接需要的賬戶(hù)>,<密碼>都可省略。<mechanism>是身份驗(yàn)證類(lèi)型,可選的。

注意事項(xiàng)

1、db.copyDatabase()不會(huì)阻塞源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)數(shù)據(jù)的讀寫(xiě),因此可能會(huì)出現(xiàn)兩份數(shù)據(jù)不一致的情況

2、db.copyDatabase()復(fù)制索引數(shù)據(jù)會(huì)鎖定數(shù)據(jù)庫(kù),此操作也會(huì)對(duì)其他數(shù)據(jù)庫(kù)產(chǎn)生影響

3、db.copyDatabase()不要在mongos實(shí)例中使用

4、db.copyDatabase()不要用于復(fù)制包含分片集合的數(shù)據(jù)庫(kù)

5、在4.0版中更改:db.copyDatabase()僅支持SCRAM進(jìn)行身份驗(yàn)證fromhost,<mechanism>選項(xiàng)。

6、某些不同版本的MongoDB間不支持此種復(fù)制方法,詳見(jiàn)鏈接:https://docs.mongodb.com/manual/reference/method/db.copyDatabase/

除此之外,還有一些方法,像使用導(dǎo)入/導(dǎo)出的方法(mongodump/mongorestore),這種方法在數(shù)據(jù)量非常大的情況是不適用的,因?yàn)閷?dǎo)入導(dǎo)出的方法使用的全量的形式,要保證有足夠的空閑空間來(lái)存放導(dǎo)入的數(shù)據(jù)。

總結(jié)

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

相關(guān)文章

  • mongodb 添加用戶(hù)及權(quán)限設(shè)置詳解

    mongodb 添加用戶(hù)及權(quán)限設(shè)置詳解

    我知道的關(guān)系型數(shù)據(jù)庫(kù)都是有權(quán)限控制的,什么用戶(hù)能訪問(wèn)什么庫(kù),什么表,什么用戶(hù)可以插入,更新,而有的用戶(hù)只有讀取權(quán)限。
    2014-07-07
  • Mongodb自增id實(shí)現(xiàn)方法

    Mongodb自增id實(shí)現(xiàn)方法

    這篇文章主要介紹了Mongodb自增id實(shí)現(xiàn)方法,分析了MongoDB數(shù)據(jù)庫(kù)自增ID的原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • 淺析MongoDB之安全認(rèn)證

    淺析MongoDB之安全認(rèn)證

    MongoDB是基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由C++語(yǔ)言編寫(xiě)。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。默認(rèn)情況下,MongoDB實(shí)例啟動(dòng)運(yùn)行時(shí)是沒(méi)有啟用用戶(hù)訪問(wèn)權(quán)限控制的,在實(shí)例本機(jī)服務(wù)器上都可以隨意連接到實(shí)例進(jìn)行各種操作,MongoDB不會(huì)對(duì)連接客戶(hù)端進(jìn)行用戶(hù)驗(yàn)證
    2021-06-06
  • Mongodb啟動(dòng)命令參數(shù)中文說(shuō)明

    Mongodb啟動(dòng)命令參數(shù)中文說(shuō)明

    這篇文章主要介紹了Mongodb啟動(dòng)命令參數(shù)中文說(shuō)明,本文包括基本配置、主/從參數(shù)、Sharding(分片)選項(xiàng)等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • MongoDB?Server?用戶(hù)名和密碼登錄的操作步驟

    MongoDB?Server?用戶(hù)名和密碼登錄的操作步驟

    MongoDB Server默認(rèn)不進(jìn)行安全認(rèn)證,即任何MongoDB Client都可以連接并擁有操作權(quán)限,這篇文章主要介紹了MongoDB?Server?用戶(hù)名和密碼登錄的步驟,需要的朋友可以參考下
    2024-03-03
  • mongo數(shù)據(jù)集合屬性中存在點(diǎn)號(hào)(.)的解決方法

    mongo數(shù)據(jù)集合屬性中存在點(diǎn)號(hào)(.)的解決方法

    這篇文章主要給大家介紹了關(guān)于mongo數(shù)據(jù)集合屬性中存在點(diǎn)號(hào)(.)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • mongodb運(yùn)維_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    mongodb運(yùn)維_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了mongodb運(yùn)維的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-08-08
  • MongoDB 語(yǔ)法使用小結(jié)

    MongoDB 語(yǔ)法使用小結(jié)

    MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的
    2011-10-10
  • Centos7 yum安裝mongodb實(shí)現(xiàn)步驟詳解

    Centos7 yum安裝mongodb實(shí)現(xiàn)步驟詳解

    這篇文章主要介紹了Centos7 yum安裝mongodb實(shí)現(xiàn)步驟詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 記一次MongoDB性能問(wèn)題(從MySQL遷移到MongoDB)

    記一次MongoDB性能問(wèn)題(從MySQL遷移到MongoDB)

    最近忙著把一個(gè)項(xiàng)目從MySQL遷移到MongoDB,在導(dǎo)入舊數(shù)據(jù)的過(guò)程中,遇到了些許波折,犯了不少錯(cuò)誤,但同時(shí)也學(xué)到了不少知識(shí),遂記錄下來(lái),需要的朋友可以參考下
    2017-03-03

最新評(píng)論

宿松县| 浏阳市| 治县。| 安宁市| 榆树市| 肇东市| 安吉县| 公主岭市| 竹溪县| 屏山县| 安仁县| 揭西县| 获嘉县| 万年县| 苏尼特左旗| 秭归县| 永安市| 孟连| 礼泉县| 龙门县| 松滋市| 静乐县| 夏河县| 凯里市| 光泽县| 积石山| 桐梓县| 芮城县| 阳西县| 庄浪县| 无极县| 诏安县| 黔西县| 社会| 庆元县| 西乌| 巴彦淖尔市| 山阳县| 方正县| 凤阳县| 无棣县|