为了账号安全,请及时绑定邮箱和手机立即绑定

.NET操作 MongoDb,如何物理删除数据?remove方法是不行的

.NET操作 MongoDb,如何物理删除数据?remove方法是不行的

POPMUISE 2018-12-07 07:38:20
/// /// /// /// /// /// /// 条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等 /// public static WriteConcernResult DeleteAll(string connectionString, string databaseName, string collectionName, IMongoQuery query) { MongoServer server = MongoServer.Create(connectionString); //获取数据库或者创建数据库(不存在的话)。 MongoDatabase database = server.GetDatabase(databaseName); WriteConcernResult result; using (server.RequestStart(database))//开始连接数据库。 { MongoCollection myCollection = database.GetCollection(collectionName); if (null == query) { result = myCollection.RemoveAll(); } else { result = myCollection.Remove(query); } } return result; } DeleteAll 以上是删除日志数据方法。 场景: 日志生成功能,数据量很大,目前采取按时间创建数据库,每个月为一个新的数据库,代表当月的日志。例如:T_RunLog_201512,T_RunLog_201511,,数据库名字。 实现功能:定时删除数据,跨月删除直接删除数据库,例如:删除11月份的:database.drop(); public static bool DeleteDb(string connectionString, string databaseName) { MongoServer server = MongoServer.Create(connectionString); //获取数据库或者创建数据库(不存在的话)。 MongoDatabase database = server.GetDatabase(databaseName); bool flag = true; try { database.Drop(); } catch (Exception) { flag = false; throw; } return flag; } 问题: 删除一个月中几天的数据,不删除数据库,但MongoDb删除数据为逻辑删除,非物理删除,原来的日志文件还占用磁盘空间(妈的,10天就有20G的数据),怎么搞, 一句话表述我的问题:Mongodb如何物理删除一个集合中的数据,使得文件不占用磁盘空间(磁盘整理db.repairdatabase()方法就不用说了,性能太低)
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

//使用database.RunCommand命令 在驱动程序中运行命令 db.RunCommand(compact);//收回被删除的库空间 db.MontiorLog__RunLog.stats()   repairDatabase() MontiorLog__RunLog db.runCommand({ compact : 'Root' })db.runCommand({ "compact" : "Root" })   comoact命令可以压缩单个集合和它的索引。以前压缩数据库的唯一办法就是执行这个数据库的repair!这个命令类似与Oracle的去高水位线!具体用法:>use testdb> db.myCollection.runCommand('compact');> db.runCommand({ compact : 'myCollection' });压缩比率截图:   压缩比率=348160/1044480*100%=33% compact优点:1.compact只压缩需要的Collection,压缩期间产生的临时文件会就相对较少,对磁盘剩余空间需求较小; 2.compact去除Collection所在文件的碎片,其重建索引的cost也变小了,对内存的需求也减少; compact注意点:1.compact操作是不会释放磁盘空间的,而是把释放的空间继续给MongoDB使用;2.compact操作进行时会产生对应的锁,使用mongostat可以查看,所以该操作最好在业务量最少下进行;3.限制集合{Capped Collection}是不需要compact的
查看完整回答
反对 回复 2018-12-09
  • 1 回答
  • 0 关注
  • 806 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信