mongodb 设置自动删除过期数据
2017-02-09 14:47
495 查看
Time To Live(TTL) 集合
MongoDB 2.2 引入一个新特性–TTL 集合,TTL集合支持失效时间设置,或者在某个特定时间,
集合自动清除超时文档,者用来保存一个诸如session会话信息的时候非常有用。
如果想使用TTL集合,用用到 expireAfterSeconds 选项
然后存储数据入库
mongodb 会在 createdAt 数值大于 expireAfterSeconds 指定的值。
首先建立索引,设置 expireAfterSeconds 为 0
然后存储数据
expireAt 的值为特定的时间值,等时间到达expireAt的值时,这个文档就 失效了。
1 设置文档在66秒后过期。
2 设置特定时间
注意,上面的时间使用的是datetime.datetime.utcnow() 而不是 datetime.datetime.now(), 这两者的时间是有差别的,数据存入mongodb的客户端中可以看得到。
现在时间是 2017-02-09 14:36
第一条数据使用 datetime.datetime.utcnow() 的时间
第二条数据使用 datetime.datetime.now() 的时间
所以,第二条数据会在晚上 10点多才会过期。
修改成特定时间过期的方式与pymongo中的类似。
参考文档:
python - Mongodb TTL expires documents early
http://www.itgo.me/a/8424428520865988282/mongodb-ttl-expires-documents-early
MongoDB自动删除过期数据–TTL索引
http://blog.csdn.net/jianlong727/article/details/54631124
MongoDB 2.2 引入一个新特性–TTL 集合,TTL集合支持失效时间设置,或者在某个特定时间,
集合自动清除超时文档,者用来保存一个诸如session会话信息的时候非常有用。
如果想使用TTL集合,用用到 expireAfterSeconds 选项
mongo
官网使用文档设置方法:Expire Documents after a Specified Number of Seconds
首先创建索引,设置过期时间db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
然后存储数据入库
db.log_events.insert( { "createdAt": new Date(), "logEvent": 2, "logMessage": "Success!" } )
mongodb 会在 createdAt 数值大于 expireAfterSeconds 指定的值。
Expire Documents at a Specific Clock Time
与上面的设置类似首先建立索引,设置 expireAfterSeconds 为 0
db.log_events.createIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } )
然后存储数据
db.log_events.insert( { "expireAt": new Date('July 22, 2013 14:00:00'), "logEvent": 2, "logMessage": "Success!" } )
expireAt 的值为特定的时间值,等时间到达expireAt的值时,这个文档就 失效了。
pymongo
由于自己使用python进行mongodb的使用,程序如下1 设置文档在66秒后过期。
from pymongo import MongoClient import pymongo import datetime client = MongoClient("10.168.99.118", 27017) collection = client.test.expire collection.create_index([("time", pymongo.ASCENDING)], expireAfterSeconds=66) data = { "one": 1, "two": 235, "time": datetime.datetime.utcnow(), } collection.insert(data)
2 设置特定时间
from pymongo import MongoClient import pymongo import datetime client = MongoClient("10.168.99.118", 27017) collection = client.test.expire collection.create_index([("time", pymongo.ASCENDING)], expireAfterSeconds=0) data = { "one": 1, "two": 235, "time": datetime.datetime.utcnow()+ datetime.timedelta(seconds=66), } collection.insert(data)
注意,上面的时间使用的是datetime.datetime.utcnow() 而不是 datetime.datetime.now(), 这两者的时间是有差别的,数据存入mongodb的客户端中可以看得到。
现在时间是 2017-02-09 14:36
第一条数据使用 datetime.datetime.utcnow() 的时间
第二条数据使用 datetime.datetime.now() 的时间
所以,第二条数据会在晚上 10点多才会过期。
mongoengine
自己使用的Django中的数据库也是mongodb。from mongoengine import * import datetime import time connect('test', host='10.168.99.118', port=27017) class Session(Document): created = DateTimeField(default=datetime.datetime.utcnow()-datetime.timedelta(seconds=60)) last = DateTimeField(default=datetime.datetime.utcnow()) num = IntField(unique=True) count = IntField(default=0) meta = { 'indexes': [ {'fields': ['created'], 'expireAfterSeconds': 66} ] } s = Session.objects(num=51) if len(s)>0: print(s[0].count) else: b = s[0] b.num = 51 b.count = 2 b.save()
修改成特定时间过期的方式与pymongo中的类似。
参考文档:
python - Mongodb TTL expires documents early
http://www.itgo.me/a/8424428520865988282/mongodb-ttl-expires-documents-early
MongoDB自动删除过期数据–TTL索引
http://blog.csdn.net/jianlong727/article/details/54631124
相关文章推荐
- mongodb 设置自动删除过期数据
- 【mongodb】设置自动删除过期数据
- MongoDB自动删除过期数据--TTL索引
- mongodb删除过期数据
- Mongodb 实现数据自动在后台删除--根据一个截止时间
- 如何在Mongodb中实现数据超时自动删除功能?
- elasticsearch 过期数据自动删除Java代码
- PowerShell自动删除过期数据
- Mongodb--TTL索引(Mongodb自动删除数据)
- orcal设置了自动提交不小心删除了数据的恢复方法
- 如何在Mongodb中实现数据超时自动删除功能?
- 使用事务实现--转账问题:从0001账户转1000块到0002账户。打开"隐式事务":设置为开,删除表中数据,回滚!(默认情况为关,如果打开了则不自动提交,学要手动提交)
- 向表中插入数据的时候,自动删除重复的数据
- Access和SQL server开启表间关系,并实现更新或删除母表数据自动更新或删除子表数据
- Asp 操作Cookies(包括设置[赋值]、读取、删除[设置过期时间])
- 删除表数据并重置自动编号列TRUNCATE TABLE
- Oracle学习笔记[1] - 自动逻辑备份并删除过期备份
- DROP TABLESPACE时数据文件是否会自动删除
- sql删除过期数据
- microsoft dynamics crm 4.0 数据定时删除设置