NoSQL技术——Redis

news2024/12/23 12:19:19

简单介绍

Redis是当下最流行的NoSQL数据库。在Redis中,数据的存储格式是以键值对的方式进行存储的。在键值对的存储形式中,值除了是常见的字符串,也可以是类似于Json对象的形式,或者是List,Map等数组格式,或者是其他的复杂类型,所以键值对的存储方式也足够满足我们日常的使用:

像这种的,并不是以标准的表的格式存储的数据库,而是使用自身特定的数据结构进行存储的数据库叫做NoSQL的数据库。当然对于NoSQL的定义要更加的广泛,现在暂时就用存储结构将SQL和NoSQL数据库进行简单的区分即可。

认识NoSQL

SQL:关系型数据库

NoSQL:非关系型数据库,或者说,不仅仅是数据库

两者的区别

首先,SQL的S表示的是(Structured)结构化的意思,也就是说关系型数据库中的数据存储格式都是非常的规整的表的格式,并且我们还会加上一些约束让其中的数据更加的规范标准。

NoSQL的数据类型就相对比较松散,对于数据的存储并没有太强的约束,比如Redis的数据类型就是键值对的类型,其中键值的数据类型可以任意定义。或者对于ES这类的文档型,他们的数据存储格式就是JSON格式的存储方式。

除了数据的不同,当我们在定义SQL的表结构的时候,一般定义好了之后就不会轻易地修改表的结构,容易出现对应的业务无法正常实现的风险,或者数据发生错误,但是对于NoSQL来说,字段的数量可以随时的添加修改,我们只关注对应的字段,至于其他的字段是多了或者少了都对我们没有影响。

其次,SQL的第二个特点就是(Relational)关联,这个特性在之前我们学习MySQL时接触到的外键约束和多表查询,或者在做Java程序的时候学过的多对多关系中都有体验,比如我们用一个用户表,一个订单表,一开始这两张表并没有关系,但是当业务开始实现,一个用户购买了一个商品,这时候就会出现一张中间表去维护某个用户购买了某样商品,这时候表与表之间就开始有了关联,当我们再想去随意的操作关联表中的数据的时候,可能会因为某个表中的关联数据而导致无法正常的更改数据。

而对于NoSQL来说,他不会刻意的去维护表与表之间的关系,甚至对于数据与数据之间的关系都非常的模糊,如果想要将两个数据联系起来,一般的方式会选择嵌套,即在一个JSON对象中再加入一个JSON对象的方式去将多个对象进行联系。

然后就是查询方式的区别,SQL数据库的查询方式是使用SQL语言进行查询,但是对于NoSQL来说,查询语言并不是固定的,而是不同的 NoSQL数据库都有不同的查询方式,并没有一个统一的格式。各有各的好处,比如我们的SQL查询语言比较统一,基本上一套SQL语言可以在各种关系型数据库中使用,而非关系型数据库虽然不统一,但是查询的方式多半都比较符合程序员的编码方式,所以学习起来也并不是非常的困难。

还有就是事务方面的区别,所有的关系型数据库的事务,都满足ACID的特性,而非关系型数据库,并不能完美的实现事务,只能实现基本的事务的一致性。

除了以上这些大方向的差异,还有一个小的差异,比如SQL一般会将数据持久化到硬盘中,而非关系型数据库会将数据暂时存储在内存中,当触发持久化的操作的时候,才会真正的将数据落盘。以及在关系型数据库设计之初,就并没有为分布式做考虑,也就是说,当你需要提升数据库的性能的时候,只能不断地增加本机的性能,这种方式就是垂直扩展。但是NoSQL之所以现在发展的很快,就是因为它搭上了大数据的快车,大数据的对于数据的要求量非常的大,所以大数据的组件一开始的设计就是为了能够水平扩展,也就是由多台设备组成一个集群,从而协同运作提升效率,NoSQL的数据库也满足这一分布式的特性,从而和大数据一拍即合。

当然,根据不同的业务需求去选择不同的数据库也是非常重要的,所以了解了这些两者的不同点之后才能更好地发挥不同组件的作用。

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

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

相关文章

NVIDIA CUDA Win10安装步骤

前言 windows10 版本安装 CUDA ,首先需要下载两个安装包 CUDA toolkit(toolkit就是指工具包)cuDNN 1. 安装前准备 在安装CUDA之前,需要完成以下准备工作: 确认你的显卡已经正确安装,在设备管理器中可以看…

大模型重塑区域人才培养,飞桨(重庆)人工智能教育创新中心正式启动

2023年8月22日,重庆市高校人工智能产教融合院长研讨会暨飞桨(重庆)人工智能教育创新中心启动仪式在重庆大学成功召开。会上,由百度飞桨、重庆大学组织重庆市二十一所高校共建的飞桨(重庆)人工智能教育创新中…

5.(Python数模)固定费用问题

Python解决固定费用问题 具体文章参考博文 问题描述 源代码 import pulp # 导入 pulp 库# 主程序 def main():# 固定费用问题(Fixed cost problem)print("固定费用问题(Fixed cost problem)")# 问题建模:"""决策变量:y…

stable diffusion实践操作-原理

本文专门开一节SD原理相关的内容,在看之前,可以同步关注: stable diffusion实践操作 正文 1 原理

