在一些特殊情况下,需要将mongodb的集合设定为一个固定大小,这样数据文件就不会无限制的增大,有利于维护。
本人碰到的问题就是ceilometer使用的mongodb,由于不断的采集数据,导致数据文件不断增大,有时候就会将磁盘占满,导致出现其他问题。采用这种设定一个固定大小的方法,有效解决了这个问题。
1.Capped Collection介绍
Capped Collection 是一种特殊的集合,它大小固定,当集合的大小达到指定大小时,新数据覆盖老数据。Capped collections可以按照文档的插入顺序保存到集合中,而且这些文档在磁盘上存放位置也是按照插入顺序来保存的,所以当我们更新Capped collections中文档的时候,更新后的文档不可以超过之前文档的大小,这样话就可以确保所有文档在磁盘上的位置一直保持不变。
由于Capped collection是按照文档的插入顺序而不是使用索引确定插入位置,这样的话可以提高增添数据的效率。MongoDB的操作日志文件oplog.rs就是利用Capped Collection来实现的。
除此之外,Capped Collection还有以下的一些特点,首先是不允许删除,但是可以调用drop()删除集合中的所有行,不许删除的原因也是为了保持每个文档在磁盘上的位置不变。在32位机器上一个capped collection的最大值约482.5M,64位上没有限制系统文件大小限制。不可以对 Capped Collection 进行分片,在 2.2 版本以后,创建的Capped Collection 默认在 _id 字段上创建索引,而在 2.2 版本或以前没有。
Capped Collection主要用于存储日志信息和缓存一些少用的文档。
2.具体使用
2.1创建Capped Collection
db.createCollection("meter",{capped:true,size:1073741824,max:50})
说明:通过 db.createCollection 命令创建 Capped Collection 集合,创建时必须指定
集合最大值,用于预先分配空间。上面的例子是每个文件最大为1G,保留最多50个对象。一般可以不用限定对象的数量。
2.2查看集合是否是Capped collection
> db.meter.isCapped() > db.meter.stats()
下面是本人的测试结果:
> db.meter.drop() > db.createCollection("meter",{capped:true,size:1073741824,max:50}) > db.meter.isCapped() true > db.meter.stats() { "ns" : "ceilometer.meter", "count" : 5, "size" : 7452, "avgObjSize" : 1490.4, "storageSize" : 1073741824, "numExtents" : 1, "nindexes" : 1, "lastExtentSize" : 1073741824, "paddingFactor" : 1, "systemFlags" : 1, "userFlags" : 0, "totalIndexSize" : 8176, "indexSizes" : { "_id_" : 8176 }, "capped" : true, "max" : 50, "ok" : 1 }
相关推荐
MongoDB中有一种特殊类型的集合,值得我们特别留意,那就是固定集合(capped collection)。 固定集合可以声明collection的容量大小,其行为类似于循环队列。数据插入时,新文档会被插入到队列的末尾,如果队列已经...
在MongoDB中,固定集合(capped collection)是一种特殊类型的集合,具有固定大小和自动溢出处理机制。当固定集合达到其容量时,新插入的文档会替换最旧的文档,确保集合始终保持在设定的大小内。 1. 创建固定集合...
MongoDB的固定集合(Capped Collections)是一种特殊类型的集合,设计用于高效地存储有固定大小限制的数据,类似于一个循环缓冲区。固定集合的主要特点是它的大小是固定的,一旦达到上限,新的插入操作会覆盖最早的...
MongoDB 的 Capped Collection是一个天生的日志系统,MongoDB自己的oplog就是用它来存储的,Capped Collection的特点是可以指定Collection的大小,当记录总大小超过设定大小后,老的数据会被自动抹掉用于存储新的...
MongoDB 还提供了一种特殊的集合类型——“固定大小集合”(Capped Collections),用于实现高性能的队列功能。Capped Collections 有固定的存储容量,一旦达到上限,新插入的数据会替换最旧的数据,保持集合的大小...
在这个例子中,我们看到一个名为 `MongoDBJDBC` 的 Java 类,它演示了如何连接到 MongoDB 服务器并获取集合。以下是关键步骤的详细解释: 1. **连接到 MongoDB 服务**: 使用 `MongoClient` 类的构造函数,传入 ...
05★MongoDB学习★操作集合(Collection)
这段代码会创建一个上限为1MB且最多存储10000个文档的固定大小(capped)集合。 6. 关闭连接 当完成数据库操作后,别忘了关闭连接: ```java mongoClient.close(); ``` 7. 错误处理 在示例代码中,我们使用了异常...
集合可以通过 `db.createCollection(name, options)` 创建,其中`options`可以包含`size`(预分配空间)、`capped`(是否为固定大小的集合)和`max`(固定集合的最大文档数)等。 4. **删除集合**: `db.mycoll....
例如,你可以设置`capped`为`true`来创建一个封顶集合,这种集合在达到指定大小后会自动覆盖最旧的条目。还可以指定`size`参数为封顶集合的最大字节数,以及`max`参数来限制封顶集合中最多可以存储的文档数量。例如...
2. 集合(Collection):集合是MongoDB中的逻辑数据存储单元,类似于关系数据库的表,但不需要预先定义列或数据类型。 3. 数据库(Database):数据库是MongoDB中存储数据的容器,可以看作是多个集合的集合。 4. 分...
在这个文件中,有一个方法是parseThinkWhere,这个方法负责解析查询条件并生成MongoDB能够理解的查询语句。根据上述内容,parseThinkWhere方法的switch语句中缺少了对_complex的处理,因此它不支持复合查询。 在...
5. **集合操作**:集合是 MongoDB 存储数据的基本单元,类似于 SQL 中的表。可以使用 Collection<T> 来操作集合: ```csharp var collection = database.GetCollection("myCollection"); ``` 其中 `MyDocument` 是...
这部分内容正在整理中,通常会涵盖Java驱动的安装、连接MongoDB、执行查询和操作文档的方法。 ### 第 5 章 其他 这部分可能包括监控、备份恢复、安全设置、性能优化等内容。MongoDB提供了丰富的管理工具,如`...
在MongoDB中,数据组织的核心概念包括数据库(database)、集合(collection)、文档(document)和索引(index)。让我们详细了解一下这些概念。 1. 数据库(Database) 在MongoDB中,数据库是数据存储的基本单元...
- `size`: 为固定集合指定最大大小(以字节为单位)。如果 `capped` 设置为 `true`,则必须提供此参数。 - `max`: 指定固定集合中最多能包含多少个文档。 例如,创建一个名为 `myCollection` 的固定集合,大小为 ...
更具体的,你可以输入`db.help()`来查看当前数据库支持的方法,或者`db.<collection>.help()`获取特定集合的操作帮助。 6. **数据操作**:例如,`db.<collection>.find()`用于查询集合中的数据,`db.<collection>....
- 其中`capped`为布尔值,表示是否为固定大小;`size`指定集合的最大字节数;`max`指定集合中最多能包含的文档数量。 - **删除集合**: - 使用`db.collection_name.drop()`命令删除指定的集合。 - **查看数据库帮助...
创建集合是MongoDB中的基本操作,集合相当于关系数据库中的表。在PHP中,我们可以使用`MongoClient`类连接到MongoDB服务器,并通过`createCollection`方法来创建新的集合。以下是对创建集合过程的详细说明: 1. **...