资讯专栏INFORMATION COLUMN

(翻译) MongoDB(3) 固定集合

Godtoy / 2975人阅读

摘要:固定集合使用一种类似循环缓冲区的方式进行工作。行为顺序插入固定集合保证保存的插入顺序。在固定集合中缓存了少量的数据。聚合聚合管道操作不能将结果写入到固定集合中。警告这个命令将获得全局写锁,并且将会阻止其他操作,直至命令完成。

概述

固定集合是固定大小的集合,支持高吞吐量的基于插入顺序的插入和检索文档操作。固定集合使用一种类似循环缓冲区的方式进行工作。一旦集合填满了其分配的空间,那么新的文档将会覆盖集合中最老的文档。
创建固定集合可通过查看createCollection()或者create来查看更多信息。

行为 顺序插入

固定集合保证保存的插入顺序。因此,在顺序插入的时候返回文档不需要索引。

自动删除老文档

为新的文档腾出空间,固定集合会自动移除集合中最老的文档,而不用任何脚本或者明确的移除操作。例如, oplog.rs 集合在副本集中使用固定集合存储日志的操作。考虑以下固定集合的使用情形:

保存大容量系统生成的日志信息,在一个没有索引的固定集合中插入文档与直接在文件系统中写入日志信息所花费的时间非常接近。此外,内置的先入先出策略保证了事件的顺序,同时管理内存的使用。

在固定集合中缓存了少量的数据。由于是缓存是读取而不是大批量的写,you would either need to ensure that this collection always remains in the working set (即在RAM中) or accept some write penalty for the required index or indexes.

_id 索引

固定集合默认情况下有一个_id字段和_id字段索引。

限制和建议 更新

如果你计划在固定集合中更新文档,创建一个索引,这样更新操作不需要请求集合扫描。

文档大小

在3.2版本中改变
如果一个更新或者替换操作将会改变文档的大小,那么操作将会失败。

文档删除

你不能从一个固定集合中删除文档。从一个集合中移除所有的文档,使用drop()方法来删除集合和重建固定集合。

分片

你不能分片一个固定集合。

查询效率

使用自然顺序从集合中高效的检索最近插入的元素。这(有点)类似于在一个日志文件上跟踪。

聚合$out

聚合管道操作$out不能将结果写入到固定集合中。

程序 创建一个固定集合

你必须使用db.createCollection()方法显式的创建一个固定集合。这是 Mongo Shell 一个创建命令,当创建一个固定集合的时候,你必须指定集合的最大值(以字节为单位),MongoDB将会对集合进行预先分配。这个固定集合的大小包含用于内部开销的少量空间:

db.createCollection( "log", { capped: true, size: 100000 } )

如果size字段小于或者等于4096,然后集合的上限是4096字节。否则,MongoDB将会提升size的大小为256的整倍数。
此外,你也可以在下面的文档使用max字段为集合指定一个文档的最大值。

db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )

重要:即使你为文档指定最大值,size参数也是必须的。如果一个集合在达到最大文档数量之前,它的大小达到了最大值,那么MongoDB将会移除最老的文档.

查询固定集合

如果你想在一个固定集合中执行没有指定排序的find命令。那么MongoDB保证查询出来的结果顺序跟插入顺序是相同的。
使用反向插入顺序检索文档,使用find()方法带着$natural参数设置为-1sort()方法, 如以下示例所示:

db.cappedCollection.find().sort( { $natural: -1 } )
检测是否为固定集合

使用isCapped()方法来判断一个集合是否是固定集合:

db.collection.isCapped()
将一个集合转化为固定集合

你可以使用convertToCapped命令来将一个非固定集合转化为固定集合:

db.runCommand({"convertToCapped": "mycoll", size: 100000});

在固定集合中size参数指定的大小单位为字节。

警告:这个命令将获得全局写锁,并且将会阻止其他操作,直至命令完成。

在指定的时间之后自动移除数据

当数据过期之后,为了进一步增强灵活性,考虑到MongoDB的TTL索引。综上所述,集合通过设置TTL来过期数据。这些索引允许你从正常的集合中使用特定的类型,基于日期类型的字段值和TTL值索引来过期和移除数据。
TTL集合不兼容固定集合。

Tailable 游标

你可以在固定集合中使用Tailable 游标,类似于Linux的tail -f命令,Tailable 游标 会追踪固定集合的末尾。作为新的文档插入到固定集合,你可以使用Tailable 游标来继续检索文档。
在创建Tailable 游标的时候可以查看Tailable 游标来获取更多信息。

下一章:https://segmentfault.com/a/11...
本文链接:https://docs.mongodb.com/manu...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18887.html

相关文章

  • (翻译) MongoDB(14) 在 Debian 上安装MongoDB社区版

    摘要:概述使用这个教程在或者使用软件包安装社区版虽然包含自己的软件包但官方的社区版包通常是最新的本安装教程仅支持位操作系统详细信息请参阅平台支持这些软件包可以与其它版本一起工作。 概述 使用这个教程在 Debian 7 Wheezy 或者 Debian 8 Jessie 使用 .deb 软件包安装 MongoDB 社区版. 虽然 Debian 包含自己的 MongoDB 软件包, 但官方的 ...

    gaara 评论0 收藏0
  • (翻译) MongoDB(13) 在 Ubuntu 上安装MongoDB社区版

    摘要:概述使用这个教程在使用软件包安装社区版包含自己的软件包但官方的社区版包通常是最新的平台支持本安装教程仅提供位长期支持版本例如,等等这些软件包可能将和其它版本一起工作然后它们并不支持软件包在自己的存储库中提供官方支持软件包此存储库包含以下软件 概述 使用这个教程在 LTS Ubuntu Linux 使用 .deb 软件包安装 MongoDB 社区版. Ubuntu 包含自己的 Mong...

    wuyumin 评论0 收藏0
  • (翻译) MongoDB(2) 数据库和集合

    摘要:例如,在集合中的数据纪录在数据库中的集合。因此,你可以切换到一个不存在的数据库,并且在中执行以下操作如果它们不存在的时候,创建了数据库和集合。限制数据库名字的列表,请参阅命名限制。集合在集合中存储文档。集合是类似关系数据库的表。 MongoDB 存储BSON文档。例如,在集合中的数据纪录;在数据库中的集合。showImg(https://segmentfault.com/img/bVC...

    GeekGhc 评论0 收藏0
  • MongoDB指南---14、特殊的索引和集合固定集合、TTL索引、全文本索引

    摘要:固定集合不能被分片。为固定集合指定文档数量限制时,必须同时指定固定集合的大小。没有索引的集合默认情况下,每个集合都有一个索引。 上一篇文章:MongoDB指南---13、索引类型、索引管理下一篇文章:MongoDB指南---15、特殊的索引和集合:地理空间索引、使用GridFS存储文件 本章介绍MongoDB中一些特殊的集合和索引类型,包括: 用于类队列数据的固定集合(capped...

    cikenerd 评论0 收藏0
  • MongoDB指南---14、特殊的索引和集合固定集合、TTL索引、全文本索引

    摘要:固定集合不能被分片。为固定集合指定文档数量限制时,必须同时指定固定集合的大小。没有索引的集合默认情况下,每个集合都有一个索引。 上一篇文章:MongoDB指南---13、索引类型、索引管理下一篇文章:MongoDB指南---15、特殊的索引和集合:地理空间索引、使用GridFS存储文件 本章介绍MongoDB中一些特殊的集合和索引类型,包括: 用于类队列数据的固定集合(capped...

    QLQ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<