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

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算法解决单节点视频缓存的问题,还有抽奖系统的设计,大家可以大概说一下怎么设计的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

再探Java集合系列—ArrayList

适用于什么场景? 检索比较多的场景,例如学生成绩管理系统,老师对学生的成绩进行排名或查询操作 ArrayList有哪些特点? 1、ArrayList集合底层采用了数组数据结构,是Object类型 2、动态数组。ArrayList的默认初始容量…

西南科技大学(数据结构A)期末自测练习二

一、填空题(每空1分,共10分) 1、在线性表的下列运算中,不改变数据元素之间结构关系的运算是( D ) A、插入 B、删除 C、排序 D、定位 2、顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( B ) A.110 B.108 C.100 …

爱普生L3153变ET-2710修复

晚上还在加班,老婆发来消息说打印机故障了,通过网络不能访问 回家一下,三个灯(电源,网络,墨水)闪烁 重启多次没效果,问客服,说是存储错误,要送售后&#xff…

4.4-Docker bridge0详解

在Docker世界中,两个container是通过bridge0连接起来的。 首先,介绍一个命令:docker network ls 这个docker network ls明令会列举出来当前这台机器上docker有哪些网络。 先看一下bridge。 现在有一个容器flask-hello-docker,它是…

接手了一个外包开发的项目,我感觉我的头快要裂开了~

嗨,大家好,我是飘渺。 最近,我和小伙伴一起接手了一个由外包团队开发的微服务项目,这个项目采用了当前流行的Spring Cloud Alibaba微服务架构,并且是基于一个“大名鼎鼎”的微服务开源脚手架(附带着模块代…

IDEA编译器的永久试用设置与基本使用

参考视频: 最通俗易懂的JDK、IDEA的安装使用权威指南 2023新版前端Web开发HTML5CSS3移动web视频教程,前端web入门首选黑马程序员 文章目录 一.安装包下载与安装二.设置IDEA永久试用三.IDEA的基本试用0.IDEA管理Java程序的结构1.工程创建2.模块创建3.包创…

Anolis 安装 Conda 和 YoloV8

Anolis 安装 Conda 和 YoloV8 一 Conda 和 YoloV8 安装1.Conda 下载与安装2.YoloV8 安装 二.测试 一 Conda 和 YoloV8 安装 ## 1. anolis 安装 cv2 依赖库 yum install -y mesa-libGL.x86_64 ## Anaconda https://repo.anaconda.com/archive/ ## 重启终端查看版本 conda --ver…

Linux处理文件常见命令

目录 1 cp 2 rm 3 zip与unzip 3.1 zip 3.2 unzip 4 cd 5 ls 6 chmod 7 scp 7.1 文件在你操作的机器上,你要传给另一个机器 7.1.1 文件 7.1.2 文件夹 7.2 文件在另一个机器上,你要把文件搞到你操作的机器上 7.2.1 文件 7.2.…

上海亚商投顾:沪指震荡反弹 汽车产业链掀涨停潮

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡反弹,北证50指数跌超4%,近50只北交所个股跌超10%。 新能源车产业链掀…

leetCode 216.组合总和 III + 回溯算法 + 剪枝 + 图解 + 笔记

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 解释…

Istio新架构揭秘:环境化Mesh

自问世以来,Istio因其使用Sidecar(可编程代理与应用容器一同部署)而备受认可。这种架构选择使Istio用户能够享受其好处,而无需对其应用进行 drast 改变。这些可编程代理,与应用容器紧密部署在一起,因其能够…

Langchain-Chatchat学习

参考:Langchain-Chatchat 阿里通义千问Qwen 保姆级教程 | 次世代知识管理解决方案 - 知乎 (zhihu.com) 中文LLM生态观察 模型 就开源的部分而言,从一开始的MOSS[1] ChatGLM[2] ChatGLM2 [3] 到后来的 baichan [4] 基于LLama2 微调的 中文LLama2 [5] …

Blender学习笔记:小车狂奔动画

文章目录 路旁小树汽车尾气移动 教程地址:八个案例教程带你从0到1入门blender【已完结】 小车建模 路旁小树 1 添加摄像机,在小车下面拉一个平面,覆盖到摄像机的观察视窗。复制一层平面,收窄变成小车两侧的路面,编辑…

项目:基于UDP的网络聊天室

项目需求: 1.如果有用户登录,其他用户可以收到这个人的登录信息 2.如果有人发送信息,其他用户可以收到这个人的群聊信息 3.如果有人下线,其他用户可以收到这个人的下线信息 4.服务器可以发送系统信息 服务器代码: #i…

环境监测传感器守护我们的地球

随着人类活动的不断增加,环境问题日益凸显。为了更好地保护我们的地球,环境监测成为了一项非常重要的任务。而在这个领域,传感器技术发挥着至关重要的作用。今天,我们就来聊聊WX-WQX12 环境监测传感器。 环境监测传感器是一种能够…

IDEA 配置 gradle6.8.3 解决导入gradle项目下载太慢问题

由于平时用的是springboot 2.7 这里下载gradle-6.8.3 Gradle官网地址:https://services.gradle.org/distributions/ 1.下载gradle后,配置环境变量 GRADLE_HOME {gradle 文件路径} GRADLE_USER_HOME {jar下载路径,可以放maven jar保存路径…

浅谈安科瑞网络电力仪表在斯里兰卡某项目的应用

摘要:安科瑞APM系列网络仪表适用于高低压柜,进线以及出线处的全电量测量及监测。 Absrtact: APM series of network power meter are suitable for full power measurement and monitoring of high and low voltage cabinets, incoming and outgoing li…

Java小游戏 王者

GameFrame类 所需图片: package 王者荣耀;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayList…

【论文复现】RoSteALS: Robust Steganography using Autoencoder Latent Space-2023-CVPR

一定要按照dockerfile,requirements.txt和requirements2.txt配置环境 需要补充的库: pip安装:omegaconf slack slackclient bchlib (0.14.0版本) einops imagenet-c conda安装:scikit-image,matplotlib 按照作者git的…

浅谈安科瑞电力监控系统在百事亚洲研发中心的应用

摘要:介绍百事亚洲研发中心,采用智能电力仪表、采集配电现场的各种电参量和开关信号。系统采用现场就地组网的方式,组网后通过现场总线通讯并远传至后台,通过Acrel-2000型电力监控系统实现配电所配电回路用电的实时监控和管理。 …