自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (1)
  • 收藏
  • 关注

原创 短链接跳转逻辑

摘要 短链接系统采用分表设计,以gid为分片键,通过路由表建立短链接与gid的映射关系。跳转流程包括缓存查询、数据库访问和路由表查找。系统面临缓存击穿和穿透问题,解决方案包括: 缓存击穿:热点数据永不过期、预加载和分布式锁(双重判定锁优化) 缓存穿透:组合方案(布隆过滤器+空值缓存+锁机制) 采用Sentinel进行限流、熔断和降级 新增数据时进行预热处理 系统通过多种技术手段确保高并发下的稳定性和性能,同时平衡用户体验与系统资源消耗。

2026-01-26 15:11:28 789

原创 短链接修改之写锁

本文探讨了短链接系统中修改gid时的锁机制选择问题。首先解释了为何需要判断gid修改:因为gid作为分表键,其变更会导致数据存储位置改变,可能引发读扩散问题。其次分析了修改gid时加锁的必要性:防止并发修改导致监控数据失真。重点讨论了选择读写锁而非分布式锁的原因:1)分布式锁会降低系统性能;2)读写锁允许多个读操作并发执行,提升用户体验。最后展示了读写锁的具体实现代码,通过Redisson获取写锁来确保修改操作的原子性,同时保持读操作的并发性。这种设计在保证数据一致性的同时兼顾了系统性能和用户体验。

2026-01-24 22:07:59 330

原创 缓存与数据库一致性问题

短链接修改场景中,为提升高流量下的系统性能引入 Redis 缓存,但数据库与缓存的修改操作不具备原子性,并发环境下易引发数据一致性问题;因短链接修改并发量低,项目未采用 Canal+Binlog 的最终一致性方案,而是选用实现简单、无额外中间件依赖且实时性较好的 “先修改数据库再删除 Redis 缓存” 方案,该方案虽存在数据库修改后、缓存删除前窗口期读取旧数据的短暂不一致问题(业务层面可容忍),但在海量并发场景下易引发缓存击穿、雪崩,不再适用,此场景需改用 Canal 订阅 MySQL Binlog 监听

2026-01-24 00:03:42 377

原创 如何解决海量数据存储

本文介绍了分库分表技术在海量数据存储中的应用。针对数据库性能瓶颈、存储限制等问题,提出采用水平分表方案。详细阐述了分库分表的两种模式(垂直和水平)及其应用场景,重点说明了分片键的选择策略。以短链接项目为例,解释了gid作为分片键的原因,并设计了路由表解决查询问题。项目采用ShardingSphere-JDBC框架,通过配置文件实现16张分表,预计可存储3.2亿条数据。该方案有效提升了系统的可扩展性和并发处理能力,为大数据量场景提供了可行的技术解决方案。

2026-01-21 18:32:22 678

原创 布隆过滤器

布隆过滤器是一种高效判断元素是否存在的数据结构,通过位数组和哈希函数实现。其核心特性是判断不存在则一定不存在,判断存在则可能存在误判。相比Redis的Set结构更节省内存,适合大规模数据场景。使用时需引入Redisson依赖并配置初始化参数。虽然能有效拦截已存在数据的查询请求,但对不存在数据的恶意攻击仍需配合分布式锁和风控系统防御。布隆过滤器无法删除数据,可通过额外维护删除集合或改用布谷鸟过滤器解决,但会增加复杂度。在性能上,布隆过滤器比分布式锁实现唯一性约束快约6倍,但各有适用场景。

2026-01-20 21:40:25 879

原创 短链接的创建---MurmurHash

本文介绍了短链接创建的技术实现方案。核心流程包括:1)使用MurmurHash算法将原始链接转为32位数字;2)通过base62编码转换为短码。文章对比了不同进制方案的优劣,推荐使用58进制提升用户体验。针对可能出现的冲突问题,提出原始链接拼接UUID的解决方案。作者分析了采用哈希处理的原因:统一短码长度和降低碰撞概率。相比MD5等加密算法,MurmurHash在性能和冲突概率方面更具优势,速度约为MD5的10倍。该方案在保证短链接唯一性的同时,兼顾了处理效率和用户体验。

2026-01-19 16:14:37 778

原创 深入理解操作系统之线程

