MongoDB sharding 集合不分片性能更高?

最近云上用户用户遇到一个 sharding 集群性能问题的疑惑,比较有代表性,简单分享一下

测试配置

  • mongos x 2、shard x 3
  • 测试1:集合不开启分片,批量 insert 导入数据,每个 batch 100 个文档
  • 测试2:集合开启分片,随机生成 shardKey,chunk 已提前 split 好,能确保写入均分到3个shard

测试结果

  • 测试1:单个 shard cpu 跑满,insert qps 在 6w 左右
  • 测试2:3个 shard cpu 跑满,insert qps 在 7w 左右(平均每个分片2.4w左右)

注:两个测试里,mongos 都不是瓶颈,能力足够

从测试结果看,每个shard都承担 1/3 的负载,的确达到横向扩张的目的,但为啥分片之后,单个shard的能力就下降了呢?如果是这样,sharding的扩展能力如何体现?

结果分析

这里核心的问题在于 batch insert 在 mongos 和 mongod 上处理行为的差别

  1. 导入数据时,一次 insert 一条数据,和一次 insert 100 条数据,性能差距是很大的;首先减少了client、server 端之间的网络交互;同时 server 可以将 batch insert 放到一个事务里,降低开销;
  2. mongos 在收到 batch insert 时,因为一个 batch 里的数据需要根据 shardKey 分布到不同的shard,所以一个 batch 实际上需要被拆开的;这里 mongos 也做了优化,会尽量将连续的分布在一个shard上的文档做 batch 发到后端 shard。
  3. 在集合不开启分片的情况,mongos 收到的 batch 肯定是转发给 primary shard,所以转发过去还是一整个 batch 操作; 而在集合开启分片的情况下,因为用户测试时,shardKey 是随机生成的,基本上整个 batch 被打散成单条操作,逐个往后端 shard 上发送,请求到后端 shard 基本已经完全没有合并了。

所以在上述测试中,不分片的单个 shard 6w qps、与分片后每个 shard 2.4w qps,实际上就是请求是否 batch 执行的差别。

对应用的影响

从上面的分析可以看出,batch 往分片的集合写入时,因为无法预知数据应该分散到哪个分片,实际上往后端 shard 写入时,会失去 batch 的效果,但这个批量导入一般发生在数据导入阶段,影响比较小。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个阿里产品经理眼中的“垃圾分类”

我叫切斯,是阿里巴巴的一名产品经理。今天和大家说说一个上线刚刚6天,已被500多万网友疯玩的AI——垃圾图像识别,可见垃圾分类苦天下网友久矣。 以下是一个产品经理的碎碎念~ 有人说它是“国内首款真正的垃圾图像识别产品”,对着…

Mysql8.0 的sql修改成 Mysql7.X的sql

将utf8mb4_0900_ai_ci替换为utf8mb4_general_ci 案例: Mysql8.0 ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci COMMENT分类;Mysql7.X ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci COMMENT测试;

html-初识表单post和get提交

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录注册</title> </head> <body> <h1>注册</h1> <!-- 表单formaction: 表单提交的位置&#xff0c;可以是网站&…

数据仓库架构以及多维数据模型的设计

作者 | 云祁封图| CSDN下载于视觉中国一、前言作者最近看了《Hadoop构建数据仓库实践》这本书&#xff0c;收获很多&#xff0c;把一些关于数仓实践的心得整理出来&#xff0c;方便大家共同学习。注&#xff1a;本文内容由作者摘自《Hadoop构建数据仓库实践》与其他相关参考资料…

npm使用taobao镜像

# 显示当前镜像网址 npm get registry# 使用淘宝镜像网址 npm config set registry https://registry.npm.taobao.org/

html-文本框和单选框

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录注册</title> </head> <body> <h1>注册</h1> <!-- 表单form action: 表单提交的位置&#xff0c;可以是网站&am…

如何使用 Mybatis 实现数据库 CURD 操作?

作者 | 阿文&#xff0c;责编 | 郭芮头图 | CSDN 下载自东方IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的…

如何使用confd+ACM管理Nginx配置

Nginx 作为优秀的开源软件&#xff0c;凭借其高性能高并发等特点&#xff0c;常常作为web和反向代理服务部署在生产环境中。但是当 Nginx 的规模较大时&#xff0c; Nginx 的运维成本也是不断上升。本文介绍如何通过confdACM来管理 Nginx 配置&#xff0c;通过集中式的配置管理…

