美文网首页mongodb
【mongoDB】MongoDB固定集合(Capped Coll

【mongoDB】MongoDB固定集合(Capped Coll

作者: 放纵不基 | 来源:发表于2023-04-15 00:57 被阅读0次

简单介绍一下MongoDB固定集合(Capped Collections)

MongoDB的Capped Collections是一种固定大小的集合。

与普通集合不同,Capped Collections在达到预定大小时,会自动覆盖最旧的文档,以便为新文档腾出空间。
这种特殊的集合类型适用于记录日志、缓存数据和存储其他需要定期清理的数据。

Capped Collections的大小是在创建时确定的,一旦达到了指定的大小,MongoDB就会自动删除最旧的文档,以便为新的文档腾出空间。
这种行为类似于循环缓冲区。
由于Capped Collections具有固定的大小,因此它们的性能比普通集合更高。
Capped Collections还可以使用TTL索引来自动删除过期文档。

关于固定集合,有以下几点需要注意:

1.可以在固定集合中插入或更新数据,但更新时数据不能超出集合的大小,否则更新会失败;

2.不允许删除固定集合中的文档,但是可以使用 drop() 方法删除集合中的所有数据,在 drop 后需要显式地重建集合;

3.固定集合中不存在默认索引,甚至在 _id 字段上也不存在;

4.在插入新文档时,MongoDB 实际上不必在磁盘上寻找容纳新文档的位置,它可以在集合的尾部盲目地插入新文档,这使得在固定集合中插入文档非常快;

5.在查询文档时,MongoDB 返回的文档顺序与文档在磁盘上存储的顺序是相同的,这使得查询文档的速度非常快。

  1. Capped Collections的大小必须在创建时指定,并且不能更改。

  2. Capped Collections不支持索引的唯一性约束。

总之,Capped Collections是一种非常有用的集合类型,适用于需要定期清理数据的场景。
它们的性能比普通集合更高,并且可以使用TTL索引来自动删除过期文档。
在使用Capped Collections时,需要注意其特殊的限制和行为。

Capped Collections不支持删除和更新操作吗?

在Capped Collections中,可以对文档进行删除和更新操作,但是需要注意以下几点:

  1. 删除操作:可以使用remove()方法删除Capped Collections中的文档。但是,由于Capped Collections的大小是固定的,删除操作并不会释放空间。因此,删除操作并不会影响Capped Collections的大小。

  2. 更新操作:可以使用update()方法更新Capped Collections中的文档。但是,更新操作必须保证文档的大小不变。如果更新操作导致文档大小增加,MongoDB会抛出一个错误。

需要注意的是,Capped Collections的主要特点是固定大小和按照插入顺序排序。因此,如果需要对文档进行频繁的删除和更新操作,Capped Collections可能并不是最合适的选择。

怎么理解“更新操作必须保证文档的大小不变”?

在Capped Collections中,更新操作必须保证文档的大小不变,这是因为Capped Collections是按照插入顺序排序的,如果更新操作导致文档大小变化,可能会导致文档在集合中的位置发生变化,这就破坏了按照插入顺序排序的特性。

当执行更新操作时,如果更新后的文档大小不同于原始文档大小,MongoDB会抛出一个错误。因此,在更新Capped Collections中的文档时,需要确保更新后的文档大小与原始文档大小相同。

例如,如果原始文档的大小是100字节,更新操作必须保证新文档的大小也是100字节。如果新文档的大小不同,更新操作将会失败。

需要注意的是,虽然Capped Collections支持更新操作,但是这种操作会导致集合中文档的位置发生变化,因此在使用Capped Collections时,应该尽量避免频繁的更新操作,以保证集合的按照插入顺序排序的特性。

可以根据时间时长保留数据吗? 如保留最近1年的历史数据。

可以使用MongoDB的TTL索引来根据时间时长自动删除Capped Collections中的数据。
TTL索引可以在创建集合时指定,它会根据指定的时间字段自动删除超过指定时间的文档。

例如,假设我们有一个Capped Collections,其中包含一个时间字段"created_at",我们希望保留最近一年的数据,可以使用如下命令创建TTL索引:

db.my_capped_collection.createIndex({ "created_at": 1 }, { expireAfterSeconds: 31536000 })

在上面的命令中,我们使用createIndex()方法创建了一个TTL索引。
第一个参数指定了要创建索引的字段,第二个参数使用了expireAfterSeconds选项,指定了文档过期的时间为一年(即31536000秒)。
这样,Capped Collections中超过一年的文档会自动被删除,确保了集合的大小始终保持在一定范围内,同时也保留了最近一年的数据。
需要注意的是,TTL索引只能用于Capped Collections和普通集合中的某些特定场景,并且只能用于单个时间字段。
如果需要根据多个时间字段进行数据清理,可以考虑使用定时任务或其他工具来完成。

可以根据文档数量保留数据吗?如保留最近1000万条数据。

在MongoDB中,Capped Collections可以通过设置固定的大小来限制文档数量,因此可以根据文档数量来保留数据。
例如,如果我们希望保留最近1000万条数据,可以创建一个大小为100GB的Capped Collections,并将其限制为最多存储1000万条文档。

创建大小为100GB,最多存储1000万条文档的Capped Collections,可以使用如下命令:

db.createCollection("my_capped_collection", { capped: true, size: 100000000000, max: 10000000 })

在上面的命令中,我们使用createCollection()方法创建了一个Capped Collections,并指定了capped选项为true,表示这是一个Capped Collections。size选项指定了集合的最大大小为100GB,max选项指定了集合的最大文档数量为1000万。

这样,当Capped Collections的文档数量达到1000万时,MongoDB会自动覆盖最旧的文档,以便为新文档腾出空间,保持集合的大小始终在100GB以内,同时也保留了最近1000万条数据。

需要注意的是,Capped Collections的大小是固定的,一旦达到了指定的大小,MongoDB就会自动覆盖最旧的文档,因此在使用Capped Collections时,需要根据实际情况合理设置大小和文档数量的限制。

如果你指定的集合大小装不下1000万条数据呢?

如果指定的集合大小无法容纳1000万条数据,那么Capped Collections会自动删除最早的文档以腾出空间,以便继续存储新的文档。这意味着实际存储的文档数量可能会略少于设置的文档数量限制。
因此,在设置Capped Collections时,需要根据实际情况合理估算集合大小,以确保能够存储足够的文档数量。
如果需要存储更多的文档,可以根据需要调整集合大小或者取消文档数量限制。

参考

MongoDB固定集合(Capped Collections)
http://c.biancheng.net/mongodb2/capped-collection.html

MongoDB Manual/Capped Collections
https://www.mongodb.com/docs/manual/core/capped-collections

相关文章

  • MongoDB Capped集合 使用注意事项

    Capped集合简介 1,Capped集合是一个固定大小,高性能的,文档按照插入顺序的一个集合。新的对象会把覆盖旧...

  • Docker安装MongoDB

    MongoDB是什么? mongoDB是存储文档的非关系型数据库。 MongoDB的文档结构 集合 集合中可以包...

  • MongoDB 常用基本命令

    mongoDB 数据库 mongoDB 数据库概念 集合 文档 _id mongo命令 链接MongoDB 数...

  • 那些年成为node攻城狮的路(八)

    Mongodb基本操作 Mongodb实例->数据库 -> 集合 -> 文档 .和$为mongodb保留字符,其余...

  • mongodb学习笔记

    1、MongoDB特点 面向集合存储:MongoDB 是面向集合的,数据以 collection 分组存储。每个 ...

  • MongoDB 基础浅谈

    1 MongoDB 特点 面向集合存储:MongoDB 是面向集合的,数据以 collection 分组存储。每个...

  • Mongo使用记录

    项目中为了接收来自设备的告警信息,由于不同类别的告警信息结构不固定,所以采用MongoDB进行存储. 建立coll...

  • 【Mongodb】聚合查询 && 固定集合

    概述 数据存储是为了可查询,统计。若数据只需存储,不需要查询,这种数据也没有多大价值 本篇介绍Mongodb 聚合...

  • 5 MongoDB集合操作

    创建集合 name,集合名 options,可选参数(1) capped 布尔型(可选)若为true,则创建固定集...

  • mongoDB应用篇-mongo聚合查询

    上篇我们学习了MongoDB中的一些特殊集合,如TTL集合与固定大小的集合,特殊的索引-文本索引,以及mongo的...

网友评论

    本文标题:【mongoDB】MongoDB固定集合(Capped Coll

    本文链接:https://www.haomeiwen.com/subject/zonzddtx.html