Redis--Lesson01--NoSQL简史

news/2025/3/9 18:02:27/文章来源:https://www.cnblogs.com/5ran2yl/p/18760631

单击MySQL的演进

单机MySQL

在早期互联网时代,也就是90年代以前,一个基本的互联网的访问量不会太大,可以说很多国家和地区都还没有配备互联网,所以在这种情况下的互联网格局使用的数据存储格式就是简单的单机模式,即使用一个数据库的如MySQL库就可以满足日常的数据读写

 如上图,APP通过数据访问层直接访问数据库中的数据,读写操作都是直接操作数据库,虽然MySQL的读写操作会很慢,但是访问量小,读写数据小,都是可以实现的

但是随着互联网的技术发展,单机MySQL的弊端很快暴露出来了:

  1. 数据量太大(大数据时代),单机的容量有限
  2. 太大的数据量使用B+ Tree结构所产生的索引文件也很大
  3. 读写混合,读写都在一个机器上,单机承受不住

Memcached(缓存)+MySQL+垂直拆分

 垂直拆分对应的关键词就是读写分离:将原来的单机MySQL演变为多机,同时将写文件的操作有一部分机器完成,然后同步给其它的MySQL机器,读操作时就去读机器上查询

同时还映入了缓存机制,当在真实的业务中我们会发现,其实有80%的概率的数据库操作都是在进行读操作,所以大部分的压力还是读问题,频繁的I/O操作还是会压力到数据库,故而使用缓存机制,将已经查询出的记录先缓存在缓存中,等到有相同的查询操作时候会直接返回,避免多次相同的I/O操作

分库分表+水平拆分+MySQL集群

随着互联网的持续发展,尤其是在数据爆炸的时代,使用简单的缓存已经容纳不下数据的爆发式增长了,此时再将业务放在一个库或者一个表中检索起来会十分费劲,故而将数据库优化也迫在眉睫

 数据库的水平拆分,也称为横向拆分或分区(Partitioning),是一种将单个数据库中的数据分布到多个数据库实例的技术。这种方法主要是为了解决单一数据库在面对大量数据和高并发访问时可能出现的性能瓶颈问题。通过水平拆分,可以提高系统的扩展性和性能。

其中最明显的操作的热词就是分库分表;原来 一个项目只是用一个数据库,如图书 管理系统,它的功能模块会包含登录,租赁,查询,购买等,像这样的业务都会从一个数据库拆分成几个数据库,而同样的分表操作会使用去耦合的操作将多个字段的数据表分为几个表,减小单表字段降低耦合

MySQL集群通常指的是通过一组互联的MySQL服务器共同工作,以提供高可用性、高性能和扩展性的数据库解决方案。

1. MySQL NDB Cluster
这是MySQL官方提供的一个真正的分布式数据库解决方案,基于NDB存储引擎(Network Database)。NDB Cluster支持自动分片和数据冗余,可以在多个节点之间自动复制数据,确保即使某个节点出现故障,整个系统仍然能够正常运行。它特别适合需要高可用性和可伸缩性的实时应用。

2. 主从复制(Master-Slave Replication)
在这种模式下,数据从一个主服务器复制到一个或多个从服务器。主服务器处理所有的写操作,而从服务器则可以处理读请求。这种方式主要用于提高读性能和数据备份,并不直接增加系统的写入能力。如果主服务器发生故障,可以选择其中一个从服务器提升为主服务器继续服务。

3. 主主复制(Master-Master Replication)
与主从复制不同的是,主主复制中所有节点都可以同时接受读写请求。这种方式可以提高写入性能,但需要解决并发控制和冲突解决的问题,设计复杂度较高。

4. 分库分表(Sharding)
当单个MySQL实例无法满足需求时,可以将数据水平拆分到多个数据库实例中。每个实例只管理部分数据,这样不仅提高了性能,还增强了系统的可扩展性。然而,这种方法增加了系统的复杂性,尤其是在跨库查询和事务管理方面。

如今的系统架构

 如今的系统架构是错综复杂的,它不仅提升读写效率还从安全,容灾,负载,效率上各个方面都有所突破,但面临的就是技术不断走高,会出现大部分的投入都在技术和基础设施建设上了

 NoSQL

什么是NoSQL?

NoSQL = Not Only SQL(不仅仅是SQL):泛指非关系型数据库

特点:

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

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

3.数据类型是多样型的(不需要事先设计数据库,如果数据量十分大的表,设计会很麻烦【关系型数据库】)

4.传统RDBMS和NoSQL

传统的RDBMS

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

NoSQL

  • --不仅仅是数据
  • --没有固定的查询语言
  • --键值对存储,列存储,文档存储,图形化数据库
  • --最终一致性
  • --CAP和BASE (异地多活)

大数据时代的3V(主要是描述问题):海量(volume),多样(Varlety),实时(Velocity);大数据时代的3高(主要是对程序的要求):高并发,高可拓展,高性能

