2019独角兽企业重金招聘Python工程师标准>>>

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
}
>

转载于:https://my.oschina.net/happyBKs/blog/387604

MongoDB进阶系列(12)——MongoDB 固定集合相关推荐

  1. MongoDB进阶系列(11)——“改”的那些事(二)文档的keyvalue为数组的修改方法...

    2019独角兽企业重金招聘Python工程师标准>>> 本文将讨论关于文档中keyvalue为数组的情况如何修改数组. 首先,创建一个c4集合,集合中的文档包含一个arrint字段, ...

  2. linux删除grid数据文件,MongoDB进阶系列(13)——GridFS大文件的添加、获取、查看、删除...

    GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种: 存储巨大的文件,比如视频.高清图片等. 利用GridFS可以简化需求. GridFS会直接利用已经建立的 ...

  3. MongoDB 教程五: MongoDB固定集合和性能优化

    MongoDB 固定集合(Capped Collections) MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环 ...

  4. MongoDB学习系列 -- 数据库、集合、文档的CURD

    前面一篇章节我们已经对MongoDB的基本概念有了一个大概的了解,从今天开始,我们将进行更细粒度的学习,首先就是数据库.集合.文档的CURD操作. 为了便于操作,减少学习难度,我们这里使用javasc ...

  5. Mongodb固定集合

    2019独角兽企业重金招聘Python工程师标准>>> Mongodb固定集合 博客分类: java mongodb Capped Collection(固定集合) 简单介绍 cap ...

  6. MongoDB学习笔记-06 数据库命令、固定集合、GridFS、javascript脚本

    介绍MongoDB支持的一些高级功能: 数据库命令 固定大小的集合 GridFS存储大文件 MongoDB对服务端JavaScript的支持 数据库命令 命令的原理 MongoDB中的命令其实是作为一 ...

  7. MongoDB 教程五: MongoDB固定集合和性能优化 (索引Indexes, 优化器, 慢查询profile)

    mongodb索引详解(Indexes) 索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进 ...

  8. MongoDB固定集合(capped collection)

    一 . 什么是固定集合 MongoDB中有一种特殊类型的集合,值得我们特别留意,那就是固定集合(capped collection). 固定集合可以声明collection的容量大小,其行为类似于循环 ...

  9. mongodb固定集合(Capped Collection)和大文件管理(GridFS)

    Capped Collection 固定集合(Capped Collection)是性能出色的有着固定大小的集合,以LRU(Least Recently Used最近最少使用)规则和插入顺序进行age ...

  10. mongodb固定集合(Capped Collections) | MongoDB 自动删除集合中过期的数据——TTL索引

    文章目录 mongodb固定集合(Capped Collections) 一.什么是mongodb固定集合(Capped Collections) 二.Capped Collections使用场景 三 ...

最新文章

  1. 【BZOJ4259】残缺的字符串
  2. 实用的4W、5V直流开关稳压电源电路图及解析
  3. 型数据保留几位小数_Python数据分析—数据框的简单操作
  4. boost的chrono模块explore limits探索极限的测试程序
  5. 协程库st(state threads library)原理解析
  6. [Oracle] UNIX与Windows 2000上Oracle的差异(II)
  7. 抖音为什么能让人上瘾?
  8. 微信小程序公测了!教你第一时间注册微信小程序
  9. 读书笔记——刘鹗《老残游记》《老残游记续集》
  10. 关于SSL以及https的相关信息
  11. 采集宝贝提示“属性值最大长度为42个字符(21个汉字)”怎么解决?
  12. 【Mac小技巧】如何更改默认浏览器
  13. 匿名发送邮件python_邮箱伪造之搭建匿名SMTP服务器
  14. CrazyBox常见问题
  15. 魔兽世界8.0哪个服务器稳定,魔兽世界活得最安逸的BOSS!8.0版本才拿到7.0服务器首杀!...
  16. Deeplink(深度链接)拉起App,我是这样做到的
  17. ADC—应用交付-AX系列
  18. 2. 【短语、直接短语、句柄】概念、做题步骤
  19. 新概念二-非谓语动词
  20. UDP Flood攻击

热门文章

  1. 对“最大子序列和问题”的一点思考
  2. [转]Asp.Net下导出/导入规则的Excel(.xls)文件
  3. AndroidP 开机自启动程序
  4. linux内核之进程调度
  5. python中open打开路径问题_Python学习笔记之open()函数打开文件路径报错问题
  6. disable_irq/enable_irq使用不匹配
  7. 字符设备与块设备的区别
  8. 怎样对计算机窗口进行截图,Windows10:如何对计算机屏幕上的内容进行屏幕截图...
  9. GDB 01 -- 调试信息与调试原理
  10. linux内核奇遇记之md源代码解读之五