限制集

本节内容

  • 概述
  • 行为
  • 限制和建议
  • 程序

概述

限制集 是固定大小的集合支持基于文档插入顺序的高吞吐率的插入、检索、删除操作。限制收集工作在某种程度上类似于循环缓冲区:一旦一个文档填满分配给它的空间,他将通过在限制集中重写老文档来给新文档让出空间。

查阅 createCollection() 或者 create 了解关于创建限制集的更多信息。

行为

插入顺序

限制集合能够保留插入顺序。因此,查询并不需要索引来保证以插入顺序来返回文档。减少了索引的消耗,限制集合可以支持更高的插入吞吐。

最旧文档的自动删除

为了为新文档腾出空间,在不需要脚本或显式删除操作的前提下,限制集合自动删除集合中最旧的文档。

限制集合的应用场景:

  • 存储高容量系统生成的日志信息。没有索引的情况下向限制集中插入文档的速度接近于直接在文件系统中写日志的速度。此外,内建的*fisrt-in-first-out*特性在管理存储使用时维护了事件的顺序。
  • 在限制集中缓存少量的数据。既然缓存是读远大于写,因此或者确保集合经常驻留在工作集(i.e. in RAM),或者接受一些需要索引的写惩罚。

_id 索引

限制集合有一个 _id 字段并且默认在 _id 字段上创建索引。

限制和建议

更新

如果您打算更新限制集中的文档,创建一个索引保证这些更新操作不需要进行集合扫描。

文档大小

在 3.2 版更改.

如果一个更新或替换操作改变了文档大小,操作将会失败。

文档删除

您不能从一个限制集中删除文档,为了从一个集合中删除所有文档,使用 drop() 方法来删除集合然后重新创建限制集。

分片

你不能对限制集分片。

查询效率

用自然顺序检索限制集中大部分最近插入的文档。这类似于跟踪日志文件。

聚合 $out

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

程序

创建一个限制集

您必须使用 db.createCollection() 方法显示创建限制集,在 mongo shell的 create 命令中的帮助信息。当创建限制集时,您必须指定以字节为单位的最大集合大小,而MongoDB将会预先分配集合。限制集的大小包括内部消耗的一小部分空间。

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

如果 size 字段小于或等于4096,该集合将会有4096字节。否则的话,MongoDB将会在给定大小的基础上增加为256的整数倍。

另外,你可以为限制集指定最大文档数据,用 max 字段就像下边的文档:

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

重要

size 参数通常是必须的,当指定了文档的 max 数量,如果一个集合在达到了最大size的限制而没有达到max数量的限制时,MongoDB将删除旧的文档,

见:

db.createCollection() and create。

查询一个限制集

如果你在限制集上执行一个没有指定排序的 find() 方法,MongoDB保证结果的顺序是和插入顺序相同。

用同插入相反的顺序检索文档, find() 连同 sort() 方法,及 $natural 参数设置为 -1 就像下面的例子:

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

检查一个集合是否是限制集

用 isCapped() 方法来判定一个集合是否是限制集,如下:

>db.collection.isCapped()

转换为限制集

你可以用命令 convertToCapped 转换一个非限制集成为一个限制集:

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

size 参数指定限制集的字节大小

警告

这个命令将获得一个全局写锁并将阻塞其他操作,直到它完成为止。

在规定的时间周期之后将自动移除数据

当数据到期时对于另外的灵活性,考虑MongodDB的 TTL 索引,就像在 通过设置TTL使集合中的数据过期 中描述的。

TTL Collections 与限制集不兼容。

Tailable游标

你可以用 tailable cursor 与限制集。同unix中的 tail -f 命令相似, tailable光标 “tails” 一个限制集的结尾。随着新文档被插入到限制集,你能用 tailable光标来继续检索文档。

查阅 Tailable Cursors 了解如何创建一个tailable 游标。

时间: 2024-08-05 13:10:33

限制集的相关文章

kubernetes部署etcd集群

部署环境: CentOS Linux release 7.2 64位 10.10.0.103 etcd master 10.10.0.49   etcd follower master安装过程: # yum update # yum install -y etcd # [member] ETCD_NAME=etcd1 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" #ETCD_SNAPSHOT_

