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

目录

    • 什么是行存储和列存储?
    • 什么是MongoDB(NoSQL)?
    • OLTP和OLAP
    • 什么是CAP定理?
    • 使用场景
      • 行存储的适用场景:
      • 列存储的适用场景:
    • MongoDB相对于MySQL的优点
    • 更适用MySQL的场景
    • 更适用MongoDB的场景
    • 个人理解
    • 扩展
    • 参考

什么是行存储和列存储?

  • 行存储:传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based,基于行),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的,一行中的数据在存储介质中以连续存储形式存在。
  • 列存储(Column-based,基于列)是相对于行存储来说的,新兴的 Hbase、HP Vertica、EMC Greenplum 等分布式数据库均采用列式存储。在基于列式存储的数据库中,数据是按照列为基础逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在。

什么是MongoDB(NoSQL)?

MongoDB是面向文档的NoSQL数据库,用于大量数据存储。
MongoDB是一个基于文档的存储,在其之上还具有一个基于图形的存储。MongoDB实际上并不存储JSON:它存储BSON(二进制JSON),BSON扩展了JSON表示(字符串)以包括其他类型,例如int,long,date,浮点,decimal128和地理空间坐标。

OLTP和OLAP

在数据库中,数据处理可分为两类:联机事务处理OLTP(on-line transaction processing) 和 联机分析处理OLAP(On-Line Analytical Processing)

  • OLTP是传统关系型数据库的主要应用,用来执行一些基本的、日常的事务处理,比如数据库增、删、改、查等等
  • OLAP则是分布式数据库的主要应用,它对实时性要求不高,但处理的数据量大,通常应用于复杂的动态报表系统上。
    在这里插入图片描述
    在这里插入图片描述

什么是CAP定理?

CAP定理也称为Brewer定理。它指出,分布式数据存储不可能同时满足CAP,只能满足CAP其中的两部分。

  • 一致性

    即在执行操作之后,数据也应保持一致。这意味着一旦写入数据,以后的任何读取请求都应包含该数据。例如,更新订单状态后,所有客户端都应该能够看到相同的数据。

  • 可用性

    该数据库应始终可用且响应迅速。它不应有任何宕机时间。

  • 分区容错性

    分区容限意味着即使服务器之间的通信不稳定,系统也应继续运行。例如,可以将服务器划分为可能无法相互通信的多个组。在此,如果数据库的一部分不可用,则其他部分始终不受影响。

使用场景

行存储的适用场景:

  • 适合随机的增、删、改、查操作;
  • 需要在行中选取所有属性的查询操作;
  • 需要频繁插入或更新的操作,其操作与索引和行的大小更为相关。

列存储的适用场景:

  • 查询过程中,可针对各列的运算并发执行,在内存中聚合完整记录集,降低查询响应时间;
  • 在数据中高效查找数据,无需维护索引(任何列都能作为索引),查询过程中能够尽量减少无关IO,避免全表扫描;
  • 因为各列独立存储,且数据类型已知,可以针对该列的数据类型、数据量大小等因素动态选择压缩算法,以提高物理存储利用率;如果某一行的某一列没有数据,在列存储时,就可以不存储该列的值,这将比行式存储更节省空间。

实际应用中我们会发现,行式数据库在读取数据时存在一个固有的缺陷,比如,所选择查询的目标即是只涉及少数几个字段,但由于这些目标数据埋藏在各行数据单元中,而行单元往往又特别大,应用程序必须读取每一条完整的行记录,从而使得读取效率大大较低,对此,行式数据库给出的优化方案是加索引,在OLTP类型的应用中,通过索引机制或给表分区等手段可以简化查询操作步骤,并提升查询效率。

针对海量数据背景的OLAP应用(例如分布式数据库、数据仓库等),行存储的数据库就有些力不从心了,行式数据库建立索引和物化视图需要花费大量时间和资源,因此还是不划算的,无法从根本上解决查询性能和维护成本的问题,也不适用于数据仓库等应用场景,所以后来出现了基于列式存储的数据库。

对于数据仓库和分布式数据库来说,大部分情况下它会从各个数据源汇总数据,然后进行分析和反馈,其大多数操作是围绕同一个字段(属性)进行的,而当查询某属性的数据记录时,列式数据库只需返回与列属性相关的值。在大数据量查询场景中,列式数据库可在内存中高效组装各列的值,最终形成关系记录集,因此可以显著减少IO消耗并降低查询响应时间,非常适合数据仓库和分布式的应用。

MongoDB相对于MySQL的优点

  • MongoDB文档自然映射到现代的面向对象编程语言。使用MongoDB可以避免将代码中的对象转换为关系表的复杂对象关系映射(ORM)层
  • MongoDB的灵活数据模型也意味着您的数据库模式可以随业务需求而发展。例如,在天气频道的MySQL数据库中花费数周时间的模式更改可能会在短短几个小时内由MongoDB完成。
  • MongoDB还可以在多个分布式数据中心之间进行扩展,提供以前MySQL等关系数据库无法实现的新的可用性和可扩展性。随着在数据量和吞吐量方面的增长,MongoDB可轻松扩展,无需停机,无需更改应用程序。

