阿里云优惠
 汇集各种优惠信息 技术资料

首页    数据库    MongoDB sharding 集合不分片性能更高?

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

创建时间:2019-07-13 13:43
浏览量:0
收藏

最近云上用户用户遇到一个 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的扩展能力如何体现?

申请阿里云企业邮箱等产品时,可以使用2000元阿里云代金券。领取后,用户可通过“控制台-费用-代金券”查看已领取的红包详情。

结果分析

这里核心的问题在于 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 的效果,但这个批量导入一般发生在数据导入阶段,影响比较小。

免费领取阿里云1888元代金券大礼包

 

阿里云新老用户均可领取!
自领取后:限时7天使用!

阿里云服务器2折优惠:低至293元/年

 

 

突发性能实例t5 1核1G:293元/年

突发性能实例t5 1核2G:459元/年

突发性能实例t5 2核4G:798元/年

共享型xn4实例1核1G内存:394元/年

共享型n4实例1核2G内存:653元/年

计算网络增强型实例2核4G内存:1566元/年

计算网络增强型实例4核8G内存:2991元/年

点此查看2折活动详情

阿里云高性能云服务器

 

 

网络增强型云服务器:2核4G ¥720元/年

高频应用云服务器:8核16G ¥4109元/年

本地SSD型云服务器:4核16G ¥6218.40元/年

大数据型云服务器:8核32G ¥11375.00元/年

GPU异构云服务器:16核40G ¥15563.00元/年

新用户满立减:每满1000立减50

 

1、到阿里云官网选购产品
2、加入到购物车
3、结算时立享满减

注意:新用户首次购买时必须先加到购物车,然后一起结算才享受此优惠。

腾讯云CVM云服务器22.07元起

 

 

腾讯云1核1G:22.07元/月、794.73元/3年

腾讯云2核2G:36.48元/月、1313.35元/3年

腾讯云2核4G:43.01元/月、1548.5元/3年

腾讯云4核8G:178.5元/月、6426元/3年