MongoDB–固定集合
一:固定集合
- 固定集合是按LRU(Least Recently Used最近最少使用)规则和插入顺序进行 age-out(老化移出)处理 的,不管固定集合先达到哪一个限制,都是新文档将旧文档挤出集合
- 常用于日志数据的管理
- 固定集合的数据被写入到磁盘上的固定空间,因此他们在蝶式磁盘上的写入速度非常快,尤其是集合拥有专用磁盘的时候
- 固定集合不能被切片
- 为固定集合指定文档限制的时候必须也要指定固定集合的大小
- 固定集合既不能超过文档限制,也不能超过大小限制
- 可以插入及更新,但更新不能超出collection的大小,否则更新失败,不允许删除,但是可以调用drop()删除集合中的所有行,但是drop后需要显式地重建集合。
1. 创建固定集合
cqsm>db.createCollection("capp",{"capped":true,"size":1000,"max":100})
{ "ok" : 1 }
capped:是否是固定集合
size:集合的大小
max:最大的文档数
可以使用convertTocapped选项将常规集合转换为固定集合,如下将shop集合转换为固定集合
db.runCommand({"convertTocapped":"shop","size",10000})
注意:固定集合创建之后就不能修改
2. 自然排序
对固定集合可以进行自然排序,自然排序返回结果集合文档的顺序就是文档在磁盘上的位置。对于大多数集合来说自然排序的意义不大,因为文档位置是经常变动的。
从旧到新排序:
db.shop.find().sort({"$natural":1})
从新到旧排序:
db.shop.find().sort({"$natural":-1})
3. 循环游标
由于普通集合并不维护文档的顺序,所以循环游标用在固定集合上面。循环游标和一般游标的不同在于循环游标在迭代完结果集之后并不会销毁,当有新文档插入到集合中到集合中的时候,循环游标还会继续取到结果。循环游标在10分钟没有的得到新的结果或者人为中止的时候才会被释放。(不能在mongdb shell中使用循环游标)
4. 没有_id索引的集合
默认情况下集合都有_id索引,可以调用createCollection创建集合时候指定anuoIndexId选项为false就不会自动为id加索引。如果没有id索引就不能复制mongod了。"_id"必须是唯一索引,id一旦创建就不能删除了。