Mongodb 笔记04

特殊索引和集合

1. 固定集合:固定集合需要事先创建好看,而且它的大小是固定的。当固定集合被占满时,如果再插入新文档,固定集合会自动将最老的文档从集合中删除。

2. 创建固定集合:db.createCollection("my_collection",{"capped":true,"size":10000})  创建一个大小为10000字节的固定集合

除了大小,createCollection还能指定固定集合中文档的数量:db.createCollection("my_collection",{"capped":true,"size":10000,"max":10})

指定文档数量时,必须同时指定集合大小。固定集合的文档数量不能超过文档数量限制,固定集合的大小也不能超过大小限制。

3. 将某个常规集合转换为固定集合:db.runCommand({"convertToCapped":"test","size":10000})   无法将固定集合转换为非固定集合。

4. 自然排序:自然排序返回结果集中文档的顺序就是文档在磁盘上的顺序。只有固定集合中的自然排序才有意义,对其他集合来说文档位置经常变化,自然排序意义不大。

5. 循环游标:一种特殊的游标,当循环游标的结果集被取光后,游标不会被关闭。当有新文档插入到集合时,循环游标会继续取到结果。由于普通集合并不维护文档的插入顺序,循环游标只能用在固定集合上。

6. 调用createCollection创建集合时指定autoIndexId选项为false,创建集合时就不会自动在"_id"上创建索引。实践中不建议这么用,但对于只有插入操作的集合来说,这确实可以带来速度上的稍许提升。

7. TTL索引:如果需要更加灵活的老化移出系统,可以使用TTL索引,这种索引允许为每一个文档设置一个超时时间。一个文档到达预设置的老化程度之后就会被删除。这种类型的索引对于缓存问题很有用。

db.foo.ensureIndex({"lastUPdated":1},{"expireAfterSecs":60*60*24})            // 过期时间24小时

MongoDB每分钟对TTL索引进行一次清理,所以不应该依赖以秒为单位的时间保证索引的存活状态。可以使用collMod命令修改expireAfterSecs的值:

db.runCommand({"collMod":"someapp.cache","expireAfterSecs":3600})

一个给定的集合上可以有多个TTL索引,但TTL不能是复合索引。

8. 全文本索引:暂不建议使用,性能影响太大。

9. 地理空间索引:最常用的是2dsphere索引(用于地球表面类型的地图)和2d索引(用于平面地图和时间连续的数据)

10. 使用GridFS存储文件:GridFS是MongoDB的一种存储机制,用来存储大型二进制文件。

优点:

a. 简化你的栈,可以使用GRIDFS来代替独立的文件存储工具。

b. 对文件存储做故障转义或者横向扩展更容易

c. 可以比较从容地解决其他一些文件系统可能遇到的问题。

d. 文件存储的集中度会比较高

缺点:

  a. 性能低:从MongoDB中访问文件,不如直接从文件系统中访问文件速度快。

b. 如果要修改GridFS上的文档,只能先将已有的文档删除。

通常来说,如果你有一些不常改变但是经常需要连续访问的大文件,那么使用GridFS再合适不过。(性能呢?因为缓存到内存了?)

11. GridFS背后的理念:可以将大文件分割为多个比较大的块,将每个快作为独立的文档进行存储。有一个文档用于将这些块组织在一起并存储该文档的元信息。

12. 可以使用任何自定义的字段来保存必须的文件元信息。可能你希望在文件元信息中保存文件的下载次数,MIME类型或者用户评分。

时间: 2024-10-24 04:01:46

Mongodb 笔记04的相关文章

《掌握需求过程》阅读笔记04

<掌握需求过程>阅读笔记04 我们在开发我们的系统的时候要是要给用户用使用的,所以用户的使用感受非常重要,这就需要我们站在用户的角度去考虑这个系统如何让用户的使用更加的简捷,而不是站在你开发者的角度去考虑这个系统如何开发比较省我自己的事儿.抱着多一事不如少一事的态度开发出的系统是我们懒惰情况下的残次品,是注定要被淘汰的,而我们也可能因为这样的态度,面临我们的工作也将被人这样轻视.要把握好用户的使用习惯.操作环境,就需要我们去体会用户的使用感受,就需要我们具有同理心. 编写用户故事.我们可以把我

