前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么选择 MongoDB 8.0?四个不可抗拒的理由

为什么选择 MongoDB 8.0?四个不可抗拒的理由

作者头像
DBA实战
发布2024-10-12 21:21:15
2620
发布2024-10-12 21:21:15
举报
文章被收录于专栏:DBA实战

使用 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中的兼容性更改

查询行为变化

  • null 和 undefined 比较:从 MongoDB 8.0 开始,在等值匹配表达式中将 null 与字段值进行比较时,不再匹配 undefined 值。
代码语言:javascript
复制
{ _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" } } 
] 
} )
  • 影响的操作:此变化同样影响 eq、in 以及

废弃功能

  • LDAP 认证和授权:从 MongoDB 8.0 开始,LDAP 身份验证和授权功能被废弃,虽然在整个 MongoDB 8.0 生命周期内仍可使用,但将在未来的主版本中移除。
  • Hedged Reads:从 MongoDB 8.0 开始,Hedged Reads 被废弃,指定读取偏好最近的查询不再默认使用 Hedged Reads,如果显式指定,则 MongoDB 会执行 Hedged Read 并记录警告。
  • 索引过滤器:从 MongoDB 8.0 开始,推荐使用查询设置代替添加索引过滤器,因为索引过滤器不具备持久性和易于在所有集群节点上创建的特点。
代码语言:javascript
复制
## 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: {} }
] )
  • 服务器端 JavaScript 函数:从 MongoDB 8.0 开始,服务器端 JavaScript 函数(如 accumulator、function、

其他废弃项:

  • 还包括 tcmallocAggressiveMemoryDecommit 参数、enableFinerGrainedCatalogCacheRefresh 参数、不推荐使用timeField作为时间序列集合中的分分片键、
  • MongoDB 8.0弃用了cleanupOrphaned命令。要确认没有剩余孤立文档,请改用$shardedDataDistribution 。
代码语言:javascript
复制
db.aggregate( [
   { $shardedDataDistribution: { } }
] )

输出字段

$shardedDataDistribution阶段输出数据库中每个分分片的集合的文档大量。这些文档包含以下字段:

字段名称

数据类型

说明

ns

字符串

分片集合的命名空间。

shards

阵列

集合中的分片以及每个分片的数据分布信息。

shards.numOrphanedDocs

整型

分片中的孤立文档的数量。

shards.numOwnedDocuments

整型

分片拥有的文档数。

shards.ownedSizeBytes

整型

分片拥有的文档的存储量(以字节为单位)。

shards.orphanedSizeBytes

整型

分片中孤立文档的存储量(以字节为单位)。

从 MongoDB8.0 $shardedDataDistribution开始,仅当主分片包含数据段或 孤立文档 时, 才会返回集合 主 分片的输出。

向后不兼容的功能

  • 直接连接分片并运行命令:从 MongoDB 8.0 开始,只能对分片运行特定命令(某些命令)。尝试直接连接到分片并运行不受支持的命令时,MongoDB 将返回错误。
  • 写关注多数:从 MongoDB 8.0 开始,使用 "majority" 写关注的写操作会在大多数副本集成员写入 oplog 条目后返回确认,提高了 "majority" 写操作的性能。在以前的版本中,这些操作将等待,并在大多数副本集成员应用更改后返回确认。
  • Oplog 缓冲区:从 MongoDB 8.0 开始,次级节点以批处理方式并行写入和应用 oplog 条目,这引入了对 metrics.repl.buffer 状态指标的破坏性变化,并用新的指标取代了一些旧的服务器状态指标。
代码语言:javascript
复制
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

一般性变更

  • 关闭性能:从 MongoDB 8.0 开始,Bulk.insert() 和数据摄入工作负载可能表现更好,但在这些工作负载之后立即关闭 MongoDB 可能需要更长时间,因为需要额外的数据刷新到磁盘。
代码语言:javascript
复制
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 开始,不允许同时在同一集合上运行多个并发compact的压缩命令。
  • 地理空间输入验证:从 MongoDB 8.0 开始,不允许使用格式错误的输入执行地理空间查询。
  • OIDC 身份提供者可以共享发行者:从 MongoDB 8.0 开始,当定义了多个身份提供者时,oidcIdentityProviders参数接受重复的发行者值,前提是每个发行者的受众值是唯一的。
  • serverStatus 输出更改:从 MongoDB 8.0 开始,wiredTiger.concurrentTransactions 被重命名为 queues.execution
  • 聚合变化:当计算排名时,null 与 denseRank 和 ranksortBy 操作中的缺失字段值将被同等对待。这一更改将使 denseRank 和 ranksortBy的行为与
  • 升级的 TCMalloc:从 MongoDB 8.0 开始,MongoDB 使用了升级版的 TCMalloc,该版本使用每 CPU 缓存而不是每线程缓存,以减少内存碎片并提高数据库在高压力工作负载下的弹性。

以上是 MongoDB 8.0 版本的主要变更点,涵盖了查询行为、废弃功能、向后不兼容的特性以及一些通用的改进。这些变更旨在提升系统的性能、安全性和易用性。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档