mongo大数据处理优化

简介: mongo大数据处理优化

前言

mongo的使用过程中,我们有了越来越多的数据,当数据到达千万级之后,数据处理的效率就是必须提上日程的东西了。
比如:当我们进行分页时,会发现一个问题,刚开始的跳过2000展示2000,返回速率很快,毫秒级别,但是当你跳过4000000(400W)展示2000,那可能就需要5秒以上,如果你再加一些查询条件,反应速率可能更慢。所以,千万级以上的大数据处理优化势在必行,
以下,为一部分数据优化方案。

1.优化方案

1.1 数据模型优化

数据反应缓慢的一个主要问题就是表的数据太大,在此我们说数据占用的空间大,有些数据模型,一条数据中就有几十、上百个字段,对应的,即使数据仅仅有几百万条,也会查的非常缓慢,因此,我们就要优化数据模型;
有些人在表中存储数组套对象这种反mongo的结构!!!
因此,我们需要根据业务场景,对需要查询主要的字段进行单独存储,已便于后续进行索引优化;

1.2 数据库分表

当数据量超过一定量级后,查询性能会明显下降,我们就可以根据业务场景记下你那个分库、分表,较少查询数据是的数据分析总量,就像我们日常对log进行分片存储一样;

最简单的就是,我们可以按照年做分割,将不同年份的数据存入不同的数据表中,在查询之前,判断数据的时间范围,根据不同的时间去不同的表进行查询;
其次一个分表优化,与模型优化一致,提取重要信息字段,将其单拉一个表/视图,通过减少表的字段,来减少表的体积;
缺点:如果查询的时间范围横跨很大,我们要对多张表进行查询,增加了查询次数,并且分页问题比较难以处理,因此要根据实际的业务场景来决定分库分表的粒度;

1.3 缓存数据

1.3.1 接口缓存

最有效的api性能优化手段,但弊端也很明显,缓存时间过长会导致最新的数据无法及时同步,所以需要根据实际场景选择合适的缓存时间;

1.3.2 恒定数据缓存

对于那些一旦产生后就不会再更新的数据,考虑将他们放入缓存,减少mongo查询次数
场景1:跨年后,去年的数据会恒定不变的存入数据库,此时可将这部分数据缓存至内存中
场景2:有时我们的数据库中只存储了id,name信息存储在其他表中,此时我们可以将id和name的映射关系存入内存,减少mongo查询次数

1.4 多节点读写分离

大量索引会影响数据的写入速率,同样,同意节点如果在写入大量的数据时,内存使用率过高,也是会影响数据的读取速率;
如果拥有多个Mongo节点,则可以配置读写分离,所有只涉及查询的数据库连接集中分配到某个读节点;

1.5 索引优化

mongo查询可以使用.explain("executionStats")进行分析,最主要是要看是否避免全表扫描、是否使用索引、是否避免内存排序;
索引的原理是在内存中建立了一个排序的列表,key是被添加索引字段的值,value是字段对应document的物理地址,通过查询这张表来避免全文索引,提升查询速度,同时每次给collection插入数据时也会同时给索引中新加入一条数据;
常用的索引类型:普通索引、text、hashed

  • 普通索引:查询时需要按照该字段排序,加普通索引最合适
  • text:查询时需要按照该字段模糊查询,加text索引最合适
  • hashed:查询条件包含该字段的==条件,加hashed索引最合适

索引的本质就是利用空间换时间,因为建立索引需要占用很大的存储空间,并且影响数据插入性能,因此不能滥用索引;
关于索引的详细使用,可以参考以下文章
https://www.yuque.com/morange/morange/ohryo0

1.6 查询语句优化

查询条件优化是最容易执行的,也是最难执行;但是可以参考下面几个原则:
原则一:查询结果和条件不包含所有字段,则需要有限使用projection,只返回需要的字段,尽量减少无效字段的返回与查询;
原则二:优先使用match,再使用sort和group;

小技巧:可以使用.lean()方法进行读取数据,但是要注意,lean()方法会将mongo的原子性破坏为json数组,所以,在使用lean()方法时,mongoose的Getters方法会失效!!!按需求使用!

博主寄语

保持好的习惯,才会让你持续进步
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
2天前
|
供应链
代采系统如何利用大数据分析优化采购决策?
代采系统可以利用大数据分析来优化采购决策
|
2天前
|
存储 关系型数据库 MySQL
大数据量分页查询怎么优化提速
大数据量分页查询怎么优化提速
30 2
|
2天前
|
数据采集 监控 算法
利用大数据和API优化电商决策:商品性能分析实践
在数据驱动的电子商务时代,大数据分析已成为企业提升运营效率、增强市场竞争力的关键工具。通过精确收集和分析商品性能数据,企业能够洞察市场趋势,实现库存优化,提升顾客满意度,并显著增加销售额。本文将探讨如何通过API收集商品数据,并将这些数据转化为对电商平台有价值的洞察。
|
10月前
|
存储 SQL 关系型数据库
大数据量下数据库分页查询优化方案汇总
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。
354 2
|
9月前
|
Prometheus 运维 监控
直击运维痛点,大数据计算引擎 EasyMR 的监控告警设计优化之路
监控告警在企业保障系统的稳定性和事故快速恢复的全周期链路中都是至关重要的一环。在新版本的 EasyMR 中袋鼠云开发团队也对监控告警功能进行了全新的优化,通过本文和大家分享监控告警功能的设计思路以及碰到各类问题痛点的解决方法。
311 0
|
2天前
|
数据采集 供应链 安全
利用大数据优化业务流程:策略与实践
【5月更文挑战第11天】本文探讨了利用大数据优化业务流程的策略与实践,包括明确业务目标、构建大数据平台、数据采集整合、分析挖掘及流程优化。通过实例展示了电商和制造企业如何利用大数据改进库存管理和生产流程,提高效率与客户满意度。随着大数据技术进步,其在业务流程优化中的应用将更加广泛和深入,企业需积极采纳以适应市场和客户需求。
|
2天前
|
分布式计算 监控 调度
给技术新人的ODPS优化建议
数据开发基本都是从陌生到熟悉,但是写多了就会发现各种好用的工具/函数,也会发现各种坑,本文分享了作者从拿到数据到数据开发到数据监控的一些实操经验。
95621 92
|
2天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
103488 1
|
2天前
|
机器学习/深度学习 存储 分布式计算
scikit-learn在大数据处理中的优化与加速
【4月更文挑战第17天】面对大数据处理的挑战,scikit-learn的性能优化与加速至关重要。优化策略包括内存管理(数据集缩减、数据流处理、分布式存储)和算法选择(如在线学习、低内存占用算法)。并行化计算通过设置`n_jobs`或使用Dask、Joblib提升速度,分布式计算如Spark、Dask Distributed扩展处理能力。结合案例实践,建议综合考虑各种策略,并关注新技术以适应不断变化的大数据需求。未来,期待更多优化方案提升scikit-learn在大数据场景下的效能。
|
6月前
|
人工智能 Cloud Native 大数据
构建高性能云原生大数据处理平台:融合人工智能优化数据分析流程
构建高性能云原生大数据处理平台:融合人工智能优化数据分析流程
344 0

热门文章

最新文章