大数据存储技术期中考点梳理

1.CAP理论

分布式系统的CAP理论:

首先将分布式系统中的三个特性进行如下归纳:

口(一致性(C):在分布式系统中的所有数据备份,在同一时刻是否有同样的值。(等于所有节点访问同一份最新的数据副本)

口可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写求。(对数据更新具备高可用性)

口分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在一定时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。高可用、数据一致是很多系统设计的目标,但是分区又是不可避免的事情,由此引出了

以下几种选择:

(1)CA without P

如果不要求P(不允许分区)则C(强一致性)和A(可用性)是可以保证的。但其分区不是你想不想的问题,而是始终会存在,因此 CA 的系统更多的是允许分区后各子系统依然保持 CA。

典型放弃分区容忍性的例子有关系型数据库、LDAP 等

( 2)CP without A

如果不要求A(可用性),相当于每个请求都需要在 Server 之间强一致,而P(分区)导致同步时间无限延长,如此 CP 也是可以保证的。很多传统的数据库分布式事务都属于这种模式,分布式锁也属于这种情况。

(3) AP wihtout C

要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。

在该证明中,Lynch对CAP的定义进行子更明确的声明:

C:一致性被称为原子对象,任何的读写都应该看起来是“原子”的,或串行的写后面的读一定能读到前面写的内容。所有的读写请求都好像被全局排序。

A:对任何非失败节点都应该在有限时间内给出请求的回应。(请求的可终止性)

P:允许节点之间丢失任意多的消息,当网络分区发生时,节点之间的消息可能会完全丢失。

2.Raft算法

在Raft 中,任何时候一个服务器可以扮演下面角色之一:

口 领导者:处理所有客户端交互、日志复制等动作,一般一次只有一个领导者

口 选民:类似选民,完全被动的角色,这样的服务器等待被通知投票。

口候选人:候选人就是在选举过程中提名自己的实体,一且选举成功,则成为领导者Raft 算丢分为2个阶段,首先是选举过程,然后在选举出来的领导人带领进行正常操作,比如日志复制等。

步骤展示:

  1. 任何一个服务器都可以成为一个候选者,它向其他服务器(选民)发出要求选举自己的请求

2)其他服务器同意了,回复 OK (同意)指令

此时如果有一个Folower服务器宕机,没有收到求选举的要求,则只要达到半数上的票数,候选人还是可以成为领导者的。

  1. )这样,这个候选者就成为领导者,它可以向选民们发出要执行具体操作动作的指令

4)如果一旦这个Leader宕机崩溃了,那么 Follower 中会有一个成为候选者,发出邀选举,相当于再次执行 1)~2)的步骤。总结:1)~2)是选举过程,3)是具体协同执行指操作的过程

3.Nginx的负载均衡策略

以Nginx为例,负载均衡有以下几种策略:

*轮询:即Round Robin,根据 Nginx 配置文件中的顺序,依次把客户端的 Web 请求分发到不同的后端服务器。

*最少连接:当前谁连接最少,分发给谁。

*IP地址哈希:确定相同IP 请求可以转发给同一个后端节点处理,以方便 session保持。

*基于权重的负载均衡:配置 Nginx 把请求更多地分发到高配置的后端服务器上,把相对较少的请求分发到低配服务器。

4.一致性Hash算法

一致性哈希算法是在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法。主要解决单调性(Monotonicity)和分散性(Spread)的问题。单调性简单描述是哈希的结果应能够保证原有已分配的内容可以被映射到原有缓冲中去,避免在节点增减过程中导致不能命中。

按照常用的 hash算法来将对应的 key 哈希到一个具有2^32次方个桶的空间中,即0~(232)-1的数字空间中。现在我们可以将这些数字头尾相连,想象成一个闭合的环形,如

在一致性哈希算法中,如果一台服务器不可用则受影响的数据仅仅是此服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间数据,其他不会受到影响,

一致性哈希的优点在于可以任意动态添加、删除节点,每次添加、删除一个节点仅影响一致性哈希环上相邻的节点。 为了尽可能均匀地分布节点和数据,一种常见的改进算法是引大虚节点的概念,系统会创建许多虚拟节点,个数远大于当前节点的个数,均匀分布到一致性哈希值域环上。这种增强型方案主要解决平衡性问题,所谓平衡性(Balance)是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。

