当前位置: 首页 > article >正文

五种数据库特性对比(Redis/Mysql/SQLite/ES/MongoDB)

做后端开发的程序员基本都要学会数据库的相关知识。

1、关系型数据

今天就着这段时间了解大模型的事需要牵扯到是我们接触最多的、也是入门后端必学的关系型数据库。在关系型数据库中,数据以表的形式进行组织和存储,每个表就像一个 Excel 表格,包含多个行和多个列。

就比如我们经典的学生管理系统,把学生信息存储到关系型数据库中,结构大概是这样的:
在这里插入图片描述
上述学生表格中,每一行代表一个学生的信息,每一列代表学生的一个属性。我们可以使用结构化查询语言 SQL 来对关系型数据库表的数据进行灵活地查询、选择、过滤等。

而关系型数据库最大的特点,就是表和表之间可以存在关系 。比如学生管理系统中还可以有班级表,结构如下:
在这里插入图片描述
除了查询灵活、数据表间存在关系外,关系型数据库还具有很多其他的优点。

比较重要的是数据一致性 ,关系型数据库遵循 ACID 原则(原子性、一致性、隔离性和持久性),可以保证多个操作同时进行时,数据的状态保持一致。比如 A给B转账,A 扣钱的同时B也会加钱,不会出现 A 扣了钱 B 却没收到钱的情况。

兼顾查询的灵活和写入的准确性,使得关系型数据库几乎可以被应用于任何项目中!比如 CRM(客户关系管理)和 HRM(人力资源管理)等各类管理系统、数据分析系统、金融银行系统等。

比较经典的关系型数据库产品有 MySQL、Oracle、PostgreSQL、Microsoft SQL Server 等。其中,MySQL 由于开源又易学,已经成为后端开发同学必学的数据库技术。

关系型数据库的底层核心实现是基于关系模型的数学理论 ,最常见的实现方式是使用 B+ 树来存储索引结构,基于其平衡性,能够在存储大量数据时保持高效的查询性能,并且兼顾增删改操作的性能。

2、非关系型数据库

非关系型数据库又叫 NoSQL。最简单的理解方式:关系型数据库适用于存储相互之间 存在关系的数据表 ,那么非关系型数据库适用于关系不强的、结构相对灵活的、需要被快速访问的数据,比如字符串、JSON 等。

实际项目开发中,最常用的非关系型数据库当属 KV 数据库。

KV 即 Key-Value,数据是以 键值对 的方式存储在数据库中的。可以理解为一个 HashMap,数据库中存储的每个键都 唯一对应 一个值。键和值都可以是任意类型的数据,例如字符串、数字、数组等,非常灵活。

比如存储每位用户的个人信息,结构大概是这样的:
在这里插入图片描述
由于 KV 存储的结构简单清晰,我们能够很轻松地根据某个键查找出对应的值,无论是读写数据性能都非常高。

此外,KV 数据库还具备良好的可扩展性,由于数据间不存在直接关联,我们可以把键值对放到多个机器上存储,通过数据分片、负载均衡等策略来支持海量数据的高并发访问。由于高性能和高可扩展性,KV 数据库被广泛应用于缓存、分布式会话、分布式锁、实时统计等场景。

最经典的 KV 数据库当属 Redis 了,它是开源的、基于内存的、高性能的数据库,不仅支持丰富的数据类型和功能,还有持久化等重要特性,也是后端同学必学的技术。其他的常用 KV 数据库有 LevelDB、RocksDB、Apache Cassandra 等。

KV 数据库的底层实现比较灵活,常见的实现方式是使用哈希表来存储键值对。不同类型的值对应的实现方式也不同,比如 Redis 的字符串存储采用简单动态字符串(SDS)实现。

3、SQL与Redis之间的异同

