非替代品,MongoDB与MySQL对比分析
IT168 评论】对于只有SQL背景的人来说,想要深入研究NoSQL似乎是一个艰巨的任务,MySQL与MongoDB都是开源常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL数据库。它们各有优点,关键看用在什么地方。

什么情况下,MongoDB是最好的选择?
很多人认为MongoDB难以置信的强大,是一个可扩展,界面交互友好的数据库解决方案。当开发人员需要负责管理数据库环境时,MongoDB是一个不错的选择。起码在小型企业和初创公司,是这样。MongoDB将信息存储在BSON(二进制JSON)中。BSON是一种类JSON二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但BSON有JSON没有的一些数据类型,如Date和BinData类型。JSON很容易与其他编程语言关联,许多开发人员都有使用JSON的经验。
当你的程序有大量流量写入时,MongoDB也是一个很好的选择。这并不是说MySQL在处理频繁写入环境方面不是一个好的选择,只是说MongoDB相对更容易一些。Facebook为写负载过重的环境设计了RocksDB存储引擎,性能还不错(通过基准测试证明了这一点)。
当你需要一个无模式或模式灵活的数据结构时,MongoDB是一个不错的选择。MongoDB对数据结构的更改相对轻松和宽容,这是NoSQL解决方案的卖点。在MySQL世界中有许多改进使在线模式更改成为可能,只创建记录而不定义结构增加了MongoDB的灵活性。
选择MongoDB的另一个原因是它具有设置复制环境,内置分片和自动选择方面的功能。在MongoDB中设置复制环境很容易,自动选择过程允许从数据库在主数据库故障的情况下接管。内置分片允许简单的横向扩展。在MySQL环境中管理,设置和配置会很复杂。
什么情况下不能选MongoDB?
对某些用例而言,MongoDB是不错的选择,但它也不是万能的。当数据高度关系化和结构化时,MongoDB就不是最佳选择。MongoDB不支持事务,但在文档级别,具有原子性。对于复制环境,有关写入问题的配置注意事项都是以牺牲性能为代价的。写入方面将验证副本是否已写入信息,默认情况下,MongoDB将写请求设置为仅从主计算机请求确认,而不是副本。因为如果副本有问题,就会导致一致性问题。
二者结构有何不同?
SQL中的许多概念都与MongoDB的文档结构相关。让我们来看一个简单的MongoDB环境结构,以更好地了解MongoDB的布局。

下面的图表涉及MySQL与MongoDB的不同点:

