MongoDB的真正性能

MongoDB(芒果数据库)学习(准备)———环境及图形化工具安装 MongoDB(芒果数据库)学习(一)——环境及图形化工具安装 你好! 这是我第一次使用 芒果数据库,通过一星期学习以下是我的经验积累如果错误言辞请联系本人修正,十分感谢。 都是基于win10版本,精力有限,其它的版本…你们懂得哈哈 MongoDB 简介 MongoDB是为快速开发互联网Web应用 而设计的数据库系统,目标是极简、灵活。 MongoDB的数据模型是面向文档的,文档是一种类似于JSO... 阅读详情

MongoDB的真正性能

最近开始研究MySQL和MongoDB,发现这方面资料不多。尤其是真正的说到点子上的文章,太少了。

有一些对比测试的文章基本上都是瞎测,测试方法都测到了马腿上,得出的结论基本上都是NoSQL毫无价值

容我借用Russell Smith 的那句话:不是MongoDB不行,是你不懂。

让我来分析一下MongoDB的真正性能吧。

有说MongoDB慢

  反对:不设其他唯一索引的情况下,只用_id 在普通办公电脑上每秒插入几万,在普通x86服务器上每秒插入十几万,你好意思说这个性能低?比mysql强出一个数量级。

      赞同:检索是真的慢,和sql数据库不同,越复杂的条件搜索MangoDB越吃亏,CPU和IO的双重压力。面对那些直接把SQL查询改写成MangoDB的用法,别转了,你不会收获任何性能提升。

      你不行:说你不行还是真的不行,MongoDB领导了NoSQL运动,NoSQL请注意,我们最主要反对的就是SQL的方法论,按SQL方法使用MangoDB你只能收获失望。再想想MongoDB的设计思想:文档化。_id 就是文件名,MongoDB是个文件系统。全文检索?别闹了,用文件名找文件,一个文件名对应一个文件,你绝对不会失望。

那么MongoDB究竟应该怎么用呢?

首先,忘记SQL

你应该忘记你学过的那些优雅无敌的SQL,不是说为了提升检索性能,扔索引就有好处。

有一个简单的事实如下:只有一个默认的_id 索引,此时插入性能为1,你再加一个索引,插入性能约1/2,再加一个约1/3 ,以此类推......

如果这个事实对你是很震撼的,那说明你还没有忘记SQL,接着忘。

MongoDB的索引对插入性能有着不可忽略的拖后腿效应,所以,我们应该使用且仅使用 _id 作为插入key,作为查询key,作为所有的那个key。

其次,直接忘记搜索这件事。

把MongoDB当做你的硬盘,给他文件名去操作文件.这就是Key-Value数据库的做法,你稍加设计就能这么用。

那么其实你所有的操作可以简化为两个指令,逻辑上 就是一个字典

你给他_id,往字典里插一个数据,或者拿一个数据。

Save({_id:xxx,.....})

FindOne({_id:xxx})

要想高性能,善用那个_id,把你原来准备当主键的那个玩意,hash成_id.

把你原来准备的查询条件,什么?查询,拿_id来,别的全砍掉。

第三、这不是数据表

记住,这不是数据表,一个_id对应的东西不是一行数据,而是一个文件。

文件存储和表存储有什么不同呢?

我举个例子,比如我们要存储用户列表和每个用户的道具列表。

数据表的做法是建一张用户表,一张道具表,道具表里有个字段表示他属于哪个用户。

然后,你就离不开万恶的查询了。

然后如果一个用户有100条道具,100万用户意味着道具表有一亿条记录。

这时候就开始考验你的小数据库了,但这都是过去式了,这一亿的道具,用MongoDB,根本不是个事儿

因为MongoDB的方法是当做文件存,只设计一个用户集合,每个用户的信息是一个文件,然后这100个道具就分开存在每个用户的文件里。

然后来比较一下,我们取得用户的记录,然后从中拿出100个道具,NoSQL方法。

查一亿的表,找出属于某个用户的记录。

熟快熟慢?

然后你可能回想,SQL方法,我也可以搞个道具字段,把用户的100个道具用某种协议打包,然后操作啊,一样可以取得巨大的优化呀。

没错,你的想法很好,你正在用NOSQL的方式用SQL。

第四、文件存储的精华之处

如果问题止于此处,MongoDB就毫无优势可言了,如果这个方法在SQL数据库上也是如此容易使用,那还费劲搞MongoDB干什么?