5.缓存击穿、穿透、雪崩及解决办法

1. 缓存击穿(Cache Miss):

   - 定义: 缓存击穿指的是一个请求查询的数据在缓存中不存在,但在数据库中存在,导致该请求每次都要访问数据库,增加了数据库负载。

   - 解决办法:

     - 使用互斥锁(Mutex)或分布式锁,确保只有一个线程能够进入数据库查询操作,其他线程等待查询结果。

     - 设置短暂的缓存失效时间,避免短时间内多个请求同时查询数据库。

2. 缓存穿透(Cache Penetration):

   - 定义: 缓存穿透指的是请求查询的数据在数据库中不存在,每次查询都会穿透缓存直接访问数据库,导致数据库负载过高。

   - 解决办法:

- 缓存空对象(Null Object),即使数据库中不存在相应的数据,也将这种情况缓存起来,防止频繁的无效查询,设置空结果的过期时间会很短,最长不超过五分钟。

     - 使用布隆过滤器(Bloom Filter)等数据结构,预先过滤掉不存在于数据库中的请求,避免这些请求继续访问数据库。

    

3. 缓存雪崩(Cache Avalanche):

   - 定义: 缓存雪崩指的是缓存中的大量数据同时失效,导致请求直接访问数据库,造成数据库压力激增。

   - 解决办法:

- 构建多级缓存架构:nginx缓存 + redis缓存 +其他缓存(ehcache等)

      - 设置不同的失效时间,避免缓存同时失效,分散请求对数据库的冲击。

      - 互斥锁:

在第一个请求去查询数据库的时候对他加一个互斥锁,其余的查询请求都会被阻塞住,直到锁被释放,从而保护数据库。

降低吞吐量,应用时要慎重。

    

6.Memcached的内存管理机制

7.关系型数据库和非关系型数据库的优缺点分析

(1)关系数据库

优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持

劣势:可扩展性较差,无法较好支持海量数据存储,数据模型过于死板、无法较好支持Web2.0应用,事务机制影响了系统的整体性能等

(2)NoSQL数据库

优势:可以支持超大规模数据存储,灵活的数据模型可以很好地支持Web2.0应用,具有强大的横向扩展能力等

劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等

关系数据库和NoSQL数据库各有优缺点,彼此无法取代

关系数据库应用场景:电信、银行等领域的关键业务系统,需要保证强事务一致性

NoSQL数据库应用场景:互联网企业、传统企业的非关键业务(比如数据分析)

8.Redis的数据结构及常见应用

Redis(Remote Dictionary Server)是一种开源的内存数据库,它支持多种数据结构,包括字符串(Strings)、哈希表(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets),以及一些高级抽象数据类型如 HyperLogLog、Bitmaps 等。以下是一些常见的Redis数据结构及其应用:

字符串 (Strings):

存储字符串或二进制数据。

常见应用:缓存、计数器、分布式锁。

(字符串,整数,浮点数)

底层实现:int,SDS

哈希表 (Hashes):(map)

存储键值对的散列表。

常见应用:存储对象、用户信息、配置信息。

底层实现:ziplist和hashtable来实现

列表 (Lists):

存储有序的字符串列表。

常见应用:消息队列、最新消息列表、任务队列。

底层实现:linkedlist(双向链表)/ziplist(节省内存占用)

集合 (Sets):

存储无序、唯一的字符串集合。

常见应用:唯一值的存储、共同关注、好友关系。

底层实现:intset/hashtable

有序集合 (Sorted Sets):(zset)

与集合类似,但每个成员都关联一个分数,可以按分数排序。

常见应用:排行榜、范围查询。

底层实现:ziplist/skiplist+hashtable

HyperLogLog:

用于估计基数(集合中不重复元素的数量)。

常见应用:统计独立用户数量、UV(Unique Visitors)计数。

Bitmaps:

位图,可以进行位运算。

常见应用:标记用户是否在线、统计活跃用户。

地理空间索引 (Geospatial Index):

存储地理位置信息。

常见应用:附近的位置搜索、地理围栏。

发布/订阅 (Pub/Sub):

提供消息发布和订阅机制。

常见应用:实时通信、事件通知。

分布式锁:

使用字符串和原子操作实现分布式锁。