Android自定义View学习笔记04

Android自定义View学习笔记04 好长时间没有写相关的博客了,前几周在帮学姐做毕设,所以博客方面有些耽误.过程中写了一个类似wp的磁贴的view,想再写个配套的layout,所以昨天看了一下自定义viewGroup的相关知识-晚上睡觉想了一下可行性不是很高-代码量还不如直接自己在xml上写来得快,速度上也是个问题.今天看了一下张鸿洋老师的Android 自定义View (三) 圆环交替 等待效果这篇博文,再加上前一段时间看到的一幅图,结合之前写的一个圆形imageView的实现博文And

《30天自制操作系统》笔记(04)——显示器256色

<30天自制操作系统>笔记(04)--显示器256色 进度回顾 从最开始的(01)篇到上一篇为止,已经解决了开发环境问题和OS项目的顶层设计问题. 本篇做一个小练习:设置显卡显示256色. 原理 设置显卡模式 调用BIOS中断命令INT 0x10,设置显卡模式为VGA图形模式,320*200*8位彩色模式,调色板模式.代码如下. 1 MOV AL,0x13 ; VGA图形模式,320*200*8位彩色模式 2 MOV AH,0x00 3 INT 0x10 设置调色板 256色的调色板是这样一个

【OpenGL 学习笔记04】顶点数组

通过之前的学习,我们知道,如果要绘制一个几何图形,那就要不断的调用绘制函数,比如绘制一个20条边的多边形,起码要调用22条函数(包含glBegin和glEnd). 所以OpenGL提供了一系列的顶点数组函数减少函数调用的次数来提高性能.而且使用顶点还可以避免顶点共享的冗余处理. 1.简单示例 先来回顾一下之前我们是怎么画直线的: void drawOneLine(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2) { glBegin(GL_LINES); g

SWIFT学习笔记04

1.在实际编译时,Swift 编译器会优化字符串的使用,使实际的复制只发生在绝对必要的情况下,这意味着您将字符串作为值类型的同时可以获得极高的性能. 2.for character in "Dog!" { println(character) } // D // o // g // ! 3.通过标明一个Character类型注解并通过字符字面量进行赋值,可以建立一个独立的字符常量或变量: let yenSign: Character = "¥" 4.计算字符数量 l

YII2操作mongodb笔记(转)

返回博客列表 原 YII2操作mongodb笔记 风清扬-深圳 发布时间: 2015/12/17 15:20 阅读: 895 收藏: 2 点赞: 0 评论: 0 操作之前得保证已经安装了mongodb,windows下安装可参考另一篇博文: http://my.oschina.net/chinahub/blog/479268 componets配置: 'mongodb' => [     'class' => '\yii\mongodb\Connection',     'dsn' =>

《用户故事与敏捷开发》阅读笔记04

  <用户故事与敏捷开发>阅读笔记04 今天抽出了两个小时读了<用户故事与敏捷开发>的第十二.十三.十四以及十五章并写了这篇阅读笔记.第十二章标题为"故事不是什么".IEEE 830是一本关于如何编写软件需求规格的指南,最突出的特征是使用短语"系统应该.....",但作者认为以这种方式编写系统的所有需求实际是一个不可能的任务.因为用户看到正在开发的软件时总会有有效和重要的反馈循环.他们会改变之前的想法,而且每个需求的成本是不可见的,会造成分析

Effective C++笔记04:设计与声明

条款18:让接口容易被正确使用,不易被误用 1,好的接口很容易被正确使用,不容易被误用.你应该在你的所有接口中努力达成这些性质. 2,"促进正使用"的办法包括接口的一致性,以及与内置类型的行为兼容. 3,"阻止误用"的办法包括建立新类型,限制类型上的操作,束缚对象值,以及消除客户的资源管理责任. 4,shared_ptr支持定制型删除器.这可以防范DLL问题,可以用来自动解除互斥锁. 条款19:设计class犹如设计type 博客地址:http://blog.csd

HTML学习笔记04

HTML学习笔记04 一.HTML样式 1.外部样式表:例如<link rel="stylesheet" type="text/css" href="mystle.css"> 2.内部样式表:在head部分通过<style>定义内部样式表,如<style type="text/css"> p{margin-left:20px}</style> 3.内联样式:在相关的标签中使用样式