【大话面试】- Redis 篇-第一篇

news2025/1/17 2:53:04

【大话面试】- Redis 篇-第一篇

认识 NoSQL

SQL VS NoSQL


1️⃣ 结构化(Structured)

SQL 的存储格式

image-20230228191804942

NoSQL

image-20230228191900349

从其存储的结构上来看,对于 SQL 数据库而言,我们可以给每一个表的属性添加不同的约束(主键唯一,无符号,数据长度,数据类型)等。

一旦我们在表中插入的数据过多,比如上千万条数据。我们如果一旦修改表的某一个字段,那么所带来的影响是非常巨大的,比如锁表,表与业务相关联表发生变动,则业务也需要进行修改。

而对于 NoSQL 的数据库,并没有 SQL 型数据库这样的强行约束。常见的有像 Key-Value 形式的键值对存储,或者 Document 文档形式以及 Graph 图形式,这种形式的数据结构本身是比较宽松的,多一个字段或其少一个字段,所造成的影响都是非常小的。


2️⃣ 关联化(Relational)

SQL 关系化

image-20230228193114778

NoSQL 关系化

image-20230228193206867

首先对于 SQL 关系化数据库,由于表与表之间可以通过建立外键之间进行关联,所以当我们删除其中一个表时数据库会自动的维护,对一些不恰当的操作禁止执行,而这种的关系性关联同时也节省了存储的空间(不需要将外键的信息同时存储到主键当中)。

而对于 NoSQL 非关系化的数据库而言,如上图所示,一个订单信息中,及时一些信息丢失也不会造成一些异常。同时这种非关系的存储,会使得同一个订单中出现多个重复的商品,比如张三买了 两台 荣耀6 ,这就意味着 荣耀6 这个商品就需要在订单中重复出现两次。

那有一些同学会说,我们可以单独创建一份关于商品的 Document,可以通过像 SQL 一样进行相互的关联呢?嗯,是的没错。但是这样就要求我们的建立的这种关系需要程序员自己的去进行维护了,维护的成本就变高了。


3️⃣ SQL 查询

SQL 的执行语句

image-20230228194526319

NoSQL 的执行语句

image-20230228194717246

可以看到对于 SQL 语句来说,无论是对于我们常用的 MySql 还是 SQLServer 其语句都通用的,语法通用,但这种的语法比较复杂。

但对于 NOSql 数据库而言,其语法非常的简单,只有其键值对的这种形式,但也可以看到 NoSQL 的语法对于不用的数据库而言,其语法不同,这就要求对 NoSQL 数据库掌握的语法较多了。


4️⃣ 事务

SQL 数据库的事务 ACID

image-20230228195046188

NoSQL 数据库的事务 BASE

image-20230228195203669


两种数据库的对比总结

SQLNoSQL
数据结构结构化(Structured)非结构化
数据关联关联化(Relarional)无关联
查询方式SQL查询非SQL
事务特征ACIDBASE
存储方式磁盘内存
扩展性垂直水平
使用场景1. 数据结构固定 2.相关业务的数据安全性、一致性要求较高1. 数据结构不稳定 2. 对一致性、安全性要求较高 3. 对性能要求
  • 存储方式:

    对于存储方式来说,SQL 的文件都是存储在磁盘上的即便是对于 MySql、SqlServer 它们虽然具有缓存,但是其核心文件都是存储在磁盘上的。

    NoSQL 比如常用的 Redis 数据存储在内存中,虽然有其持久化的方案,但是在实际数据读取时一般都是读取的内存中的数据,所以 Redis 的数据一般只要内存一掉电,数据就会丢失。但也说明了, NoSQL 操作数据的效率要比 SQL 高很多。

  • 扩展性:

对于设计之初,SQL 型数据库起初是没有考虑数据分片的这种需求的,所以我们在储存数据的时候,数据都是存储在本机的。所以这也导致,影响其性能能只能是主机的本身,虽然说对于 SQL 数据库存在其主从读写的这种方案的,但是无论是对于读还是写,其存储的数据量是没有变的,主机与从机存储的数据量始终是一样的,只是增加了机器的数量。

但是对于 NoSQL 数据来说,在设计之初就考虑到数据拆分的这种需求,所以数据在是可以更具其 id 或者唯一的标识进行 Hash 运算,更具 Hash 运算的结果来决定将数据最终存放到哪一个节点上,天然的支持水平的扩展的。

虽然说 SQL 本身是不支持数据的拆分的,但是是可以通过第三方的组件,进行一些拆分的,同时也是因为引入了第三方的组件,在使用的时候考虑的问题同时也变多了。

  • 使用场景:

    如果说你的数据业务变更较少,一旦确定几乎不会发生大的变更的,或者说数据业务对其安全性,一致性的要求较高的,我们就使用关系型数据库。

    比如说我们下一个订单,订单对其安全性要求就比较高,我们采用关系型数据库。但是我们为了提高查询的性能,我们可以冗余的将一部分数据放到非关系型的数据库中,提升其查询的效率。

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

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

相关文章

Java时间获取、格式化详情