一个应用通常要处理很多任务,比如一个Web浏览器,可能需要同时处理文 字和图片,这些同时执行的任务可称为 “执行流” ,我们不希望它们是顺序执行的。在web中我们不能说让上述任务处理完文字再处理图片吧,这是不符合用户的使用的。因此需要多任务并发执行早期每个执行流就是创建子进程,但是进程的切换是要消耗巨大的时空资源的,所以把一个应用装进进程中,进程内部的执行流就是线程。* Athreadis a basic unit(单元) of CPU utilization(利用、使用);

2023-10-16 16:44:41 632 3

原创 深入理解操作系统- - 进程篇(1)

进程是一个拥有cpu使用权的进行计算任务的基本单位。进程是一个程序的一次执行过程能完成具体的功能是在某个数据集合上完成的执行过程是可并发的进程是资源分配、保护和调度的基本单位。

2023-09-30 20:34:40 655

原创 Smart Community(1)之设计规范

通过前面大数据开发相关知识的学习,准备做一个项目进行练习---我给他起了一个响亮的名字:基于HadoopHA的智慧社区服务平台。

2023-09-16 21:12:10 611

原创 zookeeper案例

先在集群上创建/servers 节点(用于存储连接的服务器的主机和该服务器的节点数)相当于zookeeper集群 创建类对象该类为我们创建的服务端类: 获取zookeeper连接:自己创建连接方法: 让后server对象在main函数中调用注册是需要注册到zookeeper集群的/servers路径下,需要指定参数进行创建(3)业务逻辑(睡眠):服务端代码如下:客户端:(1)获取zookeeper的连接: 先创建客户端对

2023-08-13 19:55:14 2068 9

原创 zookeeperAPI操作与写数据原理

需要在项目的 src/main/resources 目录下,新建一个文件,命名为“log4j.properties”ZooKeeper zkClient ---表示要创建的客户端 申请为全局变量有助于后边各方法的调用。由于监听器是调用一次只能使用一次,不能实时监听,所以我们要在初始化方法里添加监听。@Befor注解在此不在解释不会可看本人前面文章(Java注解篇)重写了process方法,这个方法在不使用监听器的时候可以不写代码。在开启监听器的时候(可以听后续监听器API)

2023-08-09 22:06:43 890 1

原创 zookeeper安装教程及其基本使用

SID为1、2、4的机器投票情况(分别为EPOCH,ZXID,SID ): (1,8,1) (1,8,2) (1,7,4)此时服务器1票数为0票,服务器2票数为2票,没有半数以上结果,无法选举出leader,服务器1,2状态保持LOOKING。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。对于第一种已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连 接,并进行状态同步即可。服务器1投自己一票。

2023-08-04 22:56:45 4454 1

原创 Zookeeper入门介绍

Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。(上述是比较官方的答案,而我的理解是zookeeper相当于酒店的前台,有信息存储功能和通知功能,好比住房客人的信息的存储是在前台,当你酒店时间快到的时候会提醒你,也是前台的工作)zookeeper=文件系统+通知机制。

2023-07-29 21:22:06 1564

原创 hive之文件格式与压缩

为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。Hive表数据的存储格式,可以选择text file、orc、parquet、sequence file等。ORC(Optimized Row Columnar)file format是Hive 0.11版里引入的一种列式存储的文件格式。ORC文件能够提高Hive读写数据和处理数据的性能。我们文件一般都是一个二维表,行式存储就是以一行数据为一个单位,存储在相邻的位置,列示存储是以一列数据为单位,一个单位内的数据放在相邻的位置。

2023-07-23 18:25:59 1592

原创 hive之存储优化

从这里开始就是hive调优阶段,怎么让hive跑的更快。分区表和分桶表都是从存储方向进行优化。

2023-07-21 22:22:35 868

原创 Hive自定义函数

本文章主要分享单行函数UDF(一进一出)现在前面大体总结,后边文章详细介绍自定义函数分为临时函数与永久函数需要创建Java项目,导入hive依赖创建类继承GenericUDF(自定义函数的抽象类)(实现函数)打成jar包,传到服务器上将jar包添加到hive的class path上临时生效通过hive创建函数与Java类建立连接。

2023-07-17 17:04:40 2418

原创 Hive之函数篇(使用函数看这篇足够了)

