使用 MongoDB 8.0 的 4 大理由
1. MongoDB 8.0 比以前快 30% 以上
MongoDB 8.0 允许应用程序快速高效地查询和转换数据,从而显著提高性能,吞吐量提高了 36%。MongoDB 8.0 中的架构优化减少了内存使用量和查询时间,并且更高效的批处理和优化相结合,使数据复制期间的更新吞吐量提高了 59%,并发写入速度提高了 20%。此外,MongoDB 8.0 中的优化意味着数据库可以处理更大量的时间序列数据,并将操作速度提高 200% 以上,同时降低资源使用和成本。
2. MongoDB 8.0 比以往任何时候都更安全
MongoDB 可查询加密是由 MongoDB 加密研究小组开发的行业首创创新。它允许客户在客户端加密敏感数据,将其作为完全随机的加密数据安全地存储在 MongoDB 数据库中,并对加密数据运行富有表现力的查询以进行处理。
除了相等查询之外,MongoDB 8.0 现在还支持范围查询,以扩展安全数据检索,为常见搜索提供更大的灵活性。使用可查询加密,所需数据将保持加密状态,直到使用客户控制的解密密钥到达授权最终用户,无需加密专业知识。
3. MongoDB 8.0 使其更便宜、更易于扩展
使用 MongoDB 8.0,水平扩展现在更快、更容易,并且成本更低。通过水平扩展,应用程序可以通过将数据拆分到多个服务器(称为分片)来扩展,从而超越传统数据库资源的限制,而无需为单个服务器预先预置越来越多的计算资源。MongoDB 8.0 中新的分片功能使跨分片分发数据的速度提高了 50 倍,并且入门成本降低了 50%。
4. MongoDB 8.0 为您提供更多控制权,帮助您的应用程序平稳运行
MongoDB 8.0 为团队提供了更好的控制,优化数据库性能,以应对不可预测的使用高峰和持续的高需求时期。MongoDB 8.0 包含新功能,可为运行查询设置默认最大时间限制,拒绝重复出现的问题查询类型,以及设置查询设置以在数据库重启等事件中持续存在。这些功能有助于提供一致的应用程序行为和高性能,而不受需求高峰或意外事件的影响。
MongoDB 8.0中的兼容性更改
查询行为变化
{ _id: 1, name: null },
{ _id: 2, name: undefined },
{ _id: 3, name2: "Alice" }
db.people.find({ name: null })
db.people.find({ name: undefined })
从 MongoDB 8.0开始,前面的查询与name字段为undefined ( _id: 2 ) 的文档不匹配。要匹配name为undefined的文档,您必须在查询中显式指定undefined类型。示例,以下查询会返回所有示例文档:db.people.find( {
$or: [
{ name: null },
{ name: { $type: "undefined" } }
]
} )
废弃功能
## find 命令添加查询设置,指定查询使用索引
db.adminCommand( {
setQuerySettings: {
find: "pizzaOrders",
filter: {
orderDate: { $gt: ISODate( "2023-01-20T00:00:00Z" ) }
},
sort: {
totalNumber: 1
},
$db: "test"
},
settings: {
indexHints: {
ns: { db: "test", coll: "pizzaOrders" },
allowedIndexes: [ "orderDate_1" ]
},
queryFramework: "classic"
}
} )
##获取查询设置
db.aggregate( [
{ $querySettings: {} }
] )
其他废弃项:
db.aggregate( [
{ $shardedDataDistribution: { } }
] )
输出字段
$shardedDataDistribution阶段输出数据库中每个分分片的集合的文档大量。这些文档包含以下字段:
字段名称 | 数据类型 | 说明 |
---|---|---|
ns | 字符串 | 分片集合的命名空间。 |
shards | 阵列 | 集合中的分片以及每个分片的数据分布信息。 |
shards.numOrphanedDocs | 整型 | 分片中的孤立文档的数量。 |
shards.numOwnedDocuments | 整型 | 分片拥有的文档数。 |
shards.ownedSizeBytes | 整型 | 分片拥有的文档的存储量(以字节为单位)。 |
shards.orphanedSizeBytes | 整型 | 分片中孤立文档的存储量(以字节为单位)。 |
从 MongoDB8.0 $shardedDataDistribution开始,仅当主分片包含数据段或 孤立文档 时, 才会返回集合 主 分片的输出。
向后不兼容的功能
MongoDB 8.0弃用了以下服务器状态指标:metrics.repl.buffer.count
metrics.repl.buffer.maxSizeBytes
metrics.repl.buffer.sizeBytes
它将它们替换为以下指标:metrics.repl.buffer.apply.count
metrics.repl.buffer.apply.maxSizeBytes
metrics.repl.buffer.apply.sizeBytes
metrics.repl.buffer.write.count
metrics.repl.buffer.write.maxSizeBytes
metrics.repl.buffer.write.sizeBytes
一般性变更
var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "abc123", defaultQty: 100, status: "A", points: 100 } );
bulk.insert( { item: "ijk123", defaultQty: 200, status: "A", points: 200 } );
bulk.insert( { item: "mop123", defaultQty: 0, status: "P", points: 0 } );
bulk.execute();
以上是 MongoDB 8.0 版本的主要变更点,涵盖了查询行为、废弃功能、向后不兼容的特性以及一些通用的改进。这些变更旨在提升系统的性能、安全性和易用性。