我们再折腾一点,如果每个道具还要存100条转手记录,你还是可以打包,但你这个打包字段已经1M了。

于是每次存取这个打包字段都是一个系统工程了,还要负担1M的流量。

MongoDB这边呢?我们可以直接对文件的一部分进行读写,比如我只返回一个用户的第二个道具的信息,和返回第二个道具的第1~30条转手记录。

这,是一种怎样的差距啊。

你想要一张美女的照片,你朋友有,但是他只有一个压缩包,他那里没有解包工具,于是他把整个包传给了你。他想问你要一张照片,但是他没有压缩工具,为了存档需要,他让你再压进包里传给他。

这个朋友就是你的用户表的一行,如果换成真实世界的事件是多么的不可思议,这就是在一个字段里打包数据的问题。

MongoDB的一条记录就是一个脑筋更正常的朋友,你要他一张照片,他从包里找出来给你。你给他一张照片,他分门别类的放置到他的包里去。

用文件的思维去访问,MongoDB是一个更好的朋友。

审视一下你项目中的大部分的数据需求,是不是都可以用这种方式去组织呢?

如果是,加入NOSQL吧,我们的口号是:很暴力不SQL

还有什么好处 

1.不用逻辑关心的水平切分

  无需多言,对MongoDB而言,这是运维人员的工作了

2.不用对齐的数据结构

  不用对齐意味着你不用为以前表结构变化的迁移烦恼,有些文件里有一个部分,有些没有,这对MongoDB而言,很正常。

mongodb性能压测 一直想知道mongodb的性能如何,今天对压测结果做了下总结 数据:每条记录约208 Byte,仅压测update操作(存在就修改,不存在则插入)。   配置1:单机的mongodb,单表记录数6百万左右。 1.启用journal约6500 qps, 每隔60秒有一次抖动,因为配置成60秒将内存数据落盘一次,落盘期间磁盘的tps会大增,约700,其他时刻仅50左右的tps。 2.不启用j 阅读详情

相关推荐

MongoDB数据库性能监控详解

MongoDB数据库实战系列,打造精品专栏。

学Java,找哪吒 7974

文档数据库--MongoDB

MongoDB并非芒果mango的意思,而是源于Humongous(巨大的)一词。MongoDB是由总部位于美国纽约的上市公司MongoDB lnc(原名10gen)基于C++编写的分布式文档数据库。之所以称为文档数据库,是因为MongoDB保存的是"JSON Document",并非一般的PDF,WORD文档。MongoDB内部使用类似于Json的bson格式。内部执行引擎为JS解释器。把文档存储成bson结构,在查询时转换为JS对象,并可以通过熟悉的js语法来操作。

flytalei的博客 2219

NHANES数据库的介绍及使用(一)

一、数据库概况 NHANES(National Health and Nutrition Examination Survey)是一项旨在评估美国成人和儿童健康和营养状况的研究计划,计划始于20世纪60年代初期,是一项针对不同人群或健康主题的调查。 1999年该调查成为一项持续计划,涉及各种健康和营养测量,项目每年调查一个全国代表性的样本,约5000人,这些人群位于全国各县,每年对其中15个县进行访问。 NHANES访谈部分包括人口统计学、社会经济学、饮食和健康相关问题。体检部分包括生理测量、实验室检查等

Christina 5万+

芒果db的基本操作

package com.liujinghe.demo.mongodb; import java.net.UnknownHostException; import java.util.Date; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.MongoClient; import

彼岸迷离博客 4785

Latex下使用JabRef添加参考文献

文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 Latex可以手动添加参考文献,但文献过多时,使用JabRef软件相对方便。 提示:以下是本篇文章正文内容,下面案例可供参考 一、JabRef安装 网址:http://www.jabref.org 打开网址后,点击“Download” 进入如下页面后,选择 portable (便携版,无需安装),下载后是一压缩包,打开即可使用。 二、使用 1.创建库 ...

sz3076799的博客 3467

ROS2初级面试题汇总

总结和收集了一些关于ros2的问题和解答记录

qq_57633442的博客 5555

MongoDB(芒果数据库)学习(一)———增删改查

