Mongodb百亿级数据添加,修改,删除,查询等性能测试【四】
集群的结构,大家可以查看我的另一遍文章,Mongodb的三种集群 在最后一种集群中,介绍到。
目前使用的数据就是最后一个测试集群,留下的数据。
简单介绍一下,四个分片的配置
192.168.99.6 双核 2G 500G(机械硬盘) 192.168.99.7 双核 4G 500G(机械硬盘) 192.168.99.8 双核 4G 500G(机械硬盘) 192.168.99.11 双核 4G 500G(机械硬盘)
mongos和conf服务器的配置也是差不多,就不贴出来了,不是很重要。
很遗憾的是,片健当初只选择了ID主健,当时一时冲动,没想好,这可能给查询给不方便。
首先,看看单条数据文档大小
{
"_id" : ObjectId("5a39d1541b5bd02374f0844a"),
",
,
,
"SendProvince" : "福建省",
"SendCity" : "莆田市",
"DestProvince" : "福建省",
"DestCity" : "莆田市",
",
,
,
"SettlementDate" : null,
",
",
",
",
"CreateTime" : ISODate("2017-12-20T02:56:20.000Z")
}

四个分片服务器,各自数据量和文件大小,一共100亿

192.168.99.6 数量量:2603773123 数据库大小:158G 日志Log大小:67M
192.168.99.7 数量量:2602259209 数据库大小:158G 日志Log大小:1.5G
192.168.99.8 数量量:2534980799 数据库大小:154G 日志Log大小:47G
192.168.99.11 数量量:2601317529 数据库大小:158G 日志Log大小:68M
数据量四个分片,比较均衡,数据库大小差不多,就是这个日志,差距很大哎,我去下载来看看,都什么梗 在内面。46G内网的速度10M/S,下载都要一个小时,不查看了
查询总行数,第一次查询大概花费7-9秒,第二次有缓存,只需0.039秒,应该是缓存的原因。现在问题,我来加一个有条件的总行数查询。
db.getCollection(})
这下就不行了吧,可以看到各个分片的CPU和内存都涨上去了。然后,查询界面一直转,出事了,整整过去了15分钟,还在转,这铁定是要出事了。
除了根据ID查询之外,只要加搜索条件,都卡到不行。到此为止,我不得,不删除这100亿条数据。因为数据过多,很多查询都要费很大的时间,甚至无法获取结果。
我们删除数据先写入小部分数据,比如10亿,进行数据分析。性能比较吧。
看来 “_Id” 并不是一件很好片健,在这个100亿的数据写入中,四个分片服务器,只要一个比较忙,原因就是片健 "_Id"(递增值),使得集群出一个“热点” 分片,然后集群再通过均衡器(mongos)迁移到其它分片。
在这里,小小普及一下片健和工作原理。
片健的选取很关健,会直接影响集群的效率,并且很难再重选片健,特别是大数据。
相关资料我也懒得说,直接你们就去看文档我贴点资料给你们看
我这里重新测试数据,就选择哈希片健吧,比较简单有效。就是查询的也是随机的,这样的话,效率会低。
//模拟数据写入服务器 192.168.99.5 //mongos服务器 192.168.99.9 //分片服务器 192.168.99.6 192.168.99.7 192.168.99.8 192.168.99.10 192.168.99.11 192.168.99.15 192.168.99.16 //配置服务器 192.168.99.12 192.168.99.13 192.168.99.14
sh.shardCollection("shop.Order", { _id : "hashed" } ) //哈希片键
具体怎么搭建,大伙参考头上的链接的文章。相比前一篇,这回测试服务器,又增加了三台。

搭建好了。
虽然选择了哈希片键,但是不知道为什么,还是出现热点服务器

七个分片服务器,只有这一台,比较忙,这台也是主分片。其它的分片的CPU和内存都闲的很啊。头痛。这又是为什么。
准备下班了,留模拟服务器,写一宿吧。明天使用MapReduce 进行大数据分析。就不深入研究了,没有太多时间。
写了一宿,写了五亿条数据。

但是,不旦出现热点分片,还出出数据不平均的情况。热点分片储存达2亿条,其它分片储存5千万条


先查查,这是什么原因吧。终于查出原因,因为昨晚加入的三台测试服务器,有二台时间不同。所以出现这个问题。这个问题在集群搭建中也出现。
昨天我己同步过时间的了。不知道为什么,这二台真的差十几秒时间。可能昨晚眼花了。
时间完全同步之后。集群也恢复了正常。使用哈希片健之后,集群的七个分片都开始工作。CPU和内存都占用。
只能把昨晚的五亿数据,全部删除,现在重新生成,大概10万/秒的速度。