部署AlwaysOn第一步:搭建Windows服务器故障转移集群

在Windows Server 2012 R2 DataCenter 环境中搭建集群之前,首先要对Windows服务器故障转移集群(Windows Server Failover Cluster,简称WSFC)有基本的了解.WSFC必须部署在域管理环境中,由多台服务器组成,每台服务器称作一个"结点"(Node),每个结点上都运行了Windows服务器故障转移集群服务,整个集群系统允许部分结点掉线.故障或损坏而不影响整个系统的正常运作.集群自动检测结点的健康状态,一旦活跃结点发生异常,变

MongoDB副本集

简介 mongodb复制(replication)是将数据同步在多个服务器的过程.主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致.复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并保证数据的安全性.复制还允许您从硬件故障和服务中断中恢复数据. 而副本集(replica set)是从mongodb 1.6 提供的新功能,比复制功能要强大一些并增加了故障自动切换和自动修复成员节点,

MySQL集群(二)之主主复制

前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节点占用了主节点的自增id 环境: 主节点:zyhserver1=1.0.0.3 从节点:udzyh1=1.0.0.5 第一步:我们在主节点中创建一个数据库db_love_1,在创建一个表tb_love(里面有id自增和name属性). create database db_love_1; use d

MongoDB 搭建分片集群

在MongoDB(版本 3.2.9)中,分片是指将collection分散存储到不同的Server中,每个Server只存储collection的一部分,服务分片的所有服务器组成分片集群.分片集群(Sharded Clustered)的服务器分为三中类型:Router(mongos),Config Server 和 Shard(Replica Set 或 Standalone mongod).使用分片集群,不需要使用强大的计算机,就能存储更多的数据,处理更大的负载.分布式数据库系统的设计目的是:

MongoDB 搭建副本集

副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成.通过Replication,将数据的更新由Primary推送到其他实例上,在一定的延迟之后,每个MongoDB实例维护相同的数据集副本.通过维护冗余的数据库副本,能够实现数据的异地备份,读写分离和自动故障转移. 一,MongoDB版本和环境 在Windows上创建包含三个节点的副本集,使用的环境: 数据库:MongoDB 版本 3.2.9 Server

Linux->ZooKeeper集群搭建

人,总免不了有心结,限制着自己,难以前行.对于ZooKeeper的理解,以及实践也拖了很久,今天用零散时间学习一下,补点干货. 一.简述 Zookeeper是Google的Chubby一个开源的实现,是高有效和可靠的协同工作系统,Zookeeper能够用来选举Leader(基于Fast Paxos协议),配置信息维护等,在一个分布式的环境中,需要一个Master实例或存储一些配置信息,确保文件写入的一致性等. ZooKeeper是一个分布式,开放源码的分布式应用程序协调服务,包含一个简单的原语集

linux集群下 solr集群搭建

首先介绍一下系统架构: * 这个图中代表的是三个solr实例,每个实例包括两个core,组成一个solrcloud * 索引集合包括两个 shard(shard1和shard2),shard1和shard2分别由三个core组成,其中一个L eader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个core的索引数据一致,解决高可用和高并发问题. * Collection在solrcloud集群中是一个索引结构,被划分为一个或多个

IDEA中Git分支未push的变更集如何合并到另一个分支

使用rebase命令 刚开始,A分支和B分支的代码是一样的,把A分支checkout 为当前分支,并且修改了代码,进行[commit]和[push],commit成功了,但是push没有权限. 这个时候在checkout 到B分支,之前的修改已经没有了,它被提交到了A分支上去了,该怎么办? 这时应该在上面的那个情况时(即当前先[Checkout]到A分支),然后选择B分支的[Checkout with Rebase]. 待成功后,就会把A分支已经提交(commit)过的变更集,在B分支上也提交(

浪潮服务器向集群中添加esxi主机

软件环境:esxi6.0  vcenter6.0 硬件:浪潮服务器 hba卡 浪潮存储 博科san 要求:向目前集群中添加一台esxi主机 步骤:安装esxi6.0,配置bmc和网卡,光纤连接hba卡,注意:光纤方向,hba中发光的接到san不发光的口. 配置san交换机 配置浪潮存储 esxi中识别存储添加OK!