更适用MySQL的场景

需要复杂的多行事务的应用程序

一个具体的例子是旅行预订系统背后的预订引擎,通常还涉及复杂的事务。虽然核心预订引擎可能在MySQL上运行,但是与用户互动的应用程序部分 – 提供内容,与社交网络集成,管理会话 – 将更好地放在MongoDB中

许多电子商务应用程序使用MongoDB和MySQL的组合。产品目录包括具有不同属性的多个产品,非常适合MongoDB的灵活数据模型。另一方面,需要复杂事务的结帐系统可能建立在MySQL或其他关系数据库技术上。

更适用MongoDB的场景

  1. 更高的写入负载

    默认情况下,MongoDB更侧重高数据写入性能,而非事务安全,MongoDB很适合业务系统中有大量“低价值”数据的场景。但是应当避免在高事务安全性的系统中使用MongoDB,除非能从架构设计上保证事务安全

  2. 高可用性

    MongoDB的复副集(Master-Slave)配置非常简洁方便,此外,MongoDB可以快速响应的处理单节点故障,自动、安全的完成故障转移。这些特性使得MongoDB能在一个相对不稳定(如云主机)的环境中,保持高可用性。

  3. 数据量很大或者未来会变得很大

    依赖数据库(MySQL)自身的特性,完成数据的扩展是较困难的事,在MySQL中,当一个单达表到5-10GB时会出现明显的性能降级,此时需要通过数据的水平和垂直拆分、库的拆分完成扩展,使用MySQL通常需要借助驱动层或代理层完成这类需求。而MongoDB内建了多种数据分片的特性,可以很好的适应大数据量的需求。

  4. 基于位置的数据查询

    MongoDB支持二维空间索引,因此可以快速及精确的从指定位置获取数据。

  5. 表结构不明确,且数据在不断变大

    在一些传统RDBMS中,增加一个字段会锁住整个数据库/表,或者在执行一个重负载的请求时会明显造成其它请求的性能降级。通常发生在数据表大于1G的时候(当大于1TB时更甚)。 因MongoDB是文档型数据库,为非结构货的文档增加一个新字段是很快速的操作,并且不会影响到已有数据另外一个好处当业务数据发生变化时,是将不在需要由DBA修改表结构。

  6. 没有DBA(数据库管理员)支持

    如果没有专职的DBA,并且准备不使用标准的关系型思想(结构化、连接等)来处理数据,那么MongoDB将会是你的首选。MongoDB对于对像数据的存储非常方便,类可以直接序列化成JSON存储到MongoDB中。 但是需要先了解一些最佳实践,避免当数据变大后,由于文档设计问题而造成的性能缺陷。

个人理解

  1. MySQL提供更强的事务保证,即更好的一致性,对一致性要求较高的场景(如:支付,订单等),MySQL更能胜任。但依赖数据库(MySQL)自身的特性,完成数据的扩展是较困难的事(难以实现水平扩展),同时规范化的数据模型导致更多表关联(降低性能),从而需要更多键和索引(占用内存)。随着数据库的增长,性能可能开始成为问题。
  2. MongoDB数据具有灵活的架构,集合不会强制执行文档结构,同时很容易依赖其自带的特性(内建了多种数据分片的特性)实现水平扩展,适合业务系统中有大量“低价值”数据的场景。但是应当避免在高事务安全性的系统中使用MongoDB。

扩展

  • 垂直扩展:提升单机处理能力。
  • 水平扩展:只要增加服务器数量,就能线性扩充系统性能。

参考

  • 基于行存储和列存储的数据库
  • MongoDB和MySQL对比(译)
  • NoSQL教程:了解NoSQL的功能,类型,含义,优势
  • 对比mysql,什么场景更适用Mongodb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转-Redis AOF 持久化详解

转自: https://juejin.cn/post/6844903902991630349 Redis AOF 持久化详解 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。但是一旦进程退出,Redis 的数据就会丢失。 为了…

设计模式之动态代理模式实战

转载自 设计模式之动态代理模式实战 昨天分享了静态代理的概念及存在的缺点,所以今天讲的动态代理模式十分重要。动态代理在我们工作当中应用相当广泛,如Srping AOP就是动态代理的在开源框架的比较出名的应用。 动态代理有两种试,一是通过JD…

南理工计算机博士 年薪_计算机专业的女博士毕业后,进入211大学当讲师,年薪曝光...

现如今,对于很多年轻人来说,高学历就意味着高收入,大家在进入职场以后,通过高学历找到高薪的工作,能够在职场中少走很多弯路,他们在大公司能够跟很多的同事在一起勤快的合作,能够决定他们在以后…

MySQL优化(一):表结构优化

目录表优化数据类型的选择避免列的值为NULLVARCHAR和CHAR日期和时间类型选择标识符(主键)的类型错误的表结构一张表中有太多列太多的关联适当建立冗余数据混用范式和反范式建立缓存表和汇总表参考表优化 此文章用于记录《高性能MySQL》一书的知识点。 …

