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数据库)