MongoDB定容集合(Capped Collection)

这篇具有很好参考价值的文章主要介绍了MongoDB定容集合(Capped Collection)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

定容集合

定容集合行为

使用场景

限制和建议

使用方法

构建定容集合

查询

确定集合是否定容

将集合转换成定容集合

修改空间大小

修改文档数量限制

末尾持续游标(tailable cursor)


Mongodb的文档保存在集合当中,类似关系型数据库当中的表。用户对集合进行增删改查操作。

定容集合

定容集合,是一种固定大小的集合。支持数据的快速插入和按照插入顺序的高速读取。定容集合工作机制类似循环缓存。当集合大小达到用户指定的大小时,新插入的数据会覆盖最早插入的数据。

作为定容集合的替代方案,用户还可以选择定时索引。建立索引是指定索引数据的过期时间。当插入数据的时间索引字段超过过期时间后,mongodb或自动清除该数据。本文终点探讨定容集合,定时索引内容请参照其他文档。

定容集合行为

定容集合容量大小是确定的,并且保证数据按照插入顺序排列,因此具有下面的几个行为。

  • 数据按照插入时间排序,查询时无需构建其他时间字段索引来对文档查询顺序。因此提高了数据插入性能。
  • 自动删除最先插入的数据。当达到容量限制时,定容集合自动删除最先插入的数据,无需显示执行删除操作或额外的删除脚本。
  • 定容集合有_id字段和_id字段索引。

使用场景

针对定容集合高效插入和保证按照插入顺序读取数据的特性,定容集合适应下面两个场景

  1. 保存系统日志。 因为无需构建额外的索引,索引向定容集合插入数据时,具备与直接写入文件系统类似的性能。其先入先出的特性,保证了写入时间的顺序。因此适合用来保存系统日志。 mongodb的oplog就使用了定容集合。
  2. 将定容集合作为缓存,保存少量数据。

限制和建议

  • 自mongodb5开始,定容集合禁止使用snapshot读取方式
  • 当用户更新定容集合的数据时,可以添加索引避免全表扫描。当然,更新完成后,建议删除改索引。
  • 定容集合,不可分片
  • 使用默认排序可以高效的读取定容集合数据,这与在unix系统中使用tail方法读取日志文件类似。
  • 禁止使用$out方法向定容集合写入数据
  • 禁止在mongodb事务中向定容集合写入数据。

使用方法

构建定容集合

使用db.createCollection()方法,显式创建定容集合。定义定容集合时,必须指定集合空间大小。mongodb在分配定容集合存储空间时,按照256bytes的倍数来分配大小。mongodb计算出小于用户指定空间大小的最大的256的倍数。定容集合最大存储空间,不能超过1PB。

db.createCollection("<collectionName>", {capped: true, size: <collection_size>}) 

其中,collection_size的单位是字节(bytes)

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

db.getCollectionInfos({name: "log"})
{
	"name" : "log",
	"type" : "collection",
	"options" : {
		"capped" : true,
		"size" : 100000
	},
	"info" : {
		"readOnly" : false,
		"uuid" : UUID("d11d3f1b-74ff-4dcc-89e3-e43051c8e3d7")
	},
	"idIndex" : {
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	}
}

除了指定集合空间大小之外,用户还可以指定集合文档的数量

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

db.getCollectionInfos({name: "log"})
{
	"name" : "log",
	"type" : "collection",
	"options" : {
		"capped" : true,
		"size" : 100000,
		"max" : 500
	},
	"info" : {
		"readOnly" : false,
		"uuid" : UUID("38120a0b-31e9-471e-a15d-45dbf3314323")
	},
	"idIndex" : {
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	}
}

定容集合中,必须指定大小。当定容集合容量已满而未达到用户指定的最大文档数量时,定容集合会删除最先插入的数据。

查询

使用find()方法查询定容集合。如果没有指定排列顺序,数据按照插入顺序返回。

db.cappedCollection.find()

如果查询插入数据的倒序,需要在查询语句中指定排列顺序。

db.cappedCollection.find().sort({$natural: -1})

确定集合是否定容

使用命令isCapped()查看一个集合是否是定容集合。

db.collection.isCapped()

db.log.isCapped()
true

将集合转换成定容集合

使用命令convertToCapped, 将非定容集合转换成定容集合。但必须指定定容集合所占空间大小。集合转换为定容集合时,mongodb会为当前集合添加排它锁。其他人任何操作本集合的操作,需要等待定容集合转换完成

db.runCommand( {"convertToCapped": "<collection_name>", size: 100000})

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

db.books.isCapped()
true

修改空间大小

在collMod中,使用cappedSize指定定容集合空间大小。最大空间可超过1PB。

db.runCommand( {collMod: "log", cappedSize: 100000})

修改文档数量限制

在collMod中,使用cappedMax指定已有定容集合文档数量。当cappedMax值定义为负数或0时,没有文档数量限制。当指定的cappedMax数量小于当前定容集合文档数量时,定容集合会按照文档插入顺序,删除超过数量限制的文档。

db.runCommand( {collMod: "log", cappedMax: 500})