NoSQL的四大分类

KV键值对

  • 新浪:Redis
  • 美团:Redis+Tair
  • 阿里,百度:Redis+memecache

文档数据库(bson格式和json一样)

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

列存储数据库

  • HBase
  • 分布式文件系统

图关系型数据库

使用图结构存储数据,一般用于存储关系网络

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel的快捷键

1、填充序号1~1000(删除后,序号会自动更新) (1)首先在左上角的位置框中输入A1:A1000,然后按Enter回车健,即可选中A1到A1000的单元格。(2)然后在函数框中输入=ROW(),按Ctrl + Enter即可,即可填充1-1000。 本文来自博客园,作者:业余砖家,转载请注明原文链接:http…

AutoGLM: Autonomous Foundation Agents for GUIs

AutoGLM: 针对Web和手机,基于ChatGLM,具体细节并不清楚。主要内容 提出AUTOGLM,集成了一套全面的技术和基础设施,以创建适合用户交付的可部署代理系统。首先,为GUI控制设计合适的"intermediate interface"是至关重要的,可以实现规划和定位的分离。其次,开发了…

Vulnhub-election靶机

总结:本靶机给了很多目录,对于信息收集考察的比较严格,给了一个数据库,很多时候容易陷进去,拿到用户权限登录后,也需要大量的信息收集,虽然可以在数据库里找到root和密码,但是不是靶机本身的,最终利用suid发现可疑目录,查找日志后利用脚本提权一、靶机搭建 选择扫描虚…

[HDCTF 2023]double_code _wp

其实这道题的加密函数我是手翻出来的,但是做完之后了解到这是一个sheelcode 实际上就是跑病毒的代码 WriteProcessMemory 用于向指定进程中写入数据,写入一个缓冲区中的数据到另一个进程指定的内存地址中。 函数接受的参数包括要写入的进程句柄,要写入的内存地址,要写入的…

VisionPro添加显示标签(二维码)简单版

!!!——!!! 咱们先展示效果,这个显示的是二维码的信息1.首先呢,你先添加工具 CogIDTool ,工具里我是这么设置的,如果你自己添加的码跟我的不一样,左边几个都运行看看2.现在可以添加脚本了,我接触的都是第二个C#高级脚本,下边是C#高级脚本演示 1)先创建 1个标签2)…

初步学习Android studio

下载安装了Android studio,并在其中下载好了gradle,在模拟手机中实现helloworld

2025低空经济eVTOL行业研究报告42份汇总解读|附PDF下载

原文链接:https://tecdat.cn/?p=40459在科技与交通领域加速融合的当下,低空经济正凭借其独特优势,逐步成为全球经济发展的新焦点。电动垂直起降飞行器(eVTOL)作为低空经济的核心要素,其发展态势备受瞩目。本报告汇总洞察基于文末42份低空经济行业研究报告的数据,报告合…

Prometheus服务的动态发现

prometheus服务的动态发现原文链接:https://blog.csdn.net/2302_79199605/article/details/136441386一、概述 ​ 目前,我们每增加一个被监控的节点,就需要修改prometheus的配置文件,然后重新加载prometheus服务,这种方式比较繁琐,每次新增、删除被监控节点都需要重新操…

AtCoder Beginner Contest 396(d和e)

题目链接d 题目分析 本题要求在一个简单连通无向图中,找出从顶点 1 到顶点 N 的所有简单路径(即不重复经过同一顶点的路径)中,路径上所有边的标签的异或值的最小值。 输入信息第一行包含两个整数 N 和 M,分别表示图的顶点数和边数,其中 2 ≤ N ≤ 10,N - 1 ≤ M ≤ N * …

实验1C语言开发环境使用和数据模型,运算符,表达式

实验1 代码:#include<stdio.h> int main() { printf(" 0 \n"); printf("<H>\n"); printf("I I\n");return 0; } task1 运行结果截图:实验2 代码:#include<stdio.h> int main(){ char ans1,ans2;printf("每次课前认真…

R语言NIMBLE、Stan和INLA贝叶斯平滑及条件空间模型死亡率数据分析:提升疾病风险估计准确性

全文链接:https://tecdat.cn/?p=40365 原文出处:拓端数据部落公众号 在环境流行病学研究中,理解空间数据的特性以及如何通过合适的模型分析疾病的空间分布是至关重要的。本文主要介绍了不同类型的空间数据、空间格点过程的理论,并引入了疾病映射以及对空间风险进行平滑处理…

android组件实现圆角

圆角实现步骤效果预览 要实现如图所示的圆角步骤在app/src/main/res/drawable新建样式文件如rounded.xml<?xml version="1.0" encoding="utf-8"?> <!--实现圆角边框--> <shape xmlns:android="http://schemas.android.com/apk/res/a…