MongoDB进阶系列(12)——MongoDB 固定集合

Capped Collection 固定集合

简单介绍

capped collections 是性能出色的有着固定大小的集合,以LRU(Least Recently Used最近最少使用)规则和插入顺序进行age-out(老化移出)处理,自动维护集合中对象的插入顺序,在创建时 要预先指定大小。如果空间用完了,新添加的对象将会取代集合中最旧的元素。

永远保持最新的数据。

功能特点:

可以插入及更新,但更新不能超出collection的大小,否则更新是白。不允许删除,但是可以调用drop()删除集合中的所有行,但是drop之后需要显示地重建集合。

在32位机器上一个capped collection的最大值约482.5M,64位上只受系统文件大小的限制。

属性及用法

属性1:对固定集合进行插入速度极快

属性2:按照插入顺序的查询输出速度极快

属性3:能够在插入最新数据时,淘汰最早的数据。

用法1:存储日志信息

用法2:缓存一些少量的文档

创建固定集合

创建固定集合不像普通集合,固定集合需要显式创建使用,即使用createCollection命令来创建。

显式创建集合

> show dbs
admin  (empty)
dt1    0.078GB
dt2    0.078GB
dt3    0.078GB
local  0.078GB
> db
test
> db.createCollection("c4")
{ "ok" : 1 }
> show collections
c4
system.indexes
> db.c4.drop()
true
> show dbs
admin  (empty)
dt1    0.078GB
dt2    0.078GB
dt3    0.078GB
local  0.078GB
test   0.078GB
>

显示创建固定集合

db.createCollection("my_collction",{capped:true,size:10000})

创建一个集合为“my_collction”的固定集合,大小为10000字节。还可以限定文档个数。加上Max:100属性。

注意:指定文档上限,必须指定大小。文档限制时在容量没满时进行淘汰,要是满了,就根据容量限定进行淘汰。

> use dt4
switched to db dt4
> db
dt4
> show collections
> 
> db.c1.insert({user:"happy",gender:"male"})
WriteResult({ "nInserted" : 1 })
> 
> show collections
c1
system.indexes
> db.c1.stats()
{
	"ns" : "dt4.c1",
	"count" : 1,
	"size" : 112,
	"avgObjSize" : 112,
	"storageSize" : 8192,
	"numExtents" : 1,
	"nindexes" : 1,
	"lastExtentSize" : 8192,
	"paddingFactor" : 1,
	"systemFlags" : 1,
	"userFlags" : 1,
	"totalIndexSize" : 8176,
	"indexSizes" : {
		"_id_" : 8176
	},
	"ok" : 1
}
> db.system.indexes.find()
{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "dt4.c1" }
>

现在创建一个固定集合c2。设置集合大小为10000000字节,大约10M;文档上限为5.

查看c2的状态发现,除了命名空间ns变了。storagesize、max、capped几个参数也值得注意。

> db.createCollection("c2",{capped:true,size:10000000,max:5})
{ "ok" : 1 }
> show tables
c1
c2
system.indexes
> db.c2.stats()
{
	"ns" : "dt4.c2",
	"count" : 0,
	"size" : 0,
	"storageSize" : 10002432,
	"numExtents" : 1,
	"nindexes" : 1,
	"lastExtentSize" : 10002432,
	"paddingFactor" : 1,
	"systemFlags" : 1,
	"userFlags" : 0,
	"totalIndexSize" : 8176,
	"indexSizes" : {
		"_id_" : 8176
	},
	"capped" : true,
	"max" : 5,
	"ok" : 1
}
>

那么,我们现在来向c2中插入文档数据,看看会发生什么。

> db.c2.insert({name:"user1"})
WriteResult({ "nInserted" : 1 })
> db.c2.insert({name:"user2"})
WriteResult({ "nInserted" : 1 })
> db.c2.insert({name:"user3"})
WriteResult({ "nInserted" : 1 })
> db.c2.insert({name:"user4"})
WriteResult({ "nInserted" : 1 })
> db.c2.insert({name:"user5"})
WriteResult({ "nInserted" : 1 })
> db.c2.find()
{ "_id" : ObjectId("55069b2ac1728741d70b54fa"), "name" : "user1" }
{ "_id" : ObjectId("55069b32c1728741d70b54fb"), "name" : "user2" }
{ "_id" : ObjectId("55069b38c1728741d70b54fc"), "name" : "user3" }
{ "_id" : ObjectId("55069b3dc1728741d70b54fd"), "name" : "user4" }
{ "_id" : ObjectId("55069b42c1728741d70b54fe"), "name" : "user5" }
> db.c2.insert({name:"user6"})
WriteResult({ "nInserted" : 1 })
> db.c2.find()
{ "_id" : ObjectId("55069b32c1728741d70b54fb"), "name" : "user2" }
{ "_id" : ObjectId("55069b38c1728741d70b54fc"), "name" : "user3" }
{ "_id" : ObjectId("55069b3dc1728741d70b54fd"), "name" : "user4" }
{ "_id" : ObjectId("55069b42c1728741d70b54fe"), "name" : "user5" }
{ "_id" : ObjectId("55069b50c1728741d70b54ff"), "name" : "user6" }
>