时间戳:我们常说的时间戳是unix时间戳----指从1970年1月1日00:00:00(UTC--世界协调时间,便于统一时区---可以认为是0时区)起算的秒数,它用于表示某个时间点相对于UNIX纪元时间的时间差。完整函数有三个参数,参数1:字符串 参数2:从什么位置开始截取(从1开始,正数表示从左往右数数,找到指定位置,负数表示从右往左数数,从-1开始,找到指定位置)参数3:表示截取的字符数,不写默认截取到最后。参数2:传入的是需要查找的位置(加一个$(指代的前边传入的字符串).符号)

2023-07-10 16:58:37 2369 3

原创 学习机组过程中的疑难问题与解决 -----(1)

8的补码是1000,因为在计算机中,负数通常使用补码来表示。首先,我们需要了解补码的定义。正整数的补码与其二进制原码相同,而负整数的补码是将其对应的正整数的补码取反后再加1。对于-8这个负整数,它的绝对值的二进制原码是。

2023-06-24 19:40:50 3690 7

原创 hive之DML操作

B的表达式说明如下:‘x%’表示A必须以字母‘x’开头,‘%x’表示A必须以字母‘x’结尾,而‘%x%’表示A包含有字母‘x’,可以位于开头,结尾或者字符串中间。连接还有内连接,左外连接,右外连接,满外连接,出现上述不同种连接主要是根据在两个表进行连接的时候出现不匹配的数据的处理情况而区分的。join是横向连接形成一张虚拟表,在连接的时候有等值连接也有不等值连接,而且在连接的时候要有相同的字段进行相连。如果A和B都为null或者都不为null,则返回true,如果只有一边为null,返回false。

2023-05-15 16:06:47 955 5

原创 Hive之DDL

需要注意的是:修改数据库location,不会改变当前已有表的路径信息,而只是改变后续创建的新表的默认的父目录。加上该关键字就是创建外部表的意思(内部表也叫管理表:管理表意味着Hive会完全接管该表,包括元数据和HDFS中的数据,外部表:而外部表则意味着Hive只接管元数据,而不完全接管HDFS中的数据。该语法允许用户利用select查询语句返回的结果,直接建表,表的结构和查询语句的结构保持一致,且保证包含select查询语句放回的内容。在创建的时候没有指定路径(hdfs的存储路径)会使用默认路径。

2023-05-09 16:28:40 1051 39

原创 hive之入门配置

学习hive之路就此开启啦,让我们共同努力。

2023-05-04 19:25:59 4521 29

原创 Scala之模式匹配与隐式转换

当编译器第一次编译失败的时候,会在当前的环境中查找能让代码编译通过的方法,用于将类型进行转换,实现二次编译。

2023-04-26 19:29:53 1554 19

原创 Scala之集合(3)

总结:上述方法理解简单,但是比较消耗内存 当每个字符串的次数较大时 是非常消耗内存的,消耗时间。现在的集合是Map集合,需要排序所以要转换成List再调用排序函数(sortBy方法)方法3是在我们分组的基础之上对value进行调用归约函数,直接对value进行累加。在集合的后边加上.par后 变成了并行集合 使用多线程打印(同时也是乱序的)(2)将集合中方法都改变结构变成二元组(value=1)(1)对集合进行切割并且转换成元组(key,value)(2)对现在的二元组进行分组(相同的key)

2023-04-24 17:13:13 1496 26

原创 Scala之集合(2)

按照单词出现的次数排序:这样是需要自定义的 调用sortBy()函数(By---什么方式)设置返回类型就是按照什么排序(匿名函数)按照单词出现的次数反转排序:通过sortBy()源码可知他是采用了柯里化写法(闭包---把上层变量定义成常量传给下一层)上述代码在第一次传入参数返回的是以Int类型的集合 在对他进行封装成常量传递给下层 所以 在柯里化的第二个()的时候在设置类型的时候要设置Int类型。

2023-04-22 11:48:38 1864 30

原创 Scala之集合(1)

不可变集合:set集合特点:无序,不重复对set集合无序的理解:set集合的无序是指在使用append等方法给集合添加元素的时候所添加的元素的顺序是不可预测的,并且不能按照添加顺序进行遍历(存储位置是不一定的)Set集合的无序性是由它的实现方式所决定的。通常,Set集合的实现方式采用了哈希表这种数据结构,其中元素被散列到桶中,不同的元素可能被散列到同一个桶中,因此添加的顺序不能保证元素的顺序。set集合提供了SortedSet集合是有序的(放入2,3,1,4会按照1,2,3,4进行存储)SortedSet写

2023-04-18 16:46:38 1739 18

原创 Scala之面向对象(2)

Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概 念)。但是为了能够和Java语言交互(因为Java中有静态概念),就产生了一种特殊的对象 来模拟类对象,该对象为单例对象。若单例对象名与类名一致,则称该单例对象这个类的伴 生对象,这个类的所有“静态”内容都可以放置在它的伴生对象中声明。

