首页 > 数据库 >MongoDB 建模调优&change stream实战

MongoDB 建模调优&change stream实战

时间:2024-12-09 11:58:44浏览次数:6  
标签:stream MongoDB 使用 索引 调优 分片 集合 数据

MongoDB开发规范

(1)命名原则。数据库、集合命名需要简单易懂,数据库名使用小写字符,集合名称使用统一命名风格,可以统一大小写或使用驼峰式命名。数据库名和集合名称均不能超过64个字符。

(2)集合设计。对少量数据的包含关系,使用嵌套模式有利于读性能和保证原子性的写入。对于复杂的关联关系,以及后期可能发生演进变化的情况,建议使用引用模式。

(3)文档设计。避免使用大文档,MongoDB的文档最大不能超过16MB。如果使用了内嵌的数组对象或子文档,应该保证内嵌数据不会无限制地增长。在文档结构上,尽可能减少字段名的长度,MongoDB会保存文档中的字段名,因此字段名称会影响整个集合的大小以及内存的需求。一般建议将字段名称控制在32个字符以内。

(4)索引设计。在必要时使用索引加速查询。避免建立过多的索引,单个集合建议不超过10个索引。MongoDB对集合的写入操作很可能也会触发索引的写入,从而触发更多的I/O操作。无效的索引会导致内存空间的浪费,因此有必要对索引进行审视,及时清理不使用或不合理的索引。遵循索引优化原则,如覆盖索引、优先前缀匹配等,使用explain命令分析索引性能。

(5)分片设计。对可能出现快速增长或读写压力较大的业务表考虑分片。分片键的设计满足均衡分布的目标,业务上尽量避免广播查询。应尽早确定分片策略,最好在集合达到256GB之前就进行分片。如果集合中存在唯一性索引,则应该确保该索引覆盖分片键,避免冲突。为了降低风险,单个分片的数据集合大小建议不超过2TB。

(6)升级设计。应用上需支持对旧版本数据的兼容性,在添加唯一性约束索引之前,对数据表进行检查并及时清理冗余的数据。新增、修改数据库对象等操作需要经过评审,并保持对数据字典进行更新。

(7)考虑数据老化问题,要及时清理无效、过期的数据,优先考虑为系统日志、历史数据表添加合理的老化策略。

(8)数据一致性方面,非关键业务使用默认的WriteConcern:1(更高性能写入);对于关键业务类,使用WriteConcern:majority保证一致性(性能下降)。如果业务上严格不允许脏读,则使用ReadConcern:majority选项。

(9)使用update、findAndModify对数据进行修改时,如果设置了upsert:true,则必须使用唯一性索引避免产生重复数据。

(10)业务上尽量避免短连接,使用官方最新驱动的连接池实现,控制客户端连接池的大小,最大值建议不超过200。

标签:stream,MongoDB,使用,索引,调优,分片,集合,数据
From: https://blog.csdn.net/Zhuxiaoyu_91/article/details/144338381

相关文章

  • CS 144 check1: stitching substrings into a byte stream
    添加gitee的链接为upstream:$gitremoteaddupstreamhttps://gitee.com/haozizhang/cs144-2024-minnow.git从远程获取代码:$gitfetchupstreamcheck1-startercode合并:$gitmergeupstream/check1-startercode合并后的gitgraph:这个check需要编写Reassembler的......
  • JVM 性能调优 -- Arthas
    前言:之前陆陆续续的分享了JDK自带的相关调优命令、图形化界面工具、第三方网站工具等,本篇我们分享一下Alibaba开源的工具Arthas。JVM系列文章传送门初识JVM(Java虚拟机)深入理解JVM(Java虚拟机)一文搞懂JVM垃圾回收(JVMGC)深入理解JVM垃圾回收算法一文搞懂......
  • Python 潮流周刊#80:Django 项目性能调优(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,3则音视频,全文2100字。以下是本期摘要:......
  • Centos上安装配置Mongodb服务,并把全部文件放入/usr/My-Application文件夹中
    #创建安装目录sudomkdir-p/usr/My-Application/mongodbcd/usr/My-Application#下载MongoDBwgethttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-6.0.12.tgz#解压文件tar-zxvfmongodb-linux-x86_64-rhel80-6.0.12.tgz#重命名目录mvmongod......
  • C# 串口通信利器 SerialPortStream库
    学习备忘-源自 https://mp.weixin.qq.com/s/hDVD9Ij22KSHm7TUmETcmQ前言物联网(IoT)和嵌入式系统的开发中,串口通信是一项不可或缺的技术。C#作为一种广泛使用的编程语言,同样支持多种方式进行串口通信。其中,SerialPortStream 库因其简单易用的API和强大的功能成为了众多开发者......
  • 一次彻底掌握数据中心级的JVM调优实战经验
    出现内存溢出的场景通常发生在应用程序中存在内存泄漏、对象生命周期过长、对象频繁创建但未能及时回收等问题。以下是几个真实的业务场景,结合内存溢出问题,并从多个角度提出优化方法,来提高内存使用效率。场景1:大量业务数据缓存导致堆内存溢出场景描述:一个企业级Web应......
  • Mac系统安装MongoDB
    下载MongoDB官网地址提供:https://www.mongodb.com/zh-cn。选择版本建议选择5.0(如果下载6.0以上版本的mongodb时在你配置完到输入mongo的步骤时,可能会出现「zsh:commandnotfound:mongo」,即使你没做错任何配置,并且当你进入mongodb/bin时你会发现也不存在mongo文件,这时你......
  • docker快速启动一个mongodb
    使用mongodb(bitnami)镜像docker-compose快速启动一个mongodb,用于调试学习还是不错的,还有一个mongo-express的web管理页面version:"3.9"services:mongodb:image:docker.io/bitnami/mongodb:7.0.14restart:alwayscontainer_name:mongodb7user:......
  • SpringCloudStream极简教程
    简介SpringCloudStream是一个轻量级消息驱动微服务框架,旨在简化与消息中间件(如Kafka、RabbitMQ等)的集成,支持消息的发布和订阅模式。它提供了一种基于Spring编程模型的方式(即自动依赖注入和强调通过注解来完成功能的封装),使得构建可扩展和灵活的消息驱动应用变得更加简单。......
  • C# FileStream、StreamReader/Writer、MemoryStream
    提及文件流,不得不先说以下几个类FileStream,MemoryStream,NetWorkStream,StreamReader,StreamWriter,TextReader,TextWriter在用这些类之前,我们先来了解一下这些类的用途以及区别。先声明一个路径:string path=“D:/Stream/IO.txt”;一:FileStream类用途:主要用于对磁盘上文件的读写,常......