本文主要是介绍mongodb固定集合、TTL集合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
mongodb固定集合、TTL集合
在数据量较少的情况下,或者只需要保存部分的数据,使用固定集合不失为一个比较好的选择。
- 插入、查询的速度非常快。
创建固定集合
有点类似数据结构中的循坏队列,先进先出方式。满队列删除原来的元素。
固定集合与普通集合有所不同,需要显示的创建,指定size,max参数。当其中某个条件满足,将会删除最先进来的元素。
-
db.createCollection(“test_log”,{capped:true,size:2,max:2})
查看索引:
mongos> db.test_log.getIndexes()
[
{
“v” : 1,
“key” : {
“_id” : 1
},
“name” : “id“,
“ns” : “admin.test_log”
}
] 自然排序的方式,在mongodb3.0以上默认采用_id作为索引。
- 也可以自定义索引。
转换为固定集合
普通集合可以通过 convertToCapped将普通集合转为固定集合
db.runCommand({convertToCapped:”test_2”,size:10,max:3})
但是固定集合的特点是:
不能进行分区,因为它本身就是不是针对大数据集合的,所以,也许这个时候可以考虑使用TTL索引。
TTL集合
通过创建TTL索引,就构建了一个TTL集合,索引建立的原则:
- 索引字段必须为时间类型
- 在本地上进行测试,进行多个分片,片键选择为key1+timeKey,成功分片。
- 确保数据保存在一定范围内,其实主要是后台有一个线程,平均60s执行一次,对超期的数据进行删除。所以,这部分也有性能的损耗,需要权衡。
建立语句:
db.ttl_test.ensureIndex({“time”:1},{expireAfterSeconds:20}})
设置其为20s后删除数据,真实情况下可能并不能精确到20s.
选择
对于大数据量来说,希望只保存几个月的数据,固定集合与TTL貌似都是对数据进行的限制。但是固定集合无法精确到具体的时间,文档的条数与文档大小都不能确定。主要是固定集合无法分片,对于需要经常查询的可能就不是太合适。
当然仅仅保存log文件,查看最新的log还是不错的选择
这篇关于mongodb固定集合、TTL集合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!