centos上安装redis

【README】 本文旨在阐述在linux上安装 redis 的步骤; 【1】具体步骤 step1) 把 redis 压缩包 上传到 /opt/software, 并解压 step2)打开 redis目录,执行 make, 若没有gcc编译器, 执行命令安装gcc&#…

设计模式之静态代理模式实战

转载自 设计模式之静态代理模式实战静态代理模式很简单,代理类和实现类都实现相同的接口,然后通过代理类来调用实现类的方法。如我们想保存用户信息之前打印用户信息,或者保存用户信息之后把这些信息缓存下来,即在运行方法前后插入…

pandas追加写入excel_[Excel]如果你爱Excel,请学好pandas

现在坐办公室的各种大小团体里,都会有一个“懂Excel的人”,可能那个人是团体里的一员,也可能是和这个团队关系比较好的一个热心人,但总之,你的身边会有这么一个人。如果你环顾四周也没发现,那可能你就是那个…

转:Redis 集群搭建详细指南

转自: https://www.cnblogs.com/mafly/p/redis_cluster.html 【README】 非常棒的一篇文章,感谢作者的分享; 先有鸡还是先有蛋? 最近有朋友问了一个问题,说毕业后去大城市还是小城市?去大公司还是小公…

快速排序算法思想及实现

简介 快速排序是对冒泡排序的一种改进,是一种分治算法,时间复杂度为O(nlogn) 基本思想 先从数列中取出一个数作为基准数。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步&a…

作为架构师,你必需要搞清楚的概念:POJO、PO、DTO、DAO、BO、VO

转载自 作为架构师,你必需要搞清楚的概念:POJO、PO、DTO、DAO、BO、VOPOJO、PO、DTO、DAO、BO、VO这些概念作为Java开发来说应该全部或者部分遇到过,作为架构师的你想必更是清楚这些概念在不同场景的应用。下面我逐一介绍一下,想必…

搭建redis集群

【README】 redis集群搭建有很多坑儿,注意; 【1】坑er 集合 坑儿1、 [ERR] Sorry, cant connect to node 192.168.163.203:6381 报错现场:执行如下命令新建集群,报错如下; /usr/local/redis-cluster/bin/redis-t…

怎么看cudnn的版本好_针对此次版本削弱,怎么用好嫦娥!

大招的费蓝 & 蓝量伤害比 (先把嫦娥的冷门知识点放置顶,干货感比较重要)嫦娥100%蓝时,所有造成的伤害均要2倍,蓝量每下降1%,伤害倍数就下降2%。即嫦娥在50%蓝的时候,伤害就不加倍了。嫦娥最…

设计模式(一):工厂方法

目录概括目的主要解决何时使用使用场景总结三种工厂模式的对比代码示例概括 定义一个用于创建对象的接口,让子类决定实例化哪一个类。使用特殊的工厂方法代替对于对象构造函数的直接调用(即使用 new运算符,工厂方法 使一个类的实例化延迟到其…

mysql查询优化explain命令详解

转载自 mysql查询优化explain命令详解mysql查询优化的方法有很多种,explain是工作当中用的比较多的一种检查方式。explain翻译即解释,就是看mysql语句的查询解释计划,从解释计划我们能很清楚的看到解释的语句有没有合理用到索引,扫…

sftp工具都有哪些_学霸们都在用哪些科研工具?

这是 社科学术圈 推送的第1677篇文章学者论文哪里找?论文怎么写?会用到哪些工具?本期将带来有助于提高论文写作效率的一些资料,包括OA论文、思路整理、词典类、制图工具类、文献生成类等方面。OA论文平台1. PMC(Pubmed Cenral)Pub…

redis集群搭建报错-(error) CLUSTERDOWN The cluster is down

【README】 最近搭建一个redis集群,参考博文 (https://www.cnblogs.com/mafly/p/redis_cluster.html) 对集群配置后,master, slave 也启动起来,但无法插入数据; 【1】报错信息; [r…

常用加密算法解析

转载自 常用加密算法解析 今天介绍下工作当中常用的加密算法、分类、应用。 1、对称加密算法 所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。 分类…

双指针:88. 合并两个有序数组

题目链接 88. 合并两个有序数组 解题思路 一. 合并数组后排序&#xff0c;时间复杂度为O((nm)log(nm)) 代码&#xff1a; 快排详解 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {for(int im,j0;i<mn;i,j){nums1[i] nums2[j];}quickSor…

bmp180气压传感器工作原理_陕西压力传感器的工作原理信息推荐

压力传感器的工作原理应用广泛的是压阻式压力传感器&#xff0c;它具有极低的价格和较高的精度以及较好的线性特性。下面我们主要介绍这类陕西压力传感器。在了解陕西压力传感器时&#xff0c;我们首先认识一下电阻应变片这种元件。电阻应变片是一种将被测件上的应变变化转换成…

转-rsa加密算法

转自 阮一峰&#xff1b; http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html 一、一点历史 1976年以前&#xff0c;所有的加密方法都是同一种模式&#xff1a; &#xff08;1&#…