Vue CLI 安装

前提&#xff1a;安装vue/cli之前要先安装nodejs nodejs官网&#xff1a;https://nodejs.org/en/ Vue CLI官网&#xff1a;https://cli.vuejs.org/zh/ # 安装最新版本vue/cli npm install -g vue/cli# 安装指定版本vue/cli npm install -g vue/cli4.5.9# 查看vue/cli版本 vue -…

html-按钮和多选框

<!-- 多选框input type"checkbox"checked: 默认选中--><p>爱好:<input type"checkbox" value"sleep" name"hobby">睡觉<input type"checkbox" value"code" name"hobby" checked&g…

Soloπ:支付宝开源的Android专项测试工具

1.前言 近年来&#xff0c;随着移动互联网的蓬勃发展&#xff0c;移动测试技术也取得了长足的进步&#xff0c;从早期基于测试脚本的单机自动化&#xff0c;到录制回放、图像识别、云测平台等测试技术贴合实际业务需求深度应用和创新&#xff0c;测试效率从而一次又一次被提升…

Ant-Design-Vue 安装

Ant-Design-Vue官网&#xff1a;https://2x.antdv.com/components/layout-cn # 安装ant-design-vue最新版 npm install ant-design-vue --save# 安装ant-design-vue 指定版本 npm install ant-design-vue2.1.2 --save # 配置 ant-design-vue import Antd from ant-design-vue…

详析 Kubernetes 在边缘计算领域的发展

作者 | 张杰来源 | 分布式实验室现在开源边缘计算正在经历其业界最具活力的发展阶段。如此多的开源平台&#xff0c;如此多的整合以及如此多的标准化举措&#xff01;这显示了构建更好平台的强大动力&#xff0c;以便将云计算带到边缘以满足不断增长的需求。同时Kubernetes现在…

Aliyun Serverless VSCode Extension 上架并开源

Aliyun Serverless VSCode Extension Aliyun Serverless VSCode Extension 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件&#xff0c;该插件是结合了函数计算 Fun 工具以及函数计算 SDK &#xff0c;为用户提供 VSCode 图形化开发调试函数计算以及操作…

html-下拉框、文本域、文件域

一、下拉框 <!-- 下拉框 &#xff0c; 列表框selected: 默认选中--><p>国家:<select name"列表名称"><option value"china">中国</option><option value"us">美国</option><option value"rui…

@Transactional和@Async 使用场景

Transactional事务注解使用场景&#xff1a; 此注解添加到增删改的方法上或者类上&#xff0c;在使用的使用要注意&#xff0c;外部类调用此类 或者类中的方法&#xff0c;此注解会生效。在本类中或者方法内部&#xff0c;相互调用&#xff0c;注解不生效。 作用&#xff1a;操…

QPS 提升60%,揭秘阿里巴巴轻量级开源 Web 服务器 Tengine 负载均衡算法

前言 在阿里七层流量入口接入层&#xff08;Application Gateway&#xff09;场景下&#xff0c; Nginx 官方的Smooth Weighted Round-Robin&#xff08; SWRR &#xff09;负载均衡算法已经无法再完美施展它的技能。 Tengine 通过实现新的负载均衡算法Virtual Node Smooth We…

支付宝的架构到底有多牛逼?还没看完我就跪了!

来源 | Java 之道自 2008 年双 11 以来&#xff0c;在每年双 11 超大规模流量的冲击上&#xff0c;蚂蚁金服都会不断突破现有技术的极限。2010 年双 11 的支付峰值为 2 万笔/分钟&#xff0c;到 2017 年双 11 时这个数字变为了 25.6 万笔/秒。2018 年双 11 的支付峰值为 48 万笔…

Android Native 内存泄漏系统化解决方案

导读&#xff1a;C内存泄漏问题的分析、定位一直是Android平台上困扰开发人员的难题。因为地图渲染、导航等核心功能对性能要求很高&#xff0c;高德地图APP中存在大量的C代码。解决这个问题对于产品质量尤为重要和关键&#xff0c;高德技术团队在实践中形成了一套自己的解决方…

wangeditor 使用

富文本编辑器官网&#xff1a; https://www.wangeditor.com 文档地址: https://doc.wangeditor.com # 安装wangeditor npm i wangeditor --save# 引入 import E from "wangeditor"# 初始化 const editor new E("#div1");# 创建 editor.create();# 获取元素…