linux定时删除服务器日志

不说废话。直接进入操作流程 linux 定时任务是用的crontab 查看 crontab是否启动 service crond statusdead 死的 启动crontab service crond start 再次查看状态 running 运转的 查看 crontab cat /etc/crontab 查看 crontab任务 crontab -l 编辑 crontab任务 crontab …

ebay测评,物理环境与IP环境:解决平台风控问题的关键

近期eBay平台出现了大量风控问题,导致许多买家账号受到影响。实际上,这主要是由于环境搭建方面存在主要问题。时至2023年,许多人的技术方案仍停留在几年前,要么使用一键新机工具配合国外IP,要么使用指纹浏览器配合国外…

SpringCloudAlibaba Gateway(三)-整合Sentinel功能路由维度、API维度进行流控

Gateway整合Sentinel ​ 前面使用过Sentinel组件对服务提供者、服务消费者进行流控、限流等操作。除此之外,Sentinel还支持对Gateway、Zuul等主流网关进行限流。 ​ 自sentinel1.6.0版开始,Sentinel提供了Gateway的适配模块,能针对路由(rou…

SingletonSystem 单例管理系统

SingletonSystem 单例管理系统 单例模式是项目中最为常见的设计模式之一,但是写法都不够优雅不方便查找和管理,下面介绍一种使用反射实现的单例管理架构,需要基于之前介绍过的AssemblyManager 程序集管理器 1.AssemblyManager 每次加载程序…

Kubernetes技术--k8s核心技术 Secret

1.概述 Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中。Secret可以以 Volume 或者环境变量的方式使用。 作用 加密数据存储在/etc中,使得pod容器以挂载volume方式进行访问。在进行的数据存储中是以base64加密的方式…

Gromacs模拟体系构建----进阶版

Gromacs是目前广泛使用的分子模拟软件,其在生物、材料等领域的模拟表现出较为突出的优势。之前,本公众号介绍过一系列体系的模拟以及gromacs的使用办法和教程。本次,将为大家介绍一种进阶版的模型构建方法。 在之前的介绍中,我们…

Windows修改电脑DNS

访问浏览器出现无法访问此页面,找不到DNS地址,则可以通过如下方式修改DNS 按下windows键R键(两个键一起按) 出现下面窗口 输入control按回车键(Enter键)就会出现下面的窗口 DNS可以填下面这些: 114.114.114.114 和 114.114.115.115 阿里DNS&a…

Virtualenvwrapper 的安装教程

Virtualenvwrapper Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做: 将所有虚拟环境整合在一个目录下管理(新增,删除,复制)虚拟环境快速切换虚拟环境 安装方法 Li…

Java String类(2)

String方法 字符串拆分 可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串 相关方法如下: 方法功能String[ ] split(String regex)//以regex分割将字符串根据regex全部拆分String[ ] split(String regex, int limit)将字符串以指定的格式,拆…

浅谈为什么磁盘慢会导致Linux负载飙升

先说原因结论 在Linux系统上,load average这个指标基本失去了作用,因为你不知道它代表什么意思,当看到load average很高的时候,你不知道是runnable进程太多还是uninterruptible sleep进程太多,也就无法判断是CPU不够用…

bazel高效使用和调优

Bazel 为了正确性和高性能,做了很多优秀的设计,那么我们如何正确的使用这些能力,让我们的构建性能“起飞”呢, 我们将从本地研发和 CI pipeline 两种场景进行分析。 本地研发 本地研发通常采用默认的 Bazel 配置即可&#xff0c…

C# Solidworks二次开发:创建距离配合以及移动组件API详解

今天要讲的文章是关于如何创建距离配合和移动组件的API详解。 (1)创建配合API,CreateMate() 这个API的解释是根据指定的特性数据对象来创建配合,也就可以理解为输入什么样的特征对象就可以创建出什么配合,这个API的输…

YOLOv5算法改进(12)— 替换主干网络之Swin Transformer

前言:Hello大家好,我是小哥谈。Swin Transformer是一种基于Transformer的深度学习模型,它在视觉任务中表现出色。与之前的Vision Transformer(ViT)不同,Swin Transformer具有高效和精确的特性,并…

学用 CountDownLatch 与 CyclicBarrier

开篇即说结论,如果搞不清楚两者区别,那就无脑用 CountDownLatch,问题也不大(因为我也不是太懂)。 CountDownLatch 模拟了100米赛跑,10名选手已经准备就绪,只等裁判一声令下。当所有人都到达终…

R3LIVE源码解析(7) — R3LIVE中LiDAR_front_end.cpp文件

目录 1 LiDAR_front_end.cpp简介 2 LiDAR_front_end.cpp程序解析 1 LiDAR_front_end.cpp简介 激光点云首先在LiDAR_front_end节点中提取特征点,将处理完的信息通过/laser_cloud_flat完成节点的发送出去,与FAST-LIO2相同R3LIVE也只用到了面特征作为ESI…

在windows上配置ninja环境

ninja使用并行任务来编译工程,比cmake编译快了一个数量级,是谷歌在2010年为了提高cmake的编译速度而开发一款编译工具。下面介绍在windows上配置ninja环境。 1 下载ninja ninja官网地址: https://github.com/ninja-build/ninja/releases   …