首先上结论Redis不能代替MySQL, Redis和MySQL只能是一种互补。Redis是一种非关系kv内存数据库(也就是常说的NoSQL),即将数据存储在缓存中,支持的数据类型比较多,比如字符串,Hash,List等缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。Redis的适用场景及优点:

  1. 经常要被查询,但是创建、更新、删除等操作频率低的数据;比如数据字典,确定了之后很少被修改,是可以放到缓存中的;还有热点数据,查询极为频繁的数据,放到Redis中可以减少MySQL的压力。
  2. 经常被查询,但是实时性要求不高数据,比如购物网站的热销排行榜,定时统计一次后把统计结果放到redis中提供查询 。
  3. 缓存还可以做数据共享(Session共享),在分布式的架构中,把用户的Session数据放到Redis中。
  4. 高并发场景下的计数器,比如秒杀,把商品库存数量放到Redis中(秒杀的场景会比较复杂,Redis只是其中之一,例如如果请求超过某个数量的时候,多余的请求就会被限流)。
  5. 因为Redis对高并发的支持和单线程机制,它也经常用作分布式锁。
    Redis的缺点:Redis虽然功能强大、性能高效,但是也不是万能的,项目在引入Redis的时候,需要考虑的问题也比较多,并且会带来额外的开发和运维的工作量。

MySQL是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,数据的格式是我们熟知的二维表格的样式,关系型数据库具有很多强大的功能,大部分都支持SQL语句查询,对事务也有很好的支持。
MySQL的优点:1. 体积小、速度快、总体拥有成本低。2. 开源,提供的接口支持多种语言连接操作。3. MySQL 的核心程序采用完全的多线程编程。4. 有一个非常灵活而且安全的权限和口令系统。5. 支持大型的数据库, 可以方便地支持上千万条记录的数据库。6. 支持多种操作系统。7. 提供多语言支持。
MySQL的缺点:1. 不支持备份也不支持自定义数据类型,同时对存储过程和触发器支持,也不够友好。2. MySQL最大的缺点是安全系统,复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。
在这里插入图片描述

4、MongoDB(分布式文档存储数据库)

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式(JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,bson是一种类json的一种二进制形式的存储格式),因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

向量数据库入坑:使用 Docker 和 Milvus 快速构建本地轻量图片搜索引擎
Elasticsearch和MongoDB对比


http://www.kler.cn/news/309726.html

相关文章:

  • 780nm 扫地机器人模组:科技引领智能清洁新潮流
  • windows使用tcpdump.exe工具进行抓包教程
  • 企业如何构建有效的数据泄露防护安全体系
  • [yotroy.cool] MGT 388 - Finance for Engineers - notes 笔记
  • kubelet组件的启动流程源码分析
  • Openlayers 报错记录 Failed to execute ‘toDataURL‘ on ‘HTMLCanvasElement‘:
  • 三、(JS)JS中常见的表单事件
  • Nodejs+vue+Express游戏分享网站的设计与实现 7a2s2
  • linux 中gitee配置
  • 如何进行DAP-seq的数据挖掘,筛选验证位点
  • 【网络安全】-rce漏洞-pikachu
  • P2P应用
  • 禹神3小时快速上手typescript
  • 区块链审计 如何测试solidity的bool值占用几个字节
  • WSL中使用AMBER GPU串行版
  • 【数据仓库】数据仓库常见的数据模型——范式模型
  • LeetCode 2332.坐上公交的最晚时间 (双指针 + 贪心)
  • kubernetes架构
  • 上调铁矿石产量预期后,淡水河谷股价能否重振?
  • MUNIK谈ASPICE系列专题分享(九)ASPICE对项目需求管理的实践分享
  • 2.Springboot之ApplicationContextListenerConfig
  • 【四范式】浅谈NLP发展的四个范式
  • 怀揣热爱 躬耕不惫 ——记新宁县金石镇水头学校朱文文老师
  • 雷池waf:三步轻松卸载指南
  • Redis - 集群篇 - 集群模式
  • 系统安全设计规范(Word完整版)
  • 如何用麦肯锡方法分析问题和解决问题?
  • navicate连接oracle数据库probable oracle net admin error
  • C++:内部类,匿名对象,操作符new与delete
  • uniapp 做一个查看图片的组件,图片可缩放移动