常见应用:防止多个客户端同时修改共享资源。

缓存:

将热点数据存储在内存中,提高访问速度。

常见应用:加速读取频繁的数据库查询、API调用。

见书本

9.Redis的持久化方式

Redis提供两种方式进行持久化,一种是 RDB持久化(原理是将Reids在在指定的时间间隔内将存中的数据库数据集快照写入磁盘),另外一种是 AOF(append only file)追加持久化(原理是将Reids的操作日志以追加的方式写入文件)。下面详细介绍这两种方式。

RDB持久化,该方式是指在指定的时间间隔内定时的将内存中的数据集快照写入磁盘,把内存中的数据保存到RDB文件中,是默认的持久化方式。 Redis快照的过程是,首先Redis Server(服务器)使用fork函数复制一份当前进程(父进程)的副本(子进程)。其次,父进程继续接收并处理客户端发来的命令,而子进程将内存中的数据写入硬盘中的临时文件。最后,当子进程写入完所有数据后会将RDB临时文件替换旧的RDB文件。

AOF持久化,追加持久化方式(Append Only File),AOF持久化方式会记录Redis客户端对服务器的每一次写操作命令,并将这些写操作追加保存到appendonly.aof文件中,在Redis服务器重启时,会加载并运行AOF文件里的命令,以达到恢复数据的目的。

见书本

10.Redis集群的演进

主从复制

哨兵模式

Redis Cluster集群

11.综合系统设计

这次考的是Hash算法解决单节点视频缓存的问题,还有抽奖系统的设计,大家可以大概说一下怎么设计的

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

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

相关文章

kafka开发环境搭建