Java时间获取详情java.util.Datejava.util.CalendarJava8推荐的时间获取方法LocalDate获取日期LocalTime获取时间LocalDateTime 获取时间和日期这里先附上后面会用到的进行时间格式化的代码:SimpleDateFormat timeSimpleDateFormatter new SimpleDateFormat("…

09_MySQL的子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后…

【Node.js】MySQL数据库

数据库数据库的基本概念什么是数据库常见的数据库和分类数据库的数据组织结构实际开发中库,表,行,字段的关系MySQL相关的软件MySQL Workbench创建数据库创建数据表设计表字段字段的特殊标识向表中插入数据使用SQL管理数据库什么是SQLSQL能做什…

springcloud3 Nacos中namespace和group,dataId的联系

一 Namespance和group和dataId的联系 1.1 3者之间的联系 话不多说,上答案,如下图: namespance用于区分部署环境,group和dataId用于逻辑上区分两个目标对象。 二 案例:实现读取注册中心的不同环境下的配置文件 …

IDEA中Maven报错:Failed to read artifact descriptor for解决方案

导入spark-core依赖报错 Failed to read artifact descriptor for com.esotericsoftware:kryo-shaded:jar: 图片忘记报错了,拿一张网友的图,现象是spark-core成功导入,但是pom文件中project处报错 这个原因是因为maven版本不匹配&#xff0c…

金三银四,助力你的大厂梦,2023年软件测试经典面试真题(2)(共3篇)

前言 金三银四即将到来,相信很多小伙伴要面临面试,一直想着说分享一些软件测试的面试题,这段时间做了一些收集和整理,下面共有三篇经典面试题,大家可以试着做一下,答案附在后面,希望能帮助到大…

eNSP实验:vlan 划分与访问

实验目的 交换机未划分 vlan,直接相连的两个终端能否 ping 通? 不同 vlan 中的两个终端能否可以 ping 通? 相同 vlan 但不连接至同一个交换机的两个终端,能否与 ping通? 实验步骤 设计网络拓扑 交换机选用 S5700…

电子技术——AB类输出阶的偏置

电子技术——AB类输出阶的偏置 下面我们介绍两种AB类输出阶的偏置的方法。 使用二极管偏置 下图展示了电流源 III 加两个二极管的偏置方法: 因为输出阶需要大功率输出,因此输出推挽三极管可能是几何体积比较大的晶体管。对于二极管来说,并不…

LeetCode 79. 单词搜索

LeetCode 79. 单词搜索 难度:middle\color{orange}{middle}middle 题目描述 给定一个 mxnm x nmxn 二维字符网格 boardboardboard 和一个字符串单词 wordwordword 。如果 wordwordword 存在于网格中,返回 truetruetrue ;否则,返…

3月来了,给自己做一个简单的nodejs后端技术总结

3月来了,给自己做一个简单的nodejs后端技术总结 3月来了,给自己做一个简单的nodejs后端技术总结 完全重构 数据库切换迁移Why Nestjs?prisma or typeorm?serverless 函数辅助GraphQLGithub Action CI/CD部署 tensorflow 模型 我又滚回来写文章了,从去年11月底…

用canvas画一个炫酷的粒子动画倒计时

前言 😆 这是一篇踩在活动尾声的文章,主要是之前在摸鱼社群里有人发了个粒子动画的特效视频,想着研究研究写一篇文章出来看看,结果这一下子就研究了半个多月。 😂 下面就把研究成果通过文字的形式展现出来吧&#xf…

Compact 调优实例

1.问题描述 10月27号,用户反馈 g_feature 资源组的回溯任务在夜间的耗时比较大。在00:49——04:16期间,查询的平均耗时是大于100ms的。 2. 分析原因 根据问题现象,在夜间的耗时比较大,白天的耗时比较小,首先想到的就…

【电子通识】为什么产品出厂前要进行高温老化?

产品在出厂时往往会进行高温老化测试,那出厂前高温老化的目的是什么?可靠性定义首先我们要知道产品的可靠性,可靠性的定义是指产品在规定的条件下能够正常运行达到产品寿命的概率。如下公式表示,其中,λ表示固有故障率…

一起了解井用污水采样器——让井下污水采样更人性化

井用采样器的工作环境比较特殊。比如:雨水管网、窨井、污水井、排污口、下水道,海洋、河流、沟渠等恶劣狭小的环境。这就要求采样设备小巧灵活,方便环境检测执法检查人员在排污井、检查井、雨水管网等特殊环境中进行水质采样。 **井用采样器主…

二叉树路径查找

题目描述:给定一棵二叉树(结构如下),其中每个节点值为整数。给定一个值 K,求所有满足如下条件的路径并将路径上节点的值打印出来: 1、路径方向必须向下,即只能从父节点指向子节点 2、路径并不是必须从根节点开始或在叶…

21- 神经网络模型_超参数搜索 (TensorFlow系列) (深度学习)

知识要点 fetch_california_housing:加利福尼亚的房价数据,总计20640个样本,每个样本8个属性表示,以及房价作为target 超参数搜索的方式: 网格搜索, 随机搜索, 遗传算法搜索, 启发式搜索 函数式添加神经网络: model.add(keras.l…

Python可视化界面编程入门

Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplication #导入两个类来进行程序界面编程if __name__"__main__":#创建一个Appl…

探索ChatGPT背后的网络基础设施

ChatGPT是OpenAI公司开发的一款聊天机器人应用,自2022年11月推出以来以迅雷不及掩耳盗铃之势火爆全球。ChatGPT不仅可以模仿人类对话,还可以创建音乐、电视剧、童话故事和学生论文,甚至是编写和调试计算机程序。 截至2023年1月,C…

如何打造自己的小程序生态?

2021 年全网小程序数量就已超 700 万,从微信开始,到其他各大平台,如抖音、支付宝,小程序发展迅猛,2023年小程序仍有着巨大的发展潜力。 现在。人们逐渐发现,日常的生活、出行、购物各个方面都越来越离不开…

CAN工具-VSpy(ValueCAN) - Panel面板

在介绍CANoe工具的时候,有介绍过Panel面板的使用,同样,在VSpy软件工具中,也有同类型的工具可供使用 - Graphical Panels,同样也能提供一个控制面板,然后我们通过连接信号实现不同的控件,已达到我…