网卡的工作效率,己达峰值,办公室的交换机,路由器都是百M级的,也就是11M左右的速度,就是峰值了。
虽然七台分片器的还是使用率不高。但是mongos的服务器网卡和交换机,路由器,的工作状态,已达峰值。在目前的情况,置换新设备的可能性,大概接近零。
先这样吧,连续写两个小时间,下午使用MapReduce 进行大数据分析,性能估计看不出来了。因为下午,估计也就1亿条数据。
目前测试发现一个现象mongos 网卡不到峰值,8-9M的时候,工作最正常,各个分片,CPU和内存都正常。一旦把mongos的网卡扛到峰值,虽然输入速度每秒提升了2W条。但是各个分片的CPU和内存,明显不按比例快速增长。
好吧,大概写了二到三个小时,写了5千万条。就这样测试吧

头痛,1000条的分片服务器,条件查询要11秒。当然没有索引




在mongos上面,查询,看看性能如何吧,一共5千万条。除了主健,都没有索引

find()加上条件,响应还是很快的。



limit的查询



sort排序

直接就查不出来,换一个小数据的分片查查吧,五百分的数据分片。这么就有6秒

行吧,又有正经事要办了。先笔记一下。以后再测吧。mongodb大规模写入的性能还是可以的。查询的话,还是很慢。主要是搜索的数据体变大了。
Mongodb百亿级数据添加,修改,删除,查询等性能测试【四】的更多相关文章
- Xamarin.Android 入门实例(4)之实现对 SQLLite 进行添加/修改/删除/查询操作
1.Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...
- 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件
第三章 建议学习时间8小时 总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...
- JavaWeb_day03_员工信息添加修改删除
day03员工的添加,修改,删除 修改功能 思路 : 点击修改员工数据之后,跳转到单行文本,查询要修改的员工id的全部信息,主键id设置为readonly,其余的都可以修改, 修改之后,提交按钮,提交 ...
- Web 1三级联动 下拉框 2添加修改删除 弹框
Web 三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...
- SpringBoot定时任务升级篇(动态添加修改删除定时任务)
需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...
- 【转】C#添加修改删除文件文件夹大全
[转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+& ...
- oracle 表字段添加 修改 删除语法
修改列名 alter table 表明 rename column rename 老列名 to 新列名添加 字段alter table 表名 add(字段名 类型):删除字段alter table 表 ...
- EF简单的添加修改删除基本语法
using ( androidhiveEntities db = new androidhiveEntities() ) { #re ...
- thinkphp 添加 修改删除
在 MainController.class.php 添加 public function zhuCe() { //时间两个逻辑 // 1 显示页面 2向数据库添加 if(empty($_POST)) ...
随机推荐
- 跟着鬼哥学so改动,二,进行篇
图/文 听鬼哥说故事 继续上文的内容---------------------------------- 0x1:測试文件的编写 经过上一篇文章的基础学习,如今我们開始进行是用的部分. 既然我们能够 ...
- 第一次面试&第一次霸面
哈哈哈哈,第一次面试和第一次都献给了CVTE! CVTE的招聘流程有点特别:网測-- 一面--笔试--二面--offer 想起网測那天就心酸.那先在做第三部分的专业測试.计时器突然出错........ ...
- 深入理解javascript函数进阶系列第四篇——惰性函数
前面的话 惰性函数表示函数执行的分支只会在函数第一次调用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了.本文将详细介绍惰性 ...
- 基于Metronic的Bootstrap开发框架经验总结(17)-- 使用 summernote插件实现HTML文档的编辑和图片插入操作
在很多场合,我们需要在线编辑HTML内容,然后在页面上或者其他终端上(如小程序.APP应用等)显示,编辑HTML内容的插件有很多,本篇介绍基于Bootstrap的 summernote插件实现HTML ...
- 一 、Spring Boot 学习之项目搭建
一.简介 spring 官方网站本身使用Spring 框架开发,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系. 随着Spring 3.0的发布,Spring ...
- 一.windows环境下rabbitMQ的的安装和配置
rabbitMQ是AMQP 0-9-1(高级消息队列协议)的一个实现,使用Erlang语言编写,利用了Erlang的分布式特性.用它来实现分布式消息队列. 1.因为是用Erlang编写的,所以首先要安 ...
- OPENSHIFT V3 免费部署 Java-Web
OpenShift是红帽的云开发平台即服务(PaaS).自由和开放源码的云计算平台使开发人员能够创建.测试和运行他们的应用程序,并且可以把它们部署到云中.Openshift广泛支持多种编程语言和框架, ...
- 如何在VUE项目中添加ESLint
如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...
- do {...} while (0) 在宏定义中的作用
如果你是一名C程序员,你肯定很熟悉宏,它们非常强大,如果正确使用可以让你的工作事半功倍.然而,如果你在定义宏时很随意没有认真检查,那么它们可能使你发狂,浪费N多时间.在很多的C程序中,你可能会看到许多 ...
- IDA分析脱壳后丢失导入表的PE
1. 问题 一些程序经过脱壳后(如用OD的dump插件),一些导入表信息丢失了,导致拖入IDA后看不到API的信息(如右图所示,第一个红圈处实际是GetCurrentProcessId),给分析造成极 ...