那么能不能把我们的普通集合转化为固定集合呢?答案是可以的。

转换集合

把普通的集合转换成固定集合

需要使用convertTocapped命令

db.runCommand({convertToCapped:"c1",size:10000})

把c1普通集合转换为固定集合,大小设置为10000字节。

自然排序

固定集合文档按照插入顺序存储,默认情况查询就是按照插入顺序返回的,也可以使用$natural调整返回顺序。

db.my_collections.find().sort({"$natrual":1})

1表示默认顺序,-1则相反。

这里做个小结,判断一个集合是否是固定集合有两种方法:

一种是 db.c2.isCapped()

另一种是db.c2.stats()

下面我们来实际操练一下如何将普通集合转换为固定集合。

> db.c1.isCapped()
false
> db.runCommand({convertToCapped:"c1",size:10000000,max:3})
{ "ok" : 1 }
> db.c1.isCapped()
true
> db.c1.stats()
{
	"ns" : "dt4.c1",
	"count" : 1,
	"size" : 56,
	"avgObjSize" : 56,
	"storageSize" : 10002432,
	"numExtents" : 1,
	"nindexes" : 1,
	"lastExtentSize" : 10002432,
	"paddingFactor" : 1,
	"systemFlags" : 1,
	"userFlags" : 0,
	"totalIndexSize" : 8176,
	"indexSizes" : {
		"_id_" : 8176
	},
	"capped" : true,
	"max" : NumberLong("9223372036854775807"),
	"ok" : 1
}
>
时间: 2024-10-26 03:26:27

MongoDB进阶系列(12)——MongoDB 固定集合的相关文章

MongoDB进阶系列(14)——GridFS大文件MD5验证

md5在上传之后都会保存在fs.files的元数据信息里,用来以后用户在get大文件之后比对md5值进行验证. linux中查看md5值的方法是: md5sum 文件名 那么我们就看看从Mongodb中get的文件的md5和MongoDB中存储的GridFS的md5是否一样. [[email protected] ~]$ sudo /usr/local/mongodb/bin/mongofiles put mongodbBook.tar.gz  [sudo] password for neil:

mongodb进阶二之mongodb聚合

上篇我们说了mongodb的高级查询:http://blog.csdn.net/stronglyh/article/details/46817789 这篇说说mongodb的聚合 一:mongodb中有很多聚合框架,从而实现文档的变换和组合,主要有一下构件 构件类别                操作符 筛选(filtering)         $match 投射(projecting)     $project 分组(grouping        $group 排序(sorting)   

Java 集合系列 12 TreeMap

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和

MongoDB 进阶(命令\固定集合)

命令参考 查看MongoDB命令方法 ● 在shell中运行db.listCommands()命令 ● 在浏览器管理接口http://localhost:28017/_commands 下面是MongoDB最常使用的命令: ●  buildinfo 管理专用命令,返回MongoDB服务器的版本号和主机操作系统信息 >db.runCommand({"buildinfo":1}) { "version" :"2.4.14", "git

MongoDB的固定集合

一.MongoDB固定集合概念 固定集合指的是事先创建,并且大小固定的集合.即假设一个集合设置了固定大小为100,再添加一条文档的时候,会把最前面的文档剔除,永远只保留100条数据. 固定集合特性:固定集合很像环形队列,如果空间不足,最早的文档就会被删除,为新的文档腾出空间.一般来说,固定集合适用于任何想要自动淘汰过期属性的场景. 二.固定集合应用场景 比如日志文件,聊天记录,通话信息记录等只需保留最近某段时间内的应用场景,都会使用到MongoDB的固定集合. 三.如何使用固定集合 创建固定集合

MongoDB固定集合(Capped Collections)

MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素! 1. 创建固定集合: db.createCollection("cappedLogCollection",{capped:true,size:10000}) 指定文档个数: db.createCollection("cappedLogCollection",{capp

mongodb固定集合,建立管理员安全验证

建立普通集合 db.createCollections aaa; 建立固定集合名称book capped true 固定集合 size大小 max:文档数量 db.createCollection("book",{capped:true,size:10000,max:5}) "capped" : false, 表示普通集合 普通集合可以转换为固定集合      db.user.convertToCapped(maxBytes) - calls {convertToC

【MongoDB学习笔记26】MongoDB的固定集合

MongoDB中的普通集合是动态的,可以自动增长容纳更多的数据:相对而言,有另一种集合称之为固定集合. (1)固定集合需要实现显式创建,集合大小固定: (2)一旦固定集合中空间用完,插入的新文档将覆盖最老的那个文档的空间,类似循环队列: (3)固定集合不能被分片: (4)固定集合不能修改,只能删除重建 一.创建固定集合 使用CreateCollection创建固定集合myCollection,字节大小限制在10000,文档数量限制在100: > db.createCollection("m

MongoDB固定集合

固定集合 MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素! 特点:可以插入及更新,但更新不能超出collection的大小,否则更新失败,不允许删除,但是可以调用drop()删除集合中的所有行,但是drop后需要显式地重建集合. 回到顶部 示例 > db.createCollection(, {capped:, size:, max: : >&