2023-04-14 20:20:23 1598 21

原创 Scala之面向对象

导包是不支持嵌套的(导包后只能用它下边的类和对象,不能再用它下边的包,如果想使用它下边包中的方法,就需要使用 . 但是当我们导包直接导入它下边的包 就可以直接调用,不需要用 . 来使用)在Scala中包也是面向对象的,只要在包的内部(只要在内部都可以,内层的嵌套也可以),都可以直接调用包对象的属性和方法。如果包有嵌套,会出现覆盖的情况,则会调用距离最近的包的属性与方法(包距离最近则会后调用,会覆盖先前调用的)当类很多时,可以很好的管理类。下图是我在类下边建的包,和正常的包一样使用。

2023-04-11 20:15:41 1471 13

原创 Scala之函数式编程

方法--是在类中表示(面向对象)-----伴生对象中的方法(相当于静态方法) 或者在伴生类中定义方法。(4)如果(所有)参数(都)只出现一次,则参数省略且后面参数可以用_代替(但是只剩下_是避不可以的)函数是支持嵌套的但是并不支持函数的重载和重写(重载和重写是针对的类中的方法而言)(7)如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加。(8)如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略。)返回值类型如果能够推断出来,那么可以省略(和返回值类型一起省略)

2023-04-09 19:38:54 3567 19

原创 Scala之基础入门