末尾持续游标(tailable cursor)

定容集合支持一种特殊的游标。当游标读取到最后一个文档后,该游标不会关闭,等到有新的数据插入到定容集合时,该游标返回新插入的数据,并保持开启状态。这与unix中的命令tail -f类似,直到文件结束,命令才终止。

tailableCursor比使用索引,按照插入的自然顺序返回数据。这样从头读取集合中的数据,对数据库和网络的开销是巨大的。但游标耗尽走到最后读取新插入的数据时,开销是微小的。文章来源地址https://www.toymoban.com/news/detail-764036.html

到了这里,关于MongoDB定容集合(Capped Collection)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过Studio 3T对Mongodb进行 创建数据库/集合 增删查改集合文档操作

    首先 你需要安装Studio 3T 以及启动 Mongodb服务 具体可以参考我的文章 Studio 3T客户端连接Mongodb数据库服务 我们之前 通过 随便输切换是可以的 但除了这里能看到的 它们都仅存在于内存 我们右键顶部菜单 选择 添加数据库/创建数据库 这里 我们输入数据库名称 然后 点击OK 这样

    2024年02月01日
    浏览(39)
  • java springboot整合Mongodb 对数据库集合进行增删查改操作

    下面 我们就来做 springboot 整合Mongodb的工作 我们终端打开 Mongodb 安装目录下的bin目录 然后执行 启动服务 然后 打开我们的 springboot 项目 在pom.xml 文件中 导入坐标 有了依赖之后 就还差配置 打开项目中的 application 配置文件 我这里用的 yml 格式 我们在上面 打个 mong 它就会弹出

    2024年01月18日
    浏览(43)
  • 数据库信息速递 MONGODB 6.0 的新特性,更多的查询函数,加密查询,与时序数据集合 (译)...

    开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到3群(共1000人左右 1 + 2 + 3),最近发展的速度比较快,2群除特殊情况,不在添加

    2024年02月16日
    浏览(36)
  • mongotop跟踪Mongodb集合读取和写入数据

    从 MongoDB 4.4 开始,MongoDB 数据库工具现在与 MongoDB 服务器分开发布,并使用自己的版本控制,初始版本为100.0.0. 此前,这些工具与 MongoDB 服务器一起发布,并使用匹配的版本控制。 mongotop 版本100.7.3支持以下版本的 MongoDB Server: MongoDB 6.0 MongoDB 5.0 MongoDB 4.4 MongoDB 4.2 行为 mongo

    2024年02月15日
    浏览(28)
  • MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(3)-系统数据集合设计

    前几章教程我们把ToDoList系统的基本框架搭建好了,现在我们需要根据我们的需求把ToDoList系统所需要的系统集合(相当于关系型数据库中的数据库表)。接下来我们先简单概述一下这个系统主要需要实现的功能以及实现这些功能我们需要设计那些数据库集合。 MongoDB从入门到

    2024年02月21日
    浏览(31)
  • 【数据库MongoDB】MongoDB与大数据关系以及MongoDB中重要的进程:mongod进程与mongo进程关系

    云计算的定义有多种说法,对于到底什么是云计算,我们至少可以找到100种解释。目前广为接受的是美国国家标准与技术研究院定义: 云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器

    2024年02月02日
    浏览(56)
  • 〖Python 数据库开发实战 - MongoDB篇⑧〗- MongoDB的数据结构

    订阅 Python全栈白宝书-零基础入门篇 可报销! 白嫖入口-请点击我。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏, 免费阶段订阅数量4300+ , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:加入社区的小伙

    2023年04月09日
    浏览(47)
  • MongoDB——MongoDB删除系统自带的local数据库

    1.1、linux环境进入mongo客户端 输入 mongo 命令,进入命令行客户端 进入admin库,并登录,查看所有数据库 提升用户权限,然后进入local库并删除local库 然后重新进入admin库,把提升的用户权限降回,再次查看所有数据库 由上图可知,local库已被删除。

    2024年02月06日
    浏览(44)
  • [虚幻引擎 MongoDB Client 插件说明] DTMongoDB MongoDB数据库连接插件,UE蓝图可以操作MongoDB数据库增删改查。

    本插件可以在UE里面使用蓝图操作MongoDB数据库, 对数据库进行查询,删除,插入,替换,更新操作。 插件下载地址在文章最后。 Create MongoDB Client - 创建客户端对象 创建一个 MongoDB 客户端对象。 Connect By Url - 连接到数据库 Url :MongoDB的连接地址。 如 mongoDB://account:password@ip:

    2024年02月14日
    浏览(77)
  • MongoDB数据库从入门到精通系列文章之:MongoDB数据库百篇技术文章汇总

    MongoDB数据库系列文章持续更新中: 更多数据库内容请阅读博主数据库专栏,数据库专栏涵盖了Mysql、SQLServer、PostgreSQL、MongoDB、Oracle、Cassandra等数据库 数据库专栏 文章名称 文章链接 数据库安装部署系列之:部署Mongodb5.0.6高可用集群详细步骤 数据库安装部署系列之:部署M

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包