如何在Mongodb中实现数据超时自动删除功能

如何在Mongodb中实现数据超时自动删除功能,第1张

在MongoDB内部,有一个特殊的索引,称为TTL索引,通过该索引便可以实现上面的功能。什么事TTL 索引?怎么创建一个TTL索引呢?

TTL索引是一个特殊的索引,目前只支持在单个的字段上设置索引,而且该字段必须是日期类型或者是包含日期类型的数组类型。我们可以通过createIndex方法来创建一个TTL索引,具体如下所示:

db.collection.createIndex({“createtime”:1},{expireAfterSeconds:60})

通过设置expireAfterSeconds来控制文档的过期时间,后面的数字单位为秒哦!其实,也就是mongodb在后台起了一个线程不断的去查询并删除过期的文档。

在对超过百万条记录的集合进行聚合 *** 作。DBObjectmatch=(DBObject)JSON.parse("{$match:{logType:{'$in':[5,9]}}}")DBObjectgroup=(DBObject)JSON.parse("{$group:{'_id':'$domainUrl','count':{'$sum':1}}}")AggregationOutputoutput=logCollection.aggregate(match,group)偶尔会发生Readtimedout异常。com.mongodb.MongoException$Network:Readoperationtoserver/192.168.10.202:27017failedondatabaseadLogTableatcom.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:253)atcom.mongodb.DB.command(DB.java:261)atcom.mongodb.DB.command(DB.java:243)Causedby:java.net.SocketTimeoutException:Readtimedoutatjava.net.SocketInputStream.socketRead0(NativeMethod)atjava.net.SocketInputStream.read(SocketInputStream.java:152)通过多次测试,发现执行一次聚合平均时间为5s,超过5s时就会报错!然后查看MongoDB的配置信息:socket-timeout="5000"//5ssocket-timeout的默认配置为0,也就是没有限制。没有超时限制,系统出了问题也不容易发现,应该根据实际情况,给出合理的超时时间。通过多次测试发现最长执行时间为6秒,就把超时时间设置成了10000。

这不是mongodb无法启动,是你还没有启动mongodb就来连接使用它了,肯定是不成功的。 先去mongodb的bin目录下运行mongod --dbpath XXXX/data 来启动mongodb,然后再来连接mongodb。

在MongoDB中,文档是对数据的抽象,它被使用在Client端和Server端的交互中。所有的Client端(各种语言的Driver)都会使用这种抽象,它的表现形式就是我们常说的BSON(Binary JSON )。

BSON是一个轻量级的二进制数据格式。

MongoDB能够使用BSON,并将BSON作为数据的存储存放在磁盘中。

当Client端要将写入文档,使用查询等等 *** 作时,需要将文档编码为BSON格式,然后再发送给Server端。同样,Server端的返回结果也是编码为BSON格式再放回给Client端的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7754541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存