///
///
///
///
///
///
/// 条件查询。 调用示例: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的
- 1 回答
- 0 关注
- 806 浏览
添加回答
举报
0/150
提交
取消