在这篇文章中,我们将讨论限制MongoDB的集合。限制是一个固定集合,集合插入文档在一个循环的方式。这意味着一旦分配文件完整,数据的开头第一个文件覆盖。考虑一下:我们定义一个上限1 gb大小的集合,它会清除最古老的文档集合的大小分配是否完整,我们必须插入一个新文档。
限制集合担保,它将保持文档的插入顺序。因此,它不需要额外的索引来检索文档。这有助于限制收集维持高吞吐量的插入。限制收集的文档包含_id字段,默认情况下指数,和删除文档的基于最古老的_id会发生。MongoDB提供大小自动增加限制收集的256的整数倍。应该避免在限制收集更新一个文档,但如果你想更新,你可以。只有你不增加文档的原始大小,并建议更新,因为它扫描整个集合。创建一个索引,以避免收集扫描。
可以创建限制收集如下:
|
1
|
db
.createCollection
(
“日志”
,
{
封顶
:
真正的
,
大小
:
500000年
}
)
;
/ /
大小
是
在
字节
。
|
我们也可以指定的最大数量限制文档的集合。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
卢比
:
主
>
db
.createCollection
(
“日志”
,
{
封顶
:
真正的
,
大小
:
500000年
,
马克斯
:
500年
}
)
;
/ /
大小
参数
是
总是
需要
甚至
如果
我们
定义
的
马克斯
文档
数量
。
{
“ok”
:
1
,
“clusterTime美元”
:
{
“clusterTime”
:
时间戳
(
1676896611
,
1
)
,
“签名”
:
{
“希”
:
BinData
(
0
,
" AAAAAAAAAAAAAAAAAAAAAAAAAAA = "
)
,
“keyId”
:
NumberLong
(
0
)
}
}
,
“operationTime”
:
时间戳
(
1676896611
,
1
)
}
卢比
:
主
>
|
转换限制收集的收集:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
卢比
:
主
>
db
.runCommand
(
{
“convertToCapped”
:
“log_old”
,
大小
:
500000年
,
马克斯
:
50
}
)
{
“ok”
:
1
,
“clusterTime美元”
:
{
“clusterTime”
:
时间戳
(
1676896802
,
3
)
,
“签名”
:
{
“希”
:
BinData
(
0
,
" AAAAAAAAAAAAAAAAAAAAAAAAAAA = "
)
,
“keyId”
:
NumberLong
(
0
)
}
}
,
“operationTime”
:
时间戳
(
1676896802
,
3
)
}
|
验证如果是限制收集:
|
1
2
3
|
卢比
:
主
>
db
.log_old
.isCapped
(
)
真正的
卢比
:
主
>
|
查询限制收集:
MongoDB保证检索的文档将在相同的顺序插入。
|
1
|
db
.log_old
;
(
)
.sort
(
{
美元
自然
:
1
}
)
|
在反向插入顺序返回文档,使用这种方法美元自然参数设置为1。
|
1
|
db
.log_old
;
(
)
.sort
(
{
美元
自然
:
- - - - - -1
}
)
|
改变一个封顶集合大小:
从MongoDB v6.0开始,限制集合大小可以调整大小。然而,在调整限制收集之前,确保featureCompatibilityVersion至少设置为“6.0”。
|
1
|
db
.runCommand
(
{
collMod
:
“日志”
,
cappedSize
:
100000年
}
)
/ /cappedSize
应该
是
在
之间的
0
和
1 pb。
|
如果你想调整限制收集在一个版本比v6.0(没有设置featureCompatibilityVersion来6.0),那么它将失败与错误”未知选项collMod: cappedSize”:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
卢比
:
主
>
db
.version
(
)
4.4.16- - - - - -16
卢比
:
主
>
db
.runCommand
(
{
collMod
:
“日志”
,
cappedSize
:
100000年
}
)
{
“operationTime”
:
时间戳
(
1678096200
,
1
)
,
“ok”
:
0
,
“errmsg”
:
“未知选项collMod: cappedSize”
,
“代码”
:
72年
,
“代号”
:
“InvalidOptions”
,
“clusterTime美元”
:
{
“clusterTime”
:
时间戳
(
1678096200
,
1
)
,
“签名”
:
{
“希”
:
BinData
(
0
,
" AAAAAAAAAAAAAAAAAAAAAAAAAAA = "
)
,
“keyId”
:
NumberLong
(
0
)
}
}
}
卢比
:
主
>
|
优势:
- 支持插入高吞吐量:限制收集数据顺序插入和删除索引的开销;因此,它支持插入高吞吐量。
- 限制收集存储日志信息是有用的,因为它使命令的数据事件。
劣势:
有限制收集的一些限制。
- 限制收集不能分片。
- 限制收集不能有TTL索引。
总结
限制收集可以有用的日志文件来存储信息的接近直接写日志信息的速度没有索引的文件系统开销。MongoDB本身使用限制收集oplog的复制。rs集合的存储机制由于其坚实的性能。Oplog。rs收集是一种特殊的限制收集我们不能创建一个索引,插入一个文档,或者集合。限制收集有其优点和缺点,所以在使用限制收集之前,确保你了解应用程序的需求和相应的决定。
我们也鼓励你尝试我们的产品,MongoDB雷竞技下载官网MongoDB Percona服务器,雷竞技下载官网为MongoDB Percona备份,雷竞技下载官网Percona运营商对MongoDB。我们还建议检查我们的博客MongoDB:为什么你支付企业当开源覆盖吗?






