Redis学习(一):NoSQL概述

news2024/11/20 9:40:13

为什么要使用Nosql

现在是大数据时代,过大的数据一般的数据库无法进行分析处理了。

  1. 单机MySQL的年代

image-20230303213709392

90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够!
那个时候,更多的去使用静态网站,服务器没有太大的压力
这种情况下,整个网站的瓶颈是什么?

  1. 数据量如果太大,一个机器放不下了
  2. 数据的索引 (单表超过300万就一定要建索引),一个机器内存也放不下
  3. 访问量(读写混合),一个服务器承受不了
  1. Memcached(缓存)+ MySQL + 垂直拆分(读写分离)

网站80%的情况下都是在读,如果每次都是查询数据库则效率太低。所以来使用缓存来保证效率。

发展过程:优化数据结构和索引 => 文件缓存(IO)=> Memcached(当时最热门的技术)

请添加图片描述

图中只有服务器 Mysql2 用来写,其他服务器都只负责读,其他服务器去同步 Mysql2 中的内容

  1. 分库分表 + 水平拆分(集群)

慢慢使用分库分表来解决写的压力。
image-20230303215220444

每个集群只存三分之一的用户数据。

  1. 最近年代

数据量多,变化快。关系型数据库就不够用了。

MySQL当存一些比较大的文件,博客,图片的时候,数据库表会很大,效率就低了。如果有一种数据库来专门处理这种数据,MySQL的压力就变小了。大数据的IO压力下,表几乎没法更改。

目前的一个基本的互联网项目

请添加图片描述

为什么要用NoSQL

用户的个人信息,社交网络,地理位置。用户自己产生的数据,用户的日志等等,爆发式增长。
这个时候我们就需要使用NoSQL数据库了,NoSQL可以很好的处理以上的情况。

什么是NoSQL

NoSQL = Not Only SQL

泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付了。尤其是超大规模的高并发社区。NoSQL在当今大数据环境下发展的十分迅速,其中Redis是发展最快的。

用户的个人信息,社交网络,地理位置。这些的数据的存储不需要一个固定的格式,不需要多余的操作就可以横向扩展(集群)。

NoSQL特点

  1. 方便扩展(数据之间没有关系,很好扩展)

  2. 大数据量高性能(Redis 一秒可以写8万次,读取11万次,NoSQL的缓存记录级,是一种细粒度的缓存,性能比较高)

  3. 数据类型是多样性的(不需要实现设计数据库,随取随用)

  4. 传统的RDBMS和NoSQL

    传统的RDBMS

    • 结构化组织
    • SQL
    • 数据和关系都存在单独的表中
    • 数据操作,定义语言
    • 严格的一致性
    • 基础的事务

    NoSQL

    • 没有固定的查询语言
    • 键值对存储,列存储,文档存储,图形数据库
    • 最终一致性
    • CAP定理 和 BASE理论(异地多活)
    • 高性能,高可用,高可扩展性

了解: 3V+3高

3V:主要是描述问题的

  • 海量 Volume
  • 多样 Variety
  • 实时 Velocity

3高:主要是对程序的要求

  • 高并发
  • 高可扩(随时水平拆分,机器不够的时候,随时可以加一台服务器)
  • 高性能(保证用户体验和性能)

在公司中一定是:NoSQL + RDBMS 一起使用

NoSQL的四大分类

KV键值对:

  • 新浪:Redis
  • 美团:Redis + Tair
  • 阿里、百度:Redis + memcache

文档型(bson格式):

  • MongoDB(一般必须要掌握)
    • MongoDB是一个基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档
    • MongoDB是一个介于关系型数据库和非关系型数据库的中间的产品。MongoDB是非关系型数据库中功能最丰富,最像关系型数据库的。
  • ConthDB

列存储数据库:

  • HBase
  • 分布式文件系统

图关系数据库

  • 存放的是关系,比如社交网络,推荐系统
  • Neo4j,InfoGrid

四者之间关系。

image-20230304095616711

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

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

相关文章

TD算法超详细解释,一篇文章看透彻!

【已解决】TD算法超详细解释和实现(Sarsa,n-step Sarsa,Q-learning)一篇文章看透彻! 郑重声明:本系列内容来源 赵世钰(Shiyu Zhao)教授的强化学习数学原理系列,本推文出于非商业目的分享个人学习…

DockerFile创建及案例

DockerFile dockerfile是用来构建docker镜像的文件,命令脚本参数脚本! 构建步骤 编写一个dockerfile文件docker build 构建成为一个对象docker run 运行镜像docker push 发布镜像(DockerHub、阿里云镜像仓库) 去官网Docker-Hub…

51单片机——串口通信,小白讲解,相互学习

通讯的基本概念 51单片机不仅可以实现串口通信,还可以通过IO口模拟实现多种其他通信,比如 SPI,IIC等,学习这些通信前,我们很有必要了解下通信的基本概念。通信的方式可以分为多种,按照数据传输方式可分为串…

MySQL——复合查询+表的内外连接

文章目录复合查询基本查询多表查询自连接子查询1、单行子查询2、多行子查询3、多列子查询4、在from子句中使用子查询😊5、合并查询结果unionunion all表的内连和外连内连接外连接左外连接右外连接复合查询 接下来我们就要进行的是多张表里进行查询操作,…

