讨论MySQL与mongodb使用上的区别以及可能适用的应用场景,不深入到数据库的实现细节方面。鉴于个人水平有限,文章可能存在错误之处,希望各位指正。

代码编写

  • mongodb支持reactor,可以异步操作,支持spring5的webflux开发;mysql暂时不支持异步
  • mongodb对集合collection内的文档格式无要求,这是一个好处,可以修改文档的字段而不影响原有的旧数据,但也意味着同一collection内可以存在格式不一样的数据,而且修改文档数据结构并不需要执行数据库的语句,程序在读取文档内的数据时,可能会出现部分不存在默认值的字段为null,在编码时要小心出现NPE的情况,而且改了原有字段类型还会导致旧数据反序列化失败;mysql每一张表的数据结构是固定的,可以通过在修改表的时候为新字段加上默认值避免这个问题
  • mongodb支持地理信息的存储、索引,对于一些需要按地理信息找附近地点的场景很方便
  • mongodb没有联表查询,如果按mysql表的设计根据ID关联表数据的话,需要多次查询来组合数据。或者将一些不需要跟随其他地方变更的数据直接内嵌进来,如订单里的某商品信息在商品库修改后,订单里的商品信息不需要跟随变更;mysql可以联表查询
  • 很多地方都说mongodb无事务机制,最近官方更新了对事务的支持 ,mongodb4.2以上版本已支持事务,官方文档

高可用及水平扩展

  • mongodb官方支持分片以及副本集,mysql的分库分表需要借助其他工具

性能

性能对比

mongodb适用场景

对数据库具体数据格式不明确或者数据库数据格式经常变化的需求模型,有地理查询或全文查询的需求,不需要事务及复杂 join 支持,如事件、日志记录,内容管理或者博客平台

浅谈MySQL与mongodb的区别的更多相关文章

  1. 浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    浅谈Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景   Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁 ...

  2. 浅谈mysql主从复制的高可用解决方案

    1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID" ...

  3. 浅谈mysql innodb缓存策略

    浅谈mysql innodb缓存策略: The InnoDB Buffer Pool Innodb 持有一个存储区域叫做buffer pool是为了在内存中缓存数据和索引,知道innodb buffe ...

  4. 浅谈mysql配置优化和sql语句优化【转】

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...

  5. 浅谈 unix, linux, ios, android 区别和联系

    浅谈 unix, linux, ios, android 区别和联系 网上的答案并不是很好,便从网上整理的相对专业的问答,本人很菜,大佬勿喷 UNIX 和 Linux   UNIX 操作系统(尤尼斯) ...

  6. 浅谈MySQL中优化sql语句查询常用的30种方法 - 转载

    浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使 ...

  7. MySQL与MongoDB的区别

    一.MongoDB简介 什么是MongoDB ?MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.MongoDB 旨 ...

  8. 浅谈cookie 和session 的区别

    具体来说 cookie 是保存在“客户端”的,而session是保存在“服务端”的 cookie 是通过扩展http协议实现的 cookie 主要包括 :名字,值,过期时间,路径和域: 如果cooki ...

  9. mysql和mongodb的区别

    1.mongodb的概括 MongoDB(文档型数据库):提供可扩展的高性能数据存储 2.mongodb的功能概括 (1)基于分布式文件存储 (2)高负载情况下添加更多节点,可以保证服务器性能 (3) ...

随机推荐

  1. bzoj2427 软件安装! 树dp

    软件安装 内存限制:128 MiB 时间限制:1000 ms 标准输入输出     题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一 些软 ...

  2. VScode如何设置模板字符串html标签自动补全

    在学习Vue的过程中,很多时候都需要用到模板字符串,但是里面的html标签一个字符一个字符的去敲未免也太麻烦了吧,其实我们可以通过设置来实现在模板字符串中按Tab键快速补全html标签. 1.在VSC ...

  3. CosId 1.0.3 发布,通用、灵活、高性能的分布式 ID 生成器

    CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式系统 ID 生成器. 目前提供了俩大类 ID 生成器:SnowflakeId (单机 TPS ...

  4. 处理python中的信号

    什么是信号 信号(signal)-- 进程间通讯的一种方式,也可作为一种软件中断的方法.一个进程一旦接收到信号就会打断原来的程序执行来按照信号进行处理. 简化术语,信号是一个事件,用于中断运行功能的执 ...

  5. Linux-Samba服务

    Samba服务 1.Samba的起源 对于windows的网上邻居来讲,共享文件的方式用的是SMB和CIFS协议以及NETBIOS协议Linux/Unix之间用的是NFS协议. 但是Linux和Win ...

  6. 34、mysql数据库(介绍)

    34.1.什么是数据库: 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织. 描述和存储,具有较小的冗余,较高的数据独立性和易扩 ...

  7. QQ邮箱获取授权码方法

    1.登录QQ邮箱,点击"设置" 2.点击"账户" 3.开启POP3/SMTP服务 4.点击"生成授权码" 5.完成验证后,即可生成授权码 P ...

  8. 资源:HTML调色板

    调色板路径 https://encycolorpedia.cn/

  9. HMM实现中文分词

    链接:https://pan.baidu.com/s/1uBjLC61xm4tQ9raDa_M1wQ  提取码:f7l1 推荐:https://blog.csdn.net/longgb123/arti ...

  10. mysql 索引介绍与运用

    索引 (1)什么是索引? 是一种提升查询速度的 特殊的存储结构. 它包含了对数据表里的记录的指针,类似于字典的目录. 当我们添加索引时会单独创建一张表来去存储和管理索引,索引比原数据大,会占用更多的资 ...