有一些表,存太老的数据没有用,可以用MongoDB提供的一种索引,可以将以前的数据给删掉
db.purge_cache.createIndex({"created_on": 1}, {expireAfterSeconds: 60*60})
可以直接在mongo的shell里直接创建这种索引,这种索引的意思就是在Mongo会判断created_on这个字段的值,如果超过设置的expireAfterSeconds这个时间,就会被删除,mongo会启动一个线程一直扫描创建了这个索引的表,应该是60s跑一遍,在数据库负载比较高的情况下,这种索引会影响性能。
像这条创建的索引,指的就是判断created_on,过期时间为60*60也就是3600秒,就是创建一个小时后,数据会删除。
上面的操作方法是直接操作mongo的shell,但是在写代码使用MongoEngine建表时该如何创建这种索引呢?
``` class PurgeCache(Document): """ purge cache 记录 """ meta = { "indexes": ["zone", {"fields": ["created_on"], "expireAfterSeconds": 3600}] } zone = ReferenceField(Zones, dbref=True) zone_name = StringField() purge_everything = BooleanField() files = ListField() created_on = DateTimeField(default=datetime.datetime.utcnow()) modified_on = DateTimeField(default=datetime.datetime.utcnow())
```
如上例,直接在meta的indexes里加上一项就可以了
```
{"fields": ["created_on"], "expireAfterSeconds": 3600}]
}
```
>需要特别注意的是,创建这种过期索引的字段,必须是时间格式,就如例子中所示,必须是created_on或modified_on这种时间格式,普通的格式上不能创建,因为mongo无法将普通格式的值与时间做比较。
MongoEngine官方文档:[http://docs.mongoengine.org/guide/defining-documents.html](http://docs.mongoengine.org/guide/defining-documents.html)
点击下载
点击下载
京ICP备18016372号-1