大数据相关面试题

linux 常见linux高级命令? top、iotopnetstatdf -hjmap -heaptarrpmps -efshell 用过的shell工具? awk Awk 命令详解 - 简书 awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来…

MySQL中的Join连接查询

目录JoinJoin的分类笛卡尔积笛卡尔积出现的原因为什么不推荐有笛卡尔积出现那应该怎么做多表连接Join的使用小表驱动大表小表驱动大表是什么小表驱动大表的好处如何区分哪一个是驱动表和被驱动表Join原理及算法NLJ算法BNLJ算法总结:如何写入高性能的连接查询为什么M…

一阶低通滤波介绍及simulink模型

一阶低通滤波 背景介绍 低通滤波是一种过滤方式,规定低频信号能正常通过,而超过设定临界值的高频信号则被阻隔、减弱。低通滤波可以简单的认为:设定一个频率点,当信号频率高于这个频率时不能通过,在数字信号中&#…

对象图实例解析

总目录链接>> AutoSAR入门和实战系列总目录 文章目录更快、更好、更轻松地学习 UML对象图的目的对象图一览类到对象图示例 - 订单系统基本对象图符号和符号类图与对象图对象图 - 通过示例学习对象图示例 I - 公司结构对象图示例 II - POS对象图示例 III - Writer对象结构…

Java中的Comparator 与 Comparable详解

Comparator VS Comparable1. Comparator1.1 对一维数组进行排序1.2 对二维数组进行排序1.3 对对象数组进行排序2. Comparable3. 二者区别1. Comparator 通过源码发现Comparator是一个接口。 根据compare方法中的注释可以发现方法返回三种类型的值,正数、零、负数&a…

4.1 路由器(华硕 官改/梅林 华为 小米 路由) 使用花生壳 实现远程管理

最近添置了一台华硕的八爪鱼GT AC5300,到手后刷了官改,而里面软件中就提供了花生壳程序,想到花生壳为每个用户提供了两条免费映射(带宽为1mbs,流量为1g/月),所以就打算利用来做一个远程访问。具…

开发手册——一、编程规约_7.控制语句

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】在一个 switch 块内,每个 case 要么通过 break / return 等来终止,要么注释说明程序将继续执行到哪…

CSGO服务器配置全贴纸插件方法教程

CSGO服务器配置全贴纸插件方法教程 关于插件的警告 一定要了解V社对于CSGO社区服务器的规定,全皮肤插件/全手套插件等,在设置了GSLT的情况下,是有可能被封禁GSLT账号的(所以慎用) 配置好服务器之后呢,想安…

uniapp+uView2.0实现自定义动态tabbar

1.需求说明 2.实现原理说明 3.实现过程 3.1集成uView2.0 3.2 自定义tabbar 3.3 vuex定义tabbar共享信息 3.4 tabbar显示个数控制 1.需求说明 要求不同时间显示不同的tabbar.点击不同的tabbar跳转到不同的页面,能随时…

【2021.9.7】记一次exe手动添加shellcode

【2021.9.7】记一次exe手动添加shellcode 文章目录【2021.9.7】记一次exe手动添加shellcode0.大致思路1.获取MessageBox的真实地址VA2.通过OD在代码段添加shellcode3.dump出数据,设置程序OEP4.测试dump出来的exe5.方法总结测试的exe和添加了shellcode的exe:链接&…

【论文简述】PVSNet: Pixelwise Visibility-Aware Multi-ViewStereo Network(arxiv 2020)

一、论文简述 1. 第一作者:Qingshan Xu 2. 发表年份:2020 3. 发表期刊:arxiv 4. 关键词:MVS、3D重建、可见性、代价体、训练策略 5. 探索动机:ETH3D基准测试提供的图像包含强烈的视图变化,这就要求MVS…

刷题笔记4 | 24. 两两交换链表中的节点、19. 删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II

24. 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 输入:head [1,2,3,4] 输出&#xff1a…

JDBC概述二(JDBC编程+案例展示)

一(JDBC的编程步骤) 1.加载数据库驱动 加载数据库驱动通常使用class类的静态方法forName()来实现,具体实现方式如下: Class.forName(“DriverName”),DriverName就是数…

RuoYi-Flowable-Plus(代码生成)

RuoYi-Flowable-Plus搭建 若依所有扩展项目的代码生成功能都是一样的&#xff0c;RuoYi-Flowable-Plus为例来演示。 模块创建 1.创建新模块ruoyi-student2.编辑RuoYi-Flowable-Plus\pom.xml <dependency><groupId>com.ruoyi</groupId><artifactId>ruoy…

搭建Java环境

使用Java语言开发首先必须搭建好开发环境。 以windows 10为例&#xff0c;进行Java环境搭建分为以下几个步骤 1、下载并安装JDK 2、配置环境变量 1、下载并安装JDK 可以访问网站http://www.oracle.com/index.html进行SDK的下载&#xff08;因网站经常改版&#xff0c;这里就…

python 操作word库docx 增强接口

前言用python 的docx 库操作word完成一些自动化的文档生成工作&#xff0c;但有时候会遇到docx库提供的操作无法直接满足业务上的需求&#xff0c;需要对其进行一些扩展。接口完善实现在指定的文字后面插入指定的文字任务&#xff1a;以下示例需要在文档中的所有 "人生苦短…