除此之外,另一个有趣的地方是mongod进程。这是一个处理数据请求的守护进程,与MySQL的mysqld进程大致相同,是监听MongoDB请求并管理数据库访问的进程。和MySQL一样,mongod进程有很多启动选项。最重要的配置选项之一是config,它是专门用于mongod实例的配置文件。与MySQL稍有不同,此文件使用YAML格式。下面是MongoDB配置文件示例。请注意,这是演示格式化,它并未针对任何生产数据库进行优化。
根据定义,MongoDB是一个基于分布式文件存储的数据库。可以立即将文档插入到集合中,而无需创建表和添加数据,无需定义结构。这是MongoDB与MySQL相比的优点之一,更加灵活。要注意,MongoDB提供的这种灵活性并不意味着组织一个功能强大的MongoDB数据库毫不费力。选择任何数据库,都应该考虑数据库的结构和目标。
# mongod.conf, Percona Server for MongoDB
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
engine: rocksdb
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
processManagement:
fork: true
pidFilePath: /var/run/mongod.pid
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
注意:YAML格式化不处理选项卡,使用空格缩进。
查询方式有何不同?
通过shell与数据库交互与SQL略有不同,以下是从SQL翻译为MongoDB的查询示例,其中使用了一个只有用户名和相关ID的用户表。
In SQL:
select username from user where id = 2;
In MongoDB:
db.user.find({_id:2},{“username”:1})
在JSON格式中,我们指定要查询的用户集合,然后指定与我们感兴趣的文档相关联的ID。最后,指定从中获取值的字段,此查询结果将是ID为2的用户的用户名。
总结
MongoDB不是MySQL的影子,也不是MySQL的替代品,随着两个数据库的不断发展,它们的优劣慢慢融合在一起。MySQL用户可以在MongoDB上测试各种实例,但不鼓励盲目追求MongoDB的灵活性。尽管MongoDB在电子商务和游戏世界是一个受欢迎的选择,因为它能够利用大量数据进行水平扩展。
非替代品,MongoDB与MySQL对比分析的更多相关文章
- 【代码周边】MongoDB与Mysql对比以及插入稳定性分析(指定主键的影响)
在数据库存放的数据中,有一种特殊的键值叫做主键,它用于惟一地标识表中的某一条记录.也就是说,一个表不能有多个主键,并且主键不能为空值. 无论是MongoDB还是MySQL,都存在着主键的定义. 对于M ...
- 170504、MongoDB和MySQL对比(译)
一.概要 几十年来,关系型数据库已经成为企业应用程序的基础,自从MySQL在1995年发布以来,它已经成为一种受欢迎并且廉价的选择.然而随着近年来数据量和数据的不断激增,非关系数据库技术如MongoD ...
- Mongodb 与 MySQL对比
在数据库存放的数据中,有一种特殊的键值叫做主键,它用于惟一地标识表中的某一条记录.也就是说,一个表不能有多个主键,并且主键不能为空值. 无论是MongoDB还是MySQL,都存在着主键的定义. 对于M ...
- mongodb,redis,memcached,mysql对比
1.性能都比较高,性能对我们来说应该都不是瓶颈总体来讲,TPS方面redis和memcache差不多,要大于mongodb 2.操作的便利性memcache数据结构单一redis丰富一些,数据操作方面 ...
- Mongodb cassandra 和 Mysql对比
MongoDBDB.Cassandra和 Mysql对比 1.为什么是Nosql? 1.1 Nosql在大数据处理相对于关系型数据库具有优势 1.1.1 1. 低延迟 ...
- MySQL 与 MongoDB的操作对比
MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...
- MySQL与MongoDB的操作对比,以及区别
MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...
- [转]MySQL与MongoDB的操作对比
MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...
- MySQL与MongoDB的操作对比
MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...
随机推荐
- 利用Chrome开发者工具功能进行网页整页截图的方法
第一步:打开chrome开发者工具. 打开你想截图的网页,然后按下 F12(macOS 是 option + command + i)调出开发者工具,接着按「Ctrl + Shift + P」(mac ...
- Tp5.1开发初入门
今天需要给金融部门那边做一个信用卡的推广页面,他们系统是用PHP的tp框架做的.我记得最早做tp还是2的时候,和现在的5.1相差太大了,中间开发的时候,还是遇到了点问题.所以,把今天的问题记录下,作个 ...
- python3模块
一.sys模块 import sys #print(sys.path) #打印环境变量 #print(sys.argv) print(sys.argv[3]) Sys.argv[ ]其实就是一个列表, ...
- Winform中怎样跨窗体获取另一窗体的控件对象
场景 Winform中实现跨窗体获取ZedGraph的ZedGraphControl控件对象: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/de ...
- Vue监控器watch的全面解析
前言 前面讲到了计算属性computed,这次讲的是监控器watch,主要任务就是监控变量的变化 正文 watch是一个对象,键是需要观察的表达式,值是对应回调函数.值也可以是方法名,或者包含选项的对 ...
- HBuilder 云打包生成 .apk 文件所需的安卓证书如何获取以及文件打包前必须的设置
在 HBuilder 云打包功能中,生在 .apk 文件虽然平台提供了免费的 安卓证书,但如果有其它需求,比如想发布,那么就需要自己去申请各种类型的证书了,这里介绍几个工具,方便在线生成证书并配置到打 ...
- Nginx03(实现负载均衡)
一.负载均衡的作用 1.转发功能 按照一定的算法[权重.轮询.Ip_Hash],将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量. 2.故障移除 通过心跳检测的方式,判断应用服务 ...
- 关于VS2015 发布.net mvc 网站失败的问题
问题:VS生成成功,发布失败,在“正在连接到***文件夹”处就不能继续了.. 项目开发告一段落,准备部署到服务器上进行最后测试,但是始终发布失败 生成成功,发布失败,没有任何提示信息 一开始以为是文 ...
- Codeforces Round #304 (Div. 2)(CF546E) Soldier and Traveling(最大流)
题意 给定 n 个城市,m 条边.人只能从走相邻边相连(只能走一次)的城市. 现在给你初始城市的每一个人数,再给一组每个城市人数.询问是否可以从当前人数变换到给定人数.如果能,输入"YES& ...
- 用户交互Scanner的用法
Java用户交互的目的是实现程序与人的交互:一般通过Scanner来获取用户的输入:java.util.Scanner 是Java5的新特征. 基本语法: Scanner s=new Scanner( ...