MongoDB数据库CRUD(增删改查)的操作 (1)NoSQL 简介 NoSQL有时也称作Not Only SQL的缩写,意即"不仅仅是SQL"。 现代的计算网络,每天上都会产生大量数据。 这些数据大部分都是由关系性数据库系统(RDBMS)来管理的。 NoSQL用于超大规模数据的存储。 现在针对大数据处理以及高并发、高读写推荐使用,NoSQL被广泛应用。(例如国外的谷歌、Facebook。国内阿...

小梁的旅程 4412

当预编译包失效时:手把手教你在Nvidia Orin (JetPack 5.1.1) 上源码编译onnxruntime-gpu

本文详细指导在Nvidia Orin (JetPack 5.1.1) 上源码编译onnxruntime-gpu的全流程,解决预编译包兼容性问题。涵盖环境准备、工具链配置、源码编译、常见问题解决及性能优化技巧,帮助开发者在边缘计算设备上实现高效AI模型推理。

weixin_29062823的博客 134

mongodb性能 mysql,MySQL与MongoDB聚合性能

我目前正在为我的应用程序测试一些数据库.主要功能是数据聚合(类似于此处的人员:Data aggregation mongodb vs mysql).我正面临着同样的问题.我创建了样本测试数据. mysql端没有连接,它是一个innodb表.它是一个1600万行的数据集,我正在对整个表进行求和和计数,没有任何过滤器,因此我可以比较每个聚合引擎的​​性能.在这两种情况下,所有数据都适合存储在内存中.在...

weixin_39530288的博客 283

2021.02.23丨Virsorter2安装使用及答疑

最近项目比较多,又在学英语,写文章的时间少了很多。最近接到一个病毒组装的项目。用之前组装工具(ABYSS、SPAdes)都没有能够组装较为完整的scafford,今天介绍一款专门用于组装病毒的工具——Virsorter。 Virsorter最早版本发布于2015年,目前已经有了第二个版本。主要用于病毒的组装的注释。详细情况可以查看文章:https://peerj.com/articles/985/ 安装流程 安装文档: https://github.com/jiarong/VirSorter2/b

4835

零基础入门红外与可见光图像融合:DAF-Net 实战全指南

本文介绍了基于DAF-Net的红外与可见光图像融合技术,主要内容包括:技术原理、环境配置、数据准备和模型实现。DAF-Net通过双分支特征提取和动态注意力融合机制,有效结合红外图像的热辐射信息与可见光图像的纹理细节。文章详细讲解了开发环境搭建步骤(Python 3.8+PyTorch),TNO数据集的预处理方法,并提供了完整的DAF-Net实现代码,包含特征提取、注意力融合和图像重建三个关键模块。该技术可广泛应用于安防监控、自动驾驶等领域,帮助开发者快速入门多模态图像融合。

FJN110的博客 123

mongodb性能总结

服务器性能 RAM:4GB / 1067MHz / DDR 3 CPU:2.53GHz Intel Core 2 Duo 插入:10万25秒 放入相同的记录之后,TT的文件为400多M,但MongoDB则为整整2G。因此推测这是MongoDB进行空间预分配的结 通过主键获取记录 :每10万次33秒 通过主键更新:每10万次25秒 经过5次测试的结果,我们可以得

记忆是夏天 7280

基于STM32L4XX、HAL库的DP83822 以太网收发器(PHY)驱动程序设计

一、简介:DP83822是德州仪器(TI)推出的一款低功耗、高性能10/100Mbps以太网物理层收发器(PHY)。它具有以下主要特性:支持10BASE-T和100BASE-TX以太网标准低功耗设计,适合嵌入式应用MII/RMII接口,方便与微控制器连接内置自检和诊断功能支持自动协商和手动配置工业级温度范围(-40°C至+85°C)

zhusl6688的博客 526

mongodb 性能测试_MongoDB性能测试

mongodb 性能测试 因此,今天早上,我在mongo shell中四处乱逛。 我想出了三种不同的方式来聚合所需的数据,但是不确定随后应移植哪种代码以在应用程序中使用。 那么,我将如何决定实施哪种方法呢? 好吧,让我们选择性能最佳的产品。 好的,我该怎么做? 嗯 我可以在那里下载并安装一些工具,也可以将shell代码包装在一个函数中并添加一些时间。 或者,我可以使用与其他所有性能测试相同的...

最佳 Java 编程 989

C++和OpenGL实现3D游戏编程【连载7】——文字和汉字的显示(附源码)

上一节我们讨论了纹理在二维平面内不规则图形贴图的相关基础操作,本节我们开始了解游戏里文字以及汉字的显示方法。本节课我们将从基本的ASCII字符显示,拓展到中文字符的显示,最后再讲到纹理字符的显示,并对各种文字显示方法的优缺点和使用场景进行分析,这节课将使用到显示列表、兼容视图、屏幕图形转纹理等操作。

zhooyu的博客 1498

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

mongodb插入性能

转自https://blog.youkuaiyun.com/asdfsadfasdfsa/article/details/60872180 MongoDB与MySQL的插入、查询性能测试 7.1平均每条数据的插入时间 先上张图,来点直观感受: 图上数据横坐标是平均每插入1000条数据所需要的时间,单位是秒。记住,是每100...

akuibpt23191的博客 724

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Mongodb性能压测

一、背景 这几天对所有的基础组件做一个摸底的基准压力测试,目前我们所有的开源基础组件都没有做过性能测试,经常有开发人员问,我们的RDS、MongoDB集群能抗多大量呀,这个时候我是没办法回复的,因为我自己也不知道,虽然一个数据库集群能抗多大量,在软件、硬件配置固定的情况下,和业务场景有很大的关系,如果数据量小,查询SQL简单那吞吐量自然很高,如果数据量特别大并且都是复杂SQL,那吞吐量自然上不去;...

benerhuo5285的博客 1710

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MongoDB一次性能问题处理

MongoDB一次性能问题处理 问题:发现线上环境web界面获取MongoDB中的数据变得很慢(界面主要是查询),接着查看Rabbitmq消息队列中对应功能队列中堆积了不小的消息(worker主要是插入数据)。 从上面的问题现象来看基本是MongoDB出现了性能的问题,大致的排查了一下MongoDB。1. 首先查看一下系统资源: root@mongo-2-6-0-5:~# free -m

liuxingen的专栏 5785

如何优化MongoDB查询性能

优化MongoDB查询性能是一个系统性工程,涉及索引优化、查询计划分析、数据建模、硬件配置等多个方面。通过合理创建索引、分析查询计划、优化数据模型以及监控系统性能,数据库管理员可以有效提高MongoDB的查询性能,确保系统在高负载情况下仍能保持响应速度。结合最佳实践和持续优化,企业将能更好地应对数据增长带来的挑战,为用户提供高效的服务。

My_wife_QBL的博客 2720

mongodb之性能篇

【索引】 A:创建索引 1.创建普通索引 建立索引的函数【ensureIndex()】 db.persons.ensureIndex({name:1}) #1升序 -1降序 2.当系统中有大量数据时创建索引非常耗时 需要在后台进行只需要指定background:true db.user.ensureIndex({age:1},{background:true}) 3.创建唯一索引 只需要在ensu...

逍遥游的博客 685

Mongodb性能调优

摘要 1. Mongodb 适用场景简介 2. Mongodb 性能监控与分析 3. Mongodb 性能优化建议关于Mongodb的几个大事件 1.根据美国数据库知识大全官网发布的DB热度排行,Mongodb的热度排名从2014年的第5名,在2015年跃升为第4名,仅次于主流DB(Oracle、MySQL、SQLServer)之后。2.2015第六届中国数据库技术大会(DTCC)上,

41万+

mongoDb性能提升

最近在弄MongoDB的时候 发现只按照官网的方式进行操作的话,性能不行,想着用单例模式封装一下,提升一下性能,代码如下: //引入mongodb相关的模块 const MongoClient = require("mongodb").MongoClient; //mongodb数据库的相关配置信息 const config = { //数据库链接地址 dbUrl:...

weixin_34223655的博客 205

mongodb性能 mysql_mongodb于mysql性能对比

查询条件随机imsi-product_id组合,几乎全部是找不到的mongo1300w数据server.php-本地mongo-192.168.1.225ab-n30000-c200"http://localhost/imsi_session/server.php?imsi=random&&product_id=random"ConnectionTim...

weixin_30701169的博客 576

mongoDB的$in性能

今天发现mongoDB的$in性能不怎么样,24条ID和1条ID相比5倍的差异:    

SAN_YUN的专栏 2026

mongodb的javascript性能

mongodb的javascript性能 mongodb的db.eval mongodb使用javascript做shell, mongodb的db.eval可以提供给数据驱动与这种javascript shell类似的js接口. 这算是一种移动代码风格(Mo

dragon8299的专栏 1408
上一篇: 一种可以避免数据迁移的分库分表scale-out扩容方式
下一篇: MongoDB和MySQL性能测试及其结果分析
linuxheik
博客等级 码龄15年 865粉丝 135原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值