对于只有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学习总结(2)——MongoDB与MySQL区别及其使用场景对比相关推荐

  1. MongoDB学习笔记(一) MongoDB介绍及安装

    系列目录 MongoDB学习笔记(一) MongoDB介绍及安装     MongoDB学习笔记(二) 通过samus驱动实现基本数据操作     MongoDB学习笔记(三) 在MVC模式下通过Jq ...

  2. MongoDB学习笔记之MongoDB数据模型

    一.BSON协议与数据类型 JSON介绍 JSON是当今非常通用的一种跨语言Web数据交互格式,属于ECMAScript标准规范的一个子集.JSON(JavaScript Object Notatio ...

  3. MongoDB学习笔记—02 MongoDB入门

    Mongodb的基本概念 文档:是MongoDB中数据的基本单元,类似于关系型数据库中的行. 集合:多个文档组成一个集合,类似于关系型数据库中的表. 数据库:MongoDB的当个实例可以容纳多个独立的 ...

  4. MongoDB学习笔记(七)——MongoDB shell方法汇总

    在写前面的博文的时候,我发现MongoDB shell提供了很多方法,其中MongoDB的很多方法也在其中,下面是我从MongoDB官网上查到的所有MongoDB shell的所有方法,当然,我不会对 ...

  5. PHP操作MongoDB学习笔记

    PHP操作MongoDB技術總結 <?php /** * PHP操作MongoDB学习笔记 */ //************************* //**   连接MongoDB数据库  ...

  6. Mongodb学习文章辑录

    以前学习必须通过看书,现在互联网上有太多资源,因此,网络时代的学习必须少不了搜索引擎的帮助. 本帖是通过搜索引擎帮助获取相关知识,并把资源网址分类整理,以供自己和大家以后方便阅读和查阅. 如果链接失效 ...

  7. mongodb 持久化 mysql_(转)mongodb与mysql区别

    mongodb与mysql区别 MySQL是关系型数据库. 优势: 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断增加,m ...

  8. MySQL、MongoDB、列数据库的区别及应用场景

    目录 什么是行存储和列存储? 什么是MongoDB(NoSQL)? OLTP和OLAP 什么是CAP定理? 使用场景 行存储的适用场景: 列存储的适用场景: MongoDB相对于MySQL的优点 更适 ...

  9. MongoDB学习指导

    原文地址:http://blog.csdn.net/jakenson/article/details/7060431 MongoDB的内部构造<MongoDB The Definitive Gu ...

最新文章

  1. SSO单点登录三种情况的实现方式详解
  2. 测试面试话题5: 如何不漏测
  3. java编译后生成字节码_请问java源文件编译后怎么生成字节码文件?
  4. HashSet,TreeSet和LinkedHashSet的区别
  5. linux python3运行,将Python3安装到Linux上并运行
  6. 基于人工神经网络的识别C语言,实验一基于人工神经网络的数码识别.doc
  7. Linux邮件系统整合windows 2008 R2 AD域认证更新
  8. php 怎么解析文本,PHP解析自定义纯文本数据库
  9. linux文件属性是什么意思,Linux文件属性
  10. sizeof()与_countof()用法
  11. 11.2. simpara
  12. java.lang.OutOfMemoryError: PermGen space---先测试
  13. 7. 如何创建 CSS
  14. 性能测试---性能指标【1】
  15. SmartBi参数传值与JS报表宏及Mysql数据集特殊功能总结
  16. 基于Instrument技术实现Java类字节码插桩代理
  17. 激光位移传感器与其他位移传感器比较
  18. 海康威视监控插件使用步骤
  19. 做数据分析很重要的思维模式!!!
  20. java 接口耗时分析_性能优化案例(2019-案例78)-接口性能耗时问题分析

热门文章

  1. leaflet 鼠标移动到图层时变_leaflet 图层切换报错
  2. 70. 爬楼梯(JavaScript 完全背包)
  3. 力扣349. 两个数组的交集(JavaScript)
  4. cmd echo写入shell_渗透技巧——通过cmd上传文件的N种方法
  5. tensorflow保存内容到相对文件路径下_如何添加自定义文件系统插件
  6. activeti user guide 中文_【澳洲大岩石】最好季节发团!省掉800澳币!无比震撼特价 再次应约出发 震撼之旅!一生难忘!全程中文导游!省心放心澳洲青年旅行社...
  7. C++新特性探究(13.5):右值引用
  8. 《Essential C++》笔记之return;分析
  9. mysql分层_MySql中的分层数据
  10. 按键精灵打卡怎么写_[按键精灵教程]过新手引导的各种姿势