在mongodb中有一个非常好用的collection : Capped Collections。
capped collection具有固定的大小,并且在auto-FIFO和age-out方面有很高的性能(具体怎么个高法得有数据支持,这里只讨论怎么做),age-out是基于插入顺序的。
capped collection自动维护插入顺序,在某些特殊的使用场景中非常有效,例如系统运行日志、监控数据(历史数据),在RDBMS中就需要做分区表,定期清理,而mongodb中只要设置好size或者max值则不需要考虑。
创建:
和标准collection不同,capped collection需要你显示地创建,定义collection的大小size,这里size的单位是byte,实际size是256byte的倍数。
> db.createCollection("mycoll", {capped:true, size:4000})
这时已经创建完毕,我们可以使用下面的命令查看mycoll的状态
>db.mycoll.stats();
{
“ns” : “mydb.mycoll″,
“count” : 0,
“size” : 0,
“avgObjSize” : NaN,
“storageSize” : 4096,
“numExtents” : 1,
“nindexes” : 0,
“lastExtentSize” : 4096,
“paddingFactor” : 1,
“flags” : 0,
“totalIndexSize” : 0,
“indexSizes” : {
},
“capped” : 1,
“max” : 2147483647,
“ok” : 1
}
avgObjSize这个状态字,从字面意思可以看出是平均对象大小。
官网提示要注意:
capped collection里的数据是不允许被删除的,所以只有collection的drop()函数被允许。
capped collection没有默认的_id索引,这点可以使用db.mycoll.getIndexes();来查看,显示结果为空[]。
当定义的大小空间使用完毕后,新添加的数据会替代collection中的旧数据(等下测试可以看到)。
当对capped collection使用find()方法的时候,它默认返回的数据是插入顺序,如果要反转顺序,则必须在find()方法后加上sort({$natural:-1})。
>db.mycoll.find().sort({$natural:-1});
下面就来测试数据替换:
>for(i=1;i<=150;i++) {db.mycoll.insert({x:i})}
上面的语句我们循环向mycoll集合中插入了150条数据,以i来标识我们的数据,下面就使用find方法来查看我们已经插入的数据
>db.mycoll.find();
//我就不复制了,命令行复制比较麻烦
这里的数据是从78开始的
然后使用
>db.mycoll.stats();
可以看到只插入了73个数据,而平均对象大小是36,size是2628,但是我们的storageSize是4096,这个原因官网的一句话可以解释。
Note that the size specified includes database headers
从上面数据从78开始就可以看出确实数据是被替换了
如果我们使用db.mycoll.find().sort({$natural:-1})这条语句,则可以发现第一条记录是150。
选项
size
这是capped collection必须被定义的部分。
max
还可以定义collection中允许存储的最大对象数目,可以用validate()方法查看使用了的空间,从而估算所需的大小。。
db.createCollection("mycoll", {capped:true, size:100000, max:100});
db.mycoll.validate();
查看集合是否是capped collection
db.mycoll.isCapped();
将一个集合转换为capped collection
> db.runCommand({"convertToCapped": "mycoll", size: 100000});
一个小知识:当我们在函数后不加()时,例如db.mycoll.isCapped,这样是用于查看isCapped函数的定义
分享到:
相关推荐
### MongoDB学习文档与Java集成详解 #### 一、MongoDB简介与安装 **MongoDB**是一种基于分布式文件存储的开源数据库系统,具有高性能、高可用性以及易扩展性等特点,适用于处理大规模数据集的应用场景。 ##### ...
- 可以设置上限(capped)和大小(size),例如`db.createCollection("stu",{capped:true,size:10})`。 - 不手动创建集合也没问题,MongoDB会自动创建当你插入第一条数据时。 2. **显示集合**: - `show ...
3.Capped Collections介绍及生产环境之疲劳度过滤,日志应用 4.Bson结构解析以及$type和_id原理详细分析 5.mongodb shell使用loadjs与mongodb高速交互分析 6.高频咨询之sql statement 和mongodb statement对照分析和...
MongoDB 还提供了一种特殊的集合类型——“固定大小集合”(Capped Collections),用于实现高性能的队列功能。Capped Collections 有固定的存储容量,一旦达到上限,新插入的数据会替换最旧的数据,保持集合的大小...
Capped Collections 是高效率的 Collection 类型,它有如下特点:固定大小;可以 insert 和 update 操作;不能 delete 操作;默认基于 Insert 的次序排序的。 Server Side Code Execution Server-Side Processing ...
4. 使用 capped collection:对于固定大小且需要保持插入顺序的数据,capped collections 是理想选择。 5. 服务器端代码执行:使用聚合框架(aggregation pipeline)在服务器端处理复杂逻辑,减少网络传输。 6. 强制...
### MongoDB命令学习手册知识点概述 #### 一、MongoDB简介与启动 - **MongoDB**是一种基于分布式文件存储的开源数据库系统,适用于处理大规模数据集的高性能应用。 - 成功启动MongoDB服务后,可以通过命令行工具`...
MongoDB是一款高性能、开源、无模式的分布式文档型数据库,被广泛应用于Web开发、数据分析、存储大规模半结构化数据等领域。...对于更深入的学习,建议查阅MongoDB官方文档和相关的Java驱动程序指南。
7. **Capped Collections**:这种特殊的集合限制了大小,一旦达到上限,新插入的数据会覆盖旧数据,适用于日志记录和时间序列数据。 8. **地理空间索引**:MongoDB内置了地理空间索引,能够快速地执行地理位置相关...
在某个数据库下,`show collections` 命令用于显示该数据库中的所有集合(collections),这些是MongoDB中存储数据的基本单元。 4. **查看服务器状态**: `db.serverStatus()` 提供了关于MongoDB服务器的详细信息...
本次讨论的是MongoDB中的限定集(Capped Collections)和大文件存储(GridFS)两个特色功能。 首先,限定集是MongoDB中一种特殊的集合类型,它有一个固定大小的存储空间,当数据存储超过这个空间限制时,新插入的...
5. ** capped collections**: 限制大小的集合,用于实现日志记录或消息队列功能,一旦达到上限,新数据会覆盖旧数据。 6. **GridFS**: 用于存储大型文件,将文件拆分为多个小块存储在MongoDB中。 五、MongoDB与其他...
#### 三、用户管理 MongoDB支持用户认证和授权机制,可以通过以下命令管理用户。 ##### 1. 添加用户 (Add User) - **命令格式**: `db.addUser("username")`, `db.addUser("username", "password", true)` - **功能...
6. `db.createCollection(name, options)`:创建一个新的集合,可以设置大小限制(capped)或最大文档数量。 7. `db.collection.find()` 和 `db.collection.find(filter)`:查询集合中的文档,filter 可以用来过滤...
MongoDB的固定集合(Capped Collections)是一种特殊类型的集合,设计用于高效地存储有固定大小限制的数据,类似于一个循环缓冲区。固定集合的主要特点是它的大小是固定的,一旦达到上限,新的插入操作会覆盖最早的...
- **定义**:Capped Collections是一种特殊的集合类型,具有固定大小,并按照插入顺序存储数据。当集合达到最大容量时,新插入的数据会覆盖最早的记录。 - **特性**: - 固定大小:创建时需指定大小。 - 插入和...
3. 查看表:`show tables` 或 `show collections` 4. 删除表:`db.user.drop()` 5. 删除数据库:`db.dropDatabase()` 6. 删除数据:`db.user.remove({name:'gdh'})` 创建表 1. 语法:`db.createCollection(name, ...