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

Redis基础(1):NoSQL认识

SQL和NoSQL

数据库可以分为关系型数据库非关系型数据库SQL(Structured Query Language)相信大家并不陌生,这是用于操作关系型数据库的语言NoSQL,顾名思义,它对应的就是非关系数据库,它是操作非关系型数据库的技术类别。二者有很多地方是相同的,因为它们都是操作数据库的技术,但二者又有很多的不同之处,下面让我们从不同的角度了解二者的差异。

结构化(Structure)

SQL是结构化的查询语言,其结构化表现在数据是以一张二维表的形式保存在数据库中的,并且在创建表的时候,可以给表添加约束和字段限制。这些约束一旦建立好了,则这张二维表的结构就确定了,之后插入表中的数据就需要严格按照表的结构进行插入。并且表的结构是不建议修改的,需要在项目初期就确定好整张表的结构——由此也可以看出结构化对于SQL的重要性
NoSQL则是非结构化的,其对于数据的结构并没有严格的约束——但并不是意味着完全没有约束,需要根据NoSQL数据库的类型具体分析。但不论是哪种,相较于SQL的数据结构都比较松散,并没有这么强的结构和约束。

关系型

SQL对应的是关系型数据库表中的数据是有关联的。比如有三张表tb_user(用户表)tb_item(商品表)tb_order(订单表),这三张表看似是没有任何关系的,但是可以通过foreign key外键技术让三张表产生关系:

在删除数据的时候,必须按照外键的关系按照顺序删除。
NoSQL数据库本身是不会维护这种表之间的关系的,如果想要有SQL数据库一样的关系们必须依靠程序员自己维护。

SQL查询

关系型数据库可以通过SQL语句完成查询,并且SQL语句在关系型数据库中是通用的,不论是MySQL或者Oracle或者SQLSeverSQL语句都是通用的,其格式是固定的,语法也是固定的。
非关系型数据库中的查询语句完全不固定,根据不同的非关系型数据库,有不同的查询语句。

上图是三种常见非关系型数据库的查询语句,如图所示,三者都实现了查询id为1的用户信息这个功能,但是查询的语句却是大相径庭的Redis是一种命令、MongoDB是一种基于函数形式的调用、elasticsearch是一种基于RESTful风格的请求

事务

确保事务可靠执行的四个特性是ACID(Atomicity原子性、Consistency一致性、Isolation隔离性、Durability持久性),在关系型数据库中,经常会使用到事务,特别是涉及到多表操作时,而数据库底层可以帮助我们实现ACID的特性,所以说可以认为所有的关系型数据库都是满足ACID特性的。
非关系型数据库对于事务的ACID特性支持并不完善,有的数据库无法满足事务的强一致性,只能满足基本一致性,有的数据库甚至不支持事务。

存储方式

关系型数据库数据库中的数据存储一般是在磁盘中,非关系型数据库数据库中的数据一般是存储在内存中。通过一些计算机组成原理的知识,我们可以知道内存的读写速度是远远高于磁盘的,所以说一般基于内存存储的非关系型数据库的查询速度会远远高于基于磁盘存储的关系型数据库。但由于内存的容量较小,非关系型数据库的数据容量也会小于关系型数据库并且内存资源十分的宝贵,所以说一般不用来作持久化存储

总结

上表就是SQLNoSQL的主要区别,在实际开发中可以按照具体的使用场景来选择具体需要使用的数据库,但是在更多的情况下,会将二者结合起来使用,通过SQL的结构化存储来持久化保存数据;然后通过NoSQL的极致性能来做数据缓存,提升查询效率。

http://www.lryc.cn/news/579183.html

相关文章:

  • 端到端自动驾驶系统关键技术
  • 开发自动驾驶系统所需工具
  • 2025美国券商交易系统综合开发及解决方案报告:低延迟、全球化与代币化技术赋能机构业务新生态
  • “山河”应急指挥决策AI智能体 - 全生命周期构建实施说明
  • 轻松上手:使用Nginx实现高效负载均衡
  • python中的pydantic是什么?
  • 逆向入门(25、26)程序逆向篇-KeygenMe,MexeliteCRK1
  • Linux基本命令篇 —— alias命令
  • MIT协议开源CRM系统:打造高效客户关系管理解决方案
  • 【Vue入门学习笔记】项目的创建与基础认识
  • 存储过程封装:复杂业务逻辑的性能优化
  • 基于 TOF 图像高频信息恢复 RGB 图像的原理、应用与实现
  • 监测检测一体化项目实践——整体功能规划
  • 物联网实战:多语言(Java、Go、Rust、C++、C#、Rust)设备接入与数据处理
  • macOS挂载iOS应用沙盒文件夹
  • TikTok电商广告重大调整:GMVmax全面取代传统广告模式
  • iOS 集成RN Installing glog (0.3.5)报错的解决方案
  • 【echarts】解决 ECharts 图表模糊问题的实践心得:单条数据时字体颜色灰蒙蒙的, 图例失真, 字体模糊问题解决
  • 闲庭信步使用SV搭建图像测试平台:第二十六课——图像的二值化
  • 2-RuoYi-UI管理平台的启动
  • 幸狐RV1106开发板从SD卡启动自己的busybox1.36.1根文件系统
  • 【WPF】外部引用样式
  • 基于Apache POI实现百度POI分类快速导入PostgreSQL数据库实战
  • vscode vim配置
  • 【字节跳动】数据挖掘面试题0003:有一个文件,每一行是一个数字,如何用 MapReduce 进行排序和求每个用户每个页面停留时间
  • 【Erdas实验教程】026:遥感图像辐射增强(去条带处理)
  • Qt 5.9 XML文件写入指南
  • JavaScript 性能优化实战:减少 DOM 操作引发的重排与重绘
  • 无人机一机多控技术的核心要点
  • 设计模式(八)