文章目录 1 安装java环境1.1 下载linux下的安装包1.2 解压缩安装包1.3 解压后的文件移到/usr/lib目录下1.4 配置java环境变量 2 kafka的安装部署2.1 下载安装kafka2.2 配置和启动zookeeper2.3 启动和停止kafka 1 安装java环境 1.1 下载linux下的安装包 (1&#xf…

【经验总结】网络关闭但ECU没有休眠前如何网络唤醒

目录 前言 正文 1.网络休眠时的相关系统状态 2.网络休眠后重新唤醒网络需要做的准备工作

组合模式 (Composite Pattern)

定义: 组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示部分-整体的层次关系。这种模式创建了一种包含单个对象和组合对象的统一接口,使得客户端可以以统一的方式处理单个对象和组合…

刷题记录第三十五天-(KMP算法)找出字符串中的第一个匹配项的下标

KMP算法真是刷一次忘一次 #include<bits\stdc.h> using namespace std; void get_next(vector<int>& next, string s){int j0;next[0]0;for(int i1;i<s.size();i){while(j>0&&s[i]!s[j]){jnext[j-1];}if(s[i]s[j])j;next[i]j;} } int find(strin…

第19章JAVA绘图

19.1JAVA绘图类 绘图是高级程序设计中非常重要的技术 19.1.1Graphics类 Graphics类是所有图形上下文的抽象基类&#xff0c;它允许应用程序在组件以及闭屏图片上进行绘制 Graphics类封装了JAVA支持的基本绘图操作所需的状态信息&#xff0c;主要包括颜色&#xff0c;字体&…

快速了解Spring AOP的概念及使用

文章目录 1. AOP概念1.1 什么是AOP&#xff1f;1.2 什么是Spring AOP&#xff1f; 2. Spring AOP的使用2.1 引入Spring AOP依赖2.2 编写AOP程序 3. Spring AOP详解3.1 Spring AOP核心概念1. 切点&#xff08;Pointcut&#xff09;2. 连接点&#xff08;Join Point&#xff09;3…

AI模型推理(5)——实战篇(持续更新)

前言 本文主要通过实战的方式&#xff0c;记录各种模型推理的方法 模型训练 首先我们先使用Pytorch训练一个最简单的十分类神经网络&#xff0c;如下&#xff1a; import torch from torch import nn from torch.utils.data import DataLoader from torchvision import data…

如何运用AppLink平台中的数据连接器组件

AppLink平台组件组成 AppLink平台组件分成三个板块触发事件组件、基础组件和数据连接器 数据连接器组件里面有10个组件&#xff0c;目前也在不断新增更多的数据连接器&#xff0c;那他们在AppLink平台里的原理、触发动作以及怎么使用呢&#xff1f;接下来用MySQL和TimescaleD…

在线陪诊系统: 医疗科技的崭新前沿

在医学科技的快速发展中&#xff0c;在线陪诊系统正成为医疗服务领域的创新力量。通过结合互联网和先进的远程技术&#xff0c;这一系统为患者和医生提供了更为便捷、高效的医疗体验。本文将深入探讨在线陪诊系统的技术背后的核心代码和实现原理。 技术背后的关键代码 在线陪…

用于图像分类任务的经典神经网络综述

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

autojs-图片篇(一)

注释很详细&#xff0c;直接上代码 自动点击授予权限的操作 //安卓版本高于Android 9 if(device.sdkInt>28){//等待截屏权限申请并同意threads.start(function () {packageName(com.android.systemui).text(立即开始).waitFor();text(立即开始).click();}); }截图查相应位置…

开关电源做“做安规”请记住这 4 点!

1.定义 为了保证人身安全,财产,环境等不受伤害和损失,所做出的规定。 2.安规所涉及的要求 a.电击 b.火灾 c.电磁辐射 d.环境污染 e.化学辐射 f.能量冲击 g.化学腐蚀 h.机械伤害和热伤害 3.世界主要安规体系 a.IEC体系----以欧盟为代表 b.UL体系----以美国为代表…

55.跳跃游戏

原题链接&#xff1a;55.跳跃游戏 思路&#xff1a; 看代码注释 全代码&#xff1a; class Solution { public:bool canJump(vector<int>& nums) {int cover 0;if (nums.size() 1) return true; // 只有一个元素&#xff0c;就是能达到for (int i 0; i < co…

探索性因子分析流程

探索性因子分析的步骤&#xff1a; 接下来&#xff0c;通过一个案例演示因子分析&#xff08;探索性因子分析&#xff09;的各个步骤应该如何进行。 案例&#xff1a;欲探究我国不同省份铁路运输能力情况&#xff0c;收集到部分相关数据如下&#xff1a; 上传数据至SPSSAU系统…

echarts 水波图

echarts 水波图 安装 npm install echarts --save npm install echarts-liquidfill --save引入 import * as echarts from echarts; import echarts-liquidfill;html <div id"chart1" ref"chart1" class"chart1"></div>css .cha…

leetcode做题笔记1670. 设计前中后队列

请你设计一个队列&#xff0c;支持在前&#xff0c;中&#xff0c;后三个位置的 push 和 pop 操作。 请你完成 FrontMiddleBack 类&#xff1a; FrontMiddleBack() 初始化队列。void pushFront(int val) 将 val 添加到队列的 最前面 。void pushMiddle(int val) 将 val 添加到…

RequestContextHolder 类简介

RequestContextHolder 类简介 RequestContextHolder是Spring Framework中的一个类&#xff0c;用于在多线程环境中存储和访问HTTP请求的上下文信息。它允许在Spring应用程序中从任何位置访问当前请求的相关信息&#xff0c;如HTTP头部、会话数据等&#xff0c;而无需将请求对象…

C语言实现串的部分算法

一、简介 串&#xff08;string&#xff09;&#xff08;或字符串&#xff09;是由零个或多个字符组成的有序序列&#xff0c;一般记为 sa1a2....an s为串的名&#xff0c;用单引号括起来的时字符序列串的值&#xff0c;串中字符的数目n称为串的长度。 零个字符的串称为空串…

C语言--每日选择题--Day28

第一题 1. 设a和b均为double型变量&#xff0c;且a5.5、b2.5&#xff0c;则表达式(int)ab/b的值是&#xff08; &#xff09; A&#xff1a;6.500000 B&#xff1a;6 C&#xff1a;5.500000 D&#xff1a;6.000000 答案及解析 D 本题考查的是不同数据类型之间的变量进行运算时…

常见面试题-Redis 切片集群以及主节点选举机制

Redis 切片集群了解吗&#xff1f; 答&#xff1a; Redis 切片集群是目前使用比较多的方案&#xff0c;Redis 切面集群支持多个主从集群进行横向扩容&#xff0c;架构如下&#xff1a; 使用切片集群有什么好处&#xff1f; 提升 Redis 读写性能&#xff0c;之前的主从模式中&…