新聞中心
MongoDB是一款非關(guān)系型數(shù)據(jù)庫,它的可擴(kuò)展性和高性能性能使其在現(xiàn)代應(yīng)用程序中越來越受歡迎。然而,隨著數(shù)據(jù)量增長,數(shù)據(jù)庫的容量也會不斷增加,這可能會給數(shù)據(jù)存儲和管理帶來各種問題。因此,為解決這些問題,我們需要一種方法來定期清除MongoDB數(shù)據(jù)庫中不再需要的數(shù)據(jù)。在本篇文章中,我們將介紹如何使用MongoDB定時清除數(shù)據(jù),以輕松解決數(shù)據(jù)庫容量問題。

10年積累的網(wǎng)站設(shè)計、網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有來鳳免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
一、MongoDB定時清除數(shù)據(jù)的必要性
隨著數(shù)據(jù)量的增長和變更,MongoDB數(shù)據(jù)庫中可能會存在許多舊數(shù)據(jù)記錄和無用數(shù)據(jù),這些數(shù)據(jù)可能會占用大量的磁盤空間,使得MongoDB數(shù)據(jù)庫容量不斷增長。當(dāng)數(shù)據(jù)庫容量達(dá)到極限時,將無法再添加新的數(shù)據(jù)記錄。因此,為了避免這種情況發(fā)生,我們需要定期清除不再需要的數(shù)據(jù)記錄。
定期清除無用數(shù)據(jù)記錄還有其他好處。這可以提高數(shù)據(jù)庫的性能。刪除不再需要的數(shù)據(jù)記錄可以減少數(shù)據(jù)庫中的數(shù)據(jù)量,從而提高查詢和讀取數(shù)據(jù)的速度。這可以改善數(shù)據(jù)安全性。定期清除無用數(shù)據(jù)記錄可以減少數(shù)據(jù)泄露和安全漏洞的幾率。
二、如何使用MongoDB定時清除數(shù)據(jù)
MongoDB提供了一些內(nèi)置工具和API來清除數(shù)據(jù)庫中不再需要的數(shù)據(jù)記錄。這些工具和API包括刪除命令、刪除文檔和刪除等。但是,手動刪除數(shù)據(jù)記錄是一項枯燥和繁瑣的任務(wù),不適合大規(guī)模數(shù)據(jù)庫。
為了自動執(zhí)行定期數(shù)據(jù)清除任務(wù),我們可以編寫一個腳本來定期刪除數(shù)據(jù)庫中的無用數(shù)據(jù)記錄。這里介紹一個使用Python語言編寫的腳本示例:
“`
import pymongo
from datetime import datetime, timedelta
client = pymongo.MongoClient(“mongodb://127.0.0.1:27017/”)
db = client[“test_db”]
collection = db[“test_collection”]
def delete_old_data():
# 定義需要刪除的時間范圍(刪除30天以前的數(shù)據(jù))
limit_date = datetime.now() – timedelta(days=30)
delete_result = collection.delete_many({‘date’: {‘$lt’: limit_date}})
print(‘deleted %s documents’ % delete_result.deleted_count)
delete_old_data()
“`
這個腳本可以刪除MongoDB數(shù)據(jù)庫中的“test_collection”中,生成日期早于30天的數(shù)據(jù)。我們可以將此腳本添加到cron作業(yè)中,以每天定期執(zhí)行。
三、
使用MongoDB定時清除數(shù)據(jù),可以輕松解決數(shù)據(jù)庫容量問題。除了提高數(shù)據(jù)庫的性能和安全性外,定期清除無用數(shù)據(jù)記錄還可以提高數(shù)據(jù)庫的可維護(hù)性。我們可以使用內(nèi)置的MongoDB刪除工具和API,也可以為自動化刪除任務(wù)編寫一個簡單的腳本。無論使用哪種方法,定期清除無用數(shù)據(jù)記錄對于確保數(shù)據(jù)庫健康運(yùn)行至關(guān)重要。
相關(guān)問題拓展閱讀:
- mongodb刪除數(shù)據(jù)庫會刪除索引嗎
- mongodb 刪除后為什么不釋放空間
mongodb刪除數(shù)據(jù)庫會刪除索引嗎
刪除數(shù)據(jù)庫會刪掉整個庫下的所有對象,索引當(dāng)然也會刪除了
MongoDB 增加用戶 刪除用戶 修改用戶 讀寫權(quán)限 只讀權(quán)限,
MongoDB用戶權(quán)限分配的操作是針對某個庫來說的。–這句話此察很重要。
1、 進(jìn)入ljc 數(shù)據(jù)庫:
use ljc; –
www.2cto.com-
ljc為數(shù)據(jù)庫名稱。
2、添加用戶(讀寫權(quán)限,readOnly–>false):
db.addUser(“java”,”java”);
3、 查看一下所有的用戶
db.system.users.find();
{ “_id” : ObjectId(“4e02a89fb841deb5fda3e5e2”), “user” : “java”, “readOnly” : fa
lse, “pwd” : “59cf7cc156874cbd35cbf569” }
4、用戶授權(quán)。
db.auth(“java”,”java”);
顯示為1 表示授權(quán)成功,0表示不成功。
5、 添加用戶(只讀權(quán)限,readOnly–>true):
db.addUser(“java1″,”森游茄java1”,true);
db.system.users.find();
{ “_id” : ObjectId(“4e02a89fb841deb5fda3e5e2”), “user” : “java”, “readOnly” : fa
lse, “pwd” : “59cf7cc156874cbd35cbf569” }
{ “_id” : ObjectId(“4e02aae6b841deb5fda3e5e3”), “user” : “java1”, “readOnly” : t
rue, “pwd” : “fca6bda05c87a72cce0a4a6458d1e266” }
注意上面標(biāo)紅的位置的readOnly 只讀于可寫是有區(qū)別的。
6、更改密碼(為已經(jīng)存在的用戶更改密碼):
db.addUser(“java”,”java1″);
7、刪除用戶:
db.system.users.remove({user:”java1″});
關(guān)于庫權(quán)限,如果用戶需要全局的權(quán)限,可以在admin和local的兩個庫里添加,但是需要重啟庫,
有待驗證。
==========================================================================
MongoDB增加用戶認(rèn)證: 增加用戶、刪除用戶、修改用戶密碼、讀寫權(quán)限、只讀權(quán)限
說明:增加用戶是針對數(shù)據(jù)庫進(jìn)行操作
1.進(jìn)入到數(shù)據(jù)庫 use dbname
2.針對當(dāng)前數(shù)據(jù)庫添加用戶 權(quán)限是針對當(dāng)前數(shù)據(jù)
1.添加并驗證用戶
> use admin
> db.addUser(“zjx”,”tsjianxin”)
> db.auth(“zjx”,”tsjianxin”)
2.查看已存在的用戶
> db.system.users.find()
3.現(xiàn)在來給另一個數(shù)據(jù)庫51cv配置一個讀寫權(quán)限的-
www.2cto.com-
用戶
> use 51cv
> db.addUser(“51cvrw”,”51cv”)
…”readOnly” : false…
4.配置一個只讀權(quán)限的用戶
> use 51cv
> db.addUser(“51cvr”,”51cv”,true)
> db.system.users.find()
…”readOnly” : true…
5.刪除磨輪用戶
> use dbname (admin or 51cv ,etc)
> db.system.users.remove({user:”haha”})
> db.system.users.find()
6.用戶登錄數(shù)據(jù)庫測試
for:mongod dbname -u uname -p password
mongo admin -u zjx -p tsjianxin
mongodb 刪除后為什么不釋放空間
原因是mongodb設(shè)計的本身機(jī)制問題造成的。
首先,mongodb在創(chuàng)建數(shù)據(jù)文件時,會根據(jù)64M,128M,256M…遞增的方式產(chǎn)生數(shù)據(jù)文件,更大數(shù)據(jù)文件為2G,增大到2G之后,后面新增的數(shù)據(jù)文件都占用2G空間。
當(dāng)刪除某一個表的數(shù)據(jù)時,mongodb會標(biāo)記你刪除該表所在數(shù)據(jù)文念或件位置為:該部分的數(shù)據(jù)已經(jīng)刪除,但是不會釋放該數(shù)據(jù)文件櫻高桐所占用的空間,當(dāng)有新的數(shù)據(jù)進(jìn)來之后,會將數(shù)據(jù)分配到該數(shù)據(jù)文件中。
一方面是:刪除文件后不產(chǎn)生多余的數(shù)據(jù)碎片,
另一方面不做數(shù)據(jù)的大規(guī)模遷移,減少mongodb內(nèi)部的IO操作。
所以在刪除數(shù)據(jù)表之后,會發(fā)現(xiàn)系統(tǒng)空間并沒有釋放,從mongodb本身看,空間已經(jīng)釋放了,被刪除數(shù)據(jù)的空間依然可用;
但從系統(tǒng)角度看,空間沒有釋放,并不會影響數(shù)據(jù)的脊坦存儲。
比較慢的方法:可以嘗試給這個數(shù)據(jù)庫增加一個 replica-set,枯鄭等新加的結(jié)點(diǎn)和老數(shù)據(jù)同步了之后就可以停掉老數(shù)據(jù)庫并刪除老數(shù)據(jù),以新結(jié)點(diǎn)對外提供服務(wù),此時數(shù)據(jù)庫空間應(yīng)該已經(jīng)整理好并壓縮到最小了。這個過程自己并不可控,200 GB 的話要同步多久無法預(yù)估,但是不會太影響 mongodb 繼續(xù)喊判提供服務(wù)。
比較快的方法:用 mongodump/mongoexport 導(dǎo)出所有數(shù)據(jù),可以遠(yuǎn)程導(dǎo)出,倒完之后再用 mongorestore/mongoimport
恢復(fù)數(shù)據(jù)
。這個操作會導(dǎo)致 mongodb 鎖數(shù)據(jù)庫,無法對外提供服務(wù),如果鎖了也無所謂可以用這個方法,200 GB 說不定需要小半天的時間,得自己估量一下。
另外沒滲頌,db.repairDatabase() 效果很有限,且會導(dǎo)致長時間鎖數(shù)據(jù)庫,不用為好。mongodb 解決磁盤問題比較好的方法是用 auto-sharding 將數(shù)據(jù)分?jǐn)偟蕉嗯_機(jī)器上,不過這個事情得提前計劃好,一旦數(shù)據(jù)庫已經(jīng)非常大了,能做的事情就很少了。
關(guān)于mongo按時間刪除數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
本文標(biāo)題:MongoDB定時清除數(shù)據(jù),輕松解決庫容量問題(mongo按時間刪除數(shù)據(jù)庫)
文章地址:http://www.dlmjj.cn/article/dhpghic.html


咨詢
建站咨詢
