首页 > 数据库 >Mongo与MySql区别

Mongo与MySql区别

时间:2023-06-25 09:14:48浏览次数:46  
标签:Mongo 区别 MongoDB MySql 查询 分片 MySQL 节点 分布式

1. MongoDB

mongoDB是一种分布式文档型数据库,具有分布式架构设计。mongoDB分布式架构包含:分片、副本和分布式查询路由

1.1 分片

MongoDB分片技术将数据分割成多个分片(shard),每个分片存储部分数据。分片可以按照数据的范围、has值、分片键等方式进行分配。在分片集群中有一个特定的mongo节点充当分片协调器(mongos)负责接收客户端的请求,将请求路由到对应的分片节点上,并将结果返回给客户端

1.2 副本

为了提高数据的可靠性和可用性,mongo采用副本集(replicate set)。副本集包括一个主节点和多个从节点,主节点负责写,从节点负责读请求和备份数据

1.3 分布式查询路由 

mongodb分布式查询路由将查询请求路由到合适的分片节点上,当客户端想分片协调器(mongos)发送查询请求时,mongos会将请求转发给对应的分片节点上,如果请求涉及多个分片,mongos会将结果聚合返回给客户端。为了提高查询性能,mongodb支持在每个分片上执行部分查询,然后将结果返回给mongos,在mongos上进行聚合

总之,mongodb分布式架构设计提高数据处理能力、可靠性和可用性,但同时也增加了系统的复杂度和管理难度

2. mysql

mysql是一种传统的关系型数据库,最初的mysql设计是单机,但随着发展,出现了分布式mysql框架

分布式mysql框架采用复制和分片技术。主数据库负责处理写请求,从数据库负责读请求。分片技术是指将数据按照一定的规则划分为多个片(或者分区),每个片存储在不同的数据库节点上,通过路由技术来决定哪个节点处理特定的请求。

分布式MySQL架构的优点是可以提高数据处理能力、降低单点故障风险、增强系统的可扩展性和可靠性。不过,分布式MySQL架构也有一些缺点,例如:

  1. 系统的复杂度增加,需要额外的维护和管理工作。

  1. 数据的一致性和可靠性可能会受到影响,需要采用合适的复制和同步机制来保证数据的一致性。

  1. 分片机制可能会导致一些跨片的操作成为瓶颈,需要采用合适的路由算法和负载均衡策略。

  1. 分布式MySQL架构需要更高的硬件成本和网络带宽。

3. mysql vs mongo

Mysql

Mongodb

数据存储方式

MySQL采用的是传统的关系型数据库,数据以表格的形式存储,每个表都有固定的列和行。这种结构使得MySQL在处理结构化数据时表现出色,但是在处理非结构化数据时表现不佳。

MongoDB则是面向文档的数据库,它使用文档的方式存储数据,文档中可以包含任何类型的数据,而且不需要事先定义其结构。这种方式使得MongoDB在存储和查询非结构化数据时更加高效。

索引机制

索引是提高数据库查询效率的重要手段,MySQL和MongoDB的索引机制也不同。MySQL采用B+树索引,这种索引适用于结构化数据,但对非结构化数据的查询效率较低。

MongoDB采用的是BSON索引,BSON是一种类JSON的二进制编码格式,它支持对文档中的任何字段进行索引,查询速度非常快。此外,MongoDB还支持地理空间索引和全文索引等高级索引方式,使得非结构化数据的查询更加高效。

分布式架构

MySql最初设计是单机,MySQL在分布式环境下需要进行数据分片,这会带来许多管理和维护的问题。

MongoDB天生就是分布式的,它采用的是副本集和分片机制,可以轻松地实现数据的水平扩展和负载均衡。MongoDB还具有自动故障转移和自动恢复等功能,当节点发生故障时会自动将其替换为备用节点,保证系统的高可用性和数据的安全性。

 

MongoDB比MySQL更适合存储和查询非结构化数据,具有更高的查询效率和更好的分布式扩展性

 

标签:Mongo,区别,MongoDB,MySql,查询,分片,MySQL,节点,分布式
From: https://www.cnblogs.com/enhance/p/17502083.html

相关文章

  • 10分钟讲清int 和 Integer 的区别
    其实在Java编程中,int和Integer都是非常常用的数据类型,但它们之间存在一些关键的区别,特别是在面向对象编程中。所以接下来,就让我们一起来探讨下关于int和Integer的区别这个问题吧。1. int和Integer的定义int是Java中的一种基本数据类型,用于表示整数。它是Java语言中最常用的数......
  • 记一次字符串末尾空白丢失的排查 → MySQL 是会玩的!
    开心一刻今天答应准时回家和老婆一起吃晚饭,但临时有事加了会班,回家晚了点回到家,本以为老婆会很生气,但老婆却立即从厨房端出了热着的饭菜老婆:还没吃饭吧,去洗下,来吃饭吧我洗好,坐下吃饭,内心感动十分;老婆坐旁边深情的看着我老婆:你知道谁最爱你吗我毫不......
  • MySQL 进阶语法
    selectinto语法在MySQL中,SELECTINTO语法用于将查询结果插入到一个新表或已存在的表中。下面是SELECTINTO的语法示例:创建一个新表并将查询结果插入其中:CREATETABLEnew_table_nameSELECTcolumn1,column2,...FROMoriginal_tableWHEREcondition;这将从ori......
  • MySQL---事务
    概述数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。事务是一个不可分割的工作逻辑单元。语法开启事务提交事务回滚事务回滚事务......
  • MySQL---约束
    概念约束是作用于表中列上的规则,用于限制加入表的数据例如:我们可以给id列加约束,让其值不能重复,不能为null值。约束的存在保证了数据库中数据的正确性、有效性和完整性添加约束可以在添加数据的时候就限制不正确的数据,年龄是3000,数学成绩是-5分这样无效的数据,继而保障数据的......
  • C#-SQLHelper(二)_MySQL
    SqlHelper工具类/***┌──────────────────────────────────────────────────────────────┐*│描述:Mysql的操作工具类*│作者:执笔小白......
  • mysql8 执行聚合函数报错:Error 1140: In aggregated query without GROUP BY,sql_mode
    解决办法:setglobalsql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';SETGLOBALlog_bin_trust_function_creators=1;setsessionsql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZER......
  • DTO 与 Entity的区别
    entity:实体类,与数据库中的字段保持一致,用于表示某实体中所包含的所有属性。DTO:数据传输对象,用于数据传输,根据业务需求来决定包含哪些属性。根据实际业务需求将数据返回给前端,避免造成不必要的资源浪费和数据暴露,造成不必要的安全问题。......
  • random.sample()和random.choices()、random.choice()区别
    random.sample()和random.choices()、random.choice()区别 返回列表(1-k个值)random.sample(data,3)random.sample(data,k=3)data可以是字符串元组list从一个数据源中随机获取k个数据不重复取(取过的index不会在被取) 返回列表(1-k个值)random.choices(data,weights=[10,1,......
  • mysqldump 介绍
    使用mysqldump命令来备份MySQL数据库。mysqldump命令是MySQL自带的备份工具,可以将MySQL数据库备份成SQL文件。mysqldump是MySQL用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATETABLE、INSERT等。mysqldump的运行机制......