2)Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有 的Java类库,实现两种语言的无缝对接。4)Scala在设计时,马丁·奥德斯基是参考了Java的设计思想,可以说Scala是源于Java,同时马丁·奥。只要在学习Scala的过程中,搞清楚Scala和Java相同点和不同点,就可以快速的掌握Scala这门语言。德斯基也加入了自己的思想,将函数式编程语言的特点融合到JAVA中, 因此,对于学习过Java的同学,(多范式,就是多种编程方。

2023-04-06 19:37:14 718 3

原创 Hadoop之Yarn篇

(7) NodeManger创建容器,任何任务的执行都是在容器中执行的(容器中有cpu+ram--网络资 源),并且在容器中启动了一个MRAppmaster。(3): 提交job运行所需要的资源(Job.spilt Job.xml wc.jar )(按照(2)中提供的路径进行上传)(10) 领取任务,创建MapTask容器(NodeManager)(cpu+ram+jar)(4) 资源提交完毕后,申请运行mrAppMaster (程序运行的老大)

2023-03-29 14:43:02 2227 10

原创 hadoop之MapReduce框架原理

MapReduce是分为两个阶段的,MapperTask阶段,和ReduceTask阶段。Mapper阶段,可以通过选择什么方式(K,V的选择对应不同的方法)来读取数据,读取后把数据交给Mapper来进行后续的业务逻辑(用户写),让后进入Reduce阶段通过Shuffle来拉取Mapper阶段的数据,让后通过OutputFormat(等方法)来写出(可以是ES,mysql,hbase,文件)

2023-03-27 20:34:18 1739 22

原创 Hadoop之Mapreduce序列化

反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。为什么要序列化:一般来说,“活的”对象只生存在内存里,关机断 电就没有了。而且“活的”对象只能由本地的进程使用,不能被发送到网络上的另外一台计算机。然而序列化可以存储“活的”对象,可以将“活的”对象发送到远程计算机。在开发过程中,基本序列化类型不能满足所有需求,比如在Hadoop框架内部传递一个bean对象不是基本的数据类型(某个类)----没有对应的Hadoop类型那么。

2023-03-20 19:43:51 4513 14

原创 MapReduce之WordCount案例实操

本次测试为本机测试,通过maven导入Hadoop的包来进行的 输入输出文件的路径为本地路径,而我们在企业开发中一般是在windows上编写,打包发送到Linux上,如果执行任务较多 后期会编写脚本执行程序。准备工作 创建工程后先改maven仓库的地址(创建工程后默认为idea自带的仓库**提示 在你打开别的项目后,在你重新打开本项目的时候,maven会改回idea的maven)让后在 项目的src/main/resources目录下,新建一个文件,命名为“log4j.properties”

2023-03-18 15:14:12 1693 13

原创 HDFS的API操作

使用注解@Test进行测试,调用的还是Linux中的mkdir 让客户端连接对象进行调用(**注意 这里 客户端连接对象要在类的上方使用private进行定义,方便在下方方法中的调用)返回值:返回的形式是迭代器(迭代器是一种设计模式,官方话不多数,说一下自己的理解可能不贴切---个人认为迭代器就像把数据封装成一个数据库一样,包含各种属性,每一条信息就是一个元组)文件移动分为很多,根据参数的不同,做出不同的操作,都是调用rename方法。文件和文件夹的判断也分为两种,一种是可迭代的,一种是不可迭代的。

2023-03-15 15:21:57 2558 7

原创 Hadoop入门常见面试题与集群时间同步操作

所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。systemctl is-enabled ntpd ----设置开机是否启动ntpd服务。systemctl start ntpd ------开启时间服务器。systemctl status ntpd ------检查时间服务器是否打开。,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。增加内容如下(让硬件时间与系统时间一起同步---硬件时间更准确)(能连接外网),可以。

2023-03-11 16:05:03 875

原创 hadoop的补充配置与常用脚本

hadoop102:10020是表示历史服务器配置在那台服务器上,并且内部端口为10020(集群内部所用的访问端口)(启动历史服务器之前可以先关闭所有服务,在重启Hadoop服务,在启动历史服务器)创建完毕后要对他的权限进行修改(赋予脚本执行权限),不然权限不足,不是可执行脚本。每个服务器上都有一个日志,你想看集群上的日志就需要对他进行聚集到hdfs上。mapred --daemon 启动守护进程(或者是在后台启动)为了查看程序的历史运行情况,需要配置一下历史服务器。

2023-03-10 13:57:20 1148 5

原创 Hadoop崩溃处理

2.删除集群上每个服务器的data和logs目录(删除历史数据)进入hadoop的安装路径(etc,bin目录不受破坏)以上操作完成格式化(数据清空)1.杀死进程(停止进程)

2023-03-09 18:43:32 231 1

原创 大数据技术之Hadoop集群配置

作者简介:大家好我是小唐同学(๑>؂

2023-03-05 13:38:05 2836 2

原创 hadoop的运行模式

目录hadoop的三种运行模式区别:完全分布式运行模式步骤:一,虚拟机准备:二,编写集群分发脚本xsync (1)scp定义: (2)基础语法:(1)按照上述语法进行拷贝jdk(2)按照上述语法拷贝Hadoop(第二种方法)(3)拷贝也可以让Hadoop103操作 从Hadoop102中拷贝入Hadoop104 三,rsync远程同步工具rsync语法:ssh免密登录:免密登录原理:​编辑ssh免密登录实操:1.准备三台客户机(关闭防火墙,静态IP,主机名)2.安装jdk3.配

2023-03-02 16:57:49 3656 6

原创 next_permutation函数讲解

在我们的日常刷题中,总会遇到一些题是不会的,在不会的时候我们首先想到的是看答案,在算法题遇到不会时候也是这样,不会先看题解,在题解中学会思路,方法,师夷长技以制夷,最后增加自己的本领。next_permutation函数(bool类型)是STL中计算排列组合的方法,在比赛或者练习过程中可以使用,next_permutation函数的参数是数组的区间坐标(两个,始(如:a+0)末(如:a+n)n个数)

2023-01-14 21:41:42 642 8

c语言职工信息管理系统课设

本资源是C语言课设职工信息管理系统的代码,适合刚刚上手c语言的小伙伴,主要是让同学们了解一下如何把C语言知识进行整合使用,并且给对于C语言课设无从下手的同学指引方向。

2022-06-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除