mongodb特殊的索引和集合再整理[轉]


  • Lv 1

    mongodb特殊的索引和集合

    • 用于类队列数据的固定集合
    • 用于缓存的TTL索引
    • 用于简单字符串搜索的全文索引
    • 用于二维平面和球体空间的地理空间索引
    • 用于存储大文件的GridFS

    一、固定集合

    mongodb的普通集合是动态创建的,而且可以自动增长以容纳更多的数据。而固定集合需要事先创建好,而且它的大小是固定的,它的行为类似于循环队列。如果已经没有空间了,最老的文档会被删除以释放空间,新插入的文档会占据这块空间,也就是说,当固定集合被占满时,如果再插入新文档,固定集合会自动将最老的文档从集合中删除。固定集合的数据被顺序写入磁盘固定空间,因此它们在碟式磁盘上的写入素服非常快,尤其是集合拥有专用磁盘时,(这样就不会因为其他集合的一些随机写操作而中断)

    固定集合需要注意的事项: 不同于其他集合,固定集合必须事先创建好,才能使用,在创建固定集合的时候可以指定固定集合的大小和允许的最大文档数量,集合大小时必须的,否则会报错。并且固定集合不能进行分片。

    普通集合也可以通过命令转换为固定集合,但是这转化你是单方向的,无法再将固定集合转换为非固定集合

    1. 创建固定集合
      db.createCollection(<集合名称>,{"capped":true,"size":<集合大小>,["max":<文档数量>]})
    2. 将普通集合转换为固定集合
      db.runCommand({"convertToCapped":<集合名称>,"size":<集合大小>,["max":<文档数量>]})
    3. 自然排序 对固定集合可以进行一种特殊的排序,成为自然排序,自然排序返回的结果的顺序就是文档在磁盘上的顺序。对于其它集合来说自然排序意义不大,因为文档的位置经常变化
      db.<固定集合名称>.find(<查询条件>).sort({"$natural":-1})
    4. 循环游标 循环游标是一种特殊的游标,当循环游标的结果集被取光后,游标不会被关闭,循环游标的灵感来自tail -f命令,会尽可能地持续提取输出结果,因为这个特性,当有新文档插入时循环游标会继续取到结果,循环游标只能用在固定集合。
    5. 没有_id索引的集合 默认情况下每个集合都有一个_id索引,但是如果再调用createCollection创建集合时指定autoIndexId选项为false,创建结婚时就不会自动在_id上创建索引。 如果创建一个没有_id索引的结婚,那就永远都不能复制它所在的mongod了,复制操作要求每个集合上都有_id,能够唯一表示集合中每个文档是非常重要的。

    二、TTL索引

    如果需要更加灵活的老化移出系统,可以使用ttl索引,(time-to-live idnex,具有生命周期的索引),可以为每个文档设置一个超时时间。一个文档达到预设值的老化程度之后就会被删除。这种类型的索引对于缓存问题非常有用。

    本帖部分内容已隐藏,请登入并回覆,以查看隐藏内容!


  • 註冊用戶

    想看~快給我看~芝麻開門


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待