自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 minio元数据实现单独存储2

有人问我第一篇为什么不实现将元数据增删改查底层全部替换,详见第一篇。我本身属于一个很懒的人,能坚持写博客已属实不易,写博客也是想到哪写到哪,第一篇中minio元数据分离的实现代码非常简单,当然也可以全部元数据增删改查底层全部替换,但是需要大量测试,下面讲讲大概如何实现底层全部替换,以及我第一篇中的优缺点。

2023-11-09 20:43:18 222

原创 elasticsearch存储数据压缩

elk是流行的日志监控分析平台,但es占用存储空间过大,下面介绍几种压缩方案。压缩算法将LZ4改为Deflate,空间占用量可以下降10%。Elasticsearch统计的索引大小是整个索引所占空间空间的大小,整个索引包括很多文件,比如tim词典,tip词典索引,pos位置信息,fdt存储字段信息(_source实际存储的文件),等等。Elasticsearch中"codec": “best_compression” (也就是DEFLATE和LZ4压缩算法),是对fdt这个文件进行压缩。

2023-10-30 20:37:14 1090

原创 minio元数据实现单独存储

选择minio的原因,1.简单。2.我司存储达到50T的存储,要降低第三方成本,无专业人员维护,所以需要商业公司支持。需要改造元数据的原因是LOSF问题,造成minio访问毛刺过多。LOSF问题可点击此处了解。

2023-10-22 20:16:26 311

原创 minio分布式文件系统适用场景

需要注意的是,由于MinIO是一个分布式系统,强依赖网络通信和节点之间的数据同步,因此在网络分区或节点故障的情况下,MinIO可能会出现数据不一致的情况。MinIO的快照功能是基于存储桶的元数据和数据副本来实现的,快照创建时,MinIO会创建一个只读副本,该副本包含存储桶中所有对象的状态信息。通过使用MinIO的快照功能,您可以创建和管理对象存储桶中的数据快照。2).Eventual Consistency:在写操作完成之后,对同一对象的后续读取操作可能会返回稍旧的数据版本,但最终会收敛到最新的数据状态。

2023-09-23 14:13:56 263

原创 springboot redisTemplate.opsForValue().setIfAbsent返回null原理

此代码在org.redisson.spring.data.connection.RedissonConnection。springboot版本:spring-boot-starter-data-redis 2.1.6。redisson版本:redisson-spring-boot-starter 3.11.5。此代码在io.netty.util.concurrent.DefaultPromise。

2023-09-12 20:36:20 885

原创 postgresql实现全文搜索相似性搜索

若遇到相似性搜索,现在大家第一想到的首选肯定是es,但用es需要维护还需要在维护数据同步到es的中间件,还有可能遇到数据不同步问题等。若几千万数据或者几亿数据用postgresql完全足够,下面给出一个实例,因为postgresql很多中文插件或者拼音插件停止维护了,所以我们需要把分词后的中文或者拼音存储到pg。

2023-06-20 20:47:40 1144 1

原创 那些年使用mysql遇到的查询的坑

遇到过好几次这样的sql,,表里几千万数据,执行时间十几秒。,解决方案:强制走特定索引。

2023-05-28 19:36:55 118

原创 MySQL业务并发减数量,数量未减

这个时候session3继续在等锁,当session2提交后,session3被唤醒,restore cursor继续定位到rec3上。这个时候rec3已经被标记为删除,session3逐行读取next record,找到rec2后发现已经超过查找的上边界(500, max),然后停止查找。session3未找到匹配的数据,然后返回成功,未更新任何记录。

2023-05-24 07:26:51 416

原创 springmvc升级到springboot2踩的坑

springmvc升级到springboot

2023-05-23 20:19:13 795

原创 Hystrix Feign Ribbon设置单独接口的超时时间

3)、若设置了Feign 和 Ribbon 的超时时间只会有一个生效,规则:如果没有设置过 Feign 超时,也就是等于默认值的时候,就会读取 Ribbon 的配置,使用 ribbon 的超时时间和重试设置。2)、若设置了Hystrix的超时时间,不设置Feign 和 Ribbon 的超时时间,则以hystrix的超时时间为准,而Ribbon重试机制不会触发。1)、若只设置了Hystrix的超时时间,不设置Feign 和 Ribbon 的超时时间,则可以用以下方式设置单个接口超时时间。

2023-04-12 20:24:05 2140

原创 Mysql基础问题

3、utf-8编码 1个中文字符=3个字节 ,1个字节=8个位,一个英文字母字符存储需要1个字节,varchar(20)指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,每个字符最多占3个字节,最大长度不能超过21845【21845。3、设置的字符宽度只对数值长度不满足宽度时有效,如 d 字段 int(5),插入 1 时,长度不足 5,因此在左边补充 4 个零直到 5 位,但是插入 1234567890 时超过了 5 位,这时的显示宽度就起不了作用了。

2023-04-10 20:23:40 475

原创 监控体系划分

监控体系划分

2023-03-09 20:35:38 237

原创 RocketMQ的存储机制

RocketMQ的存储机制

2023-02-05 18:53:21 359

原创 Sentinel实现支持全局接口限流功能

Sentinel支持全局接口限流

2022-12-04 13:31:55 623 1

原创 MYSQL用函数请三思

mysql 函数

2022-12-04 13:24:54 375

原创 MYSQL5.7分区表

mysql基础信息版本 :5.7.32配置:2核4G表结构:分区表表结构不分区表结构数据量:1亿数据自取:参考阿飞的博客(忘了网址,找到了再补上),阿飞的博客没有给出分区前后的查询性能对比,自测下。以下是测试主键索引测试分区表sqlselect * from employees_partition where job_no = ‘NO.8888891’;连续执行五次用时:0.288s1.552s1.367s0.444s0.461s测试分区关闭缓存sqlsele

2022-02-27 22:10:30 780

原创 Golandidea 2020.01破解版

Golandidea 2020.01 链接: https://pan.baidu.com/s/1aFKsxAIbrEeEtMYpePmtbQ 提取码: 3y9j1、安装成功,不要运行,将jetbrains-agent文件夹复制到软件安装目录bin下2、运行软件,在在菜单栏Help中选择Edit Custom VM Options,添加:-javaagent:你Goland的安装目录\bin\jetbrains-agent.jar3、重启软件,点击菜单栏中的 “Help” -> “Register

2021-08-15 13:15:29 5746 11

转载 四.正则表达式转换为有限状态自动机:DFA 最小化

原文:https://study.163.com/course/courseMain.htm?courseId=1002830012从上图看,节点,4,6,7完全可以合并成一个节点。或者说,我们可以把节点4,6去掉而不影响状态机的功能。本节我们的目的就是讨论如何实现DFA的优化功能。DFA最小化算法描述:1.把所有状态节点分成两分区,接收状态为一分区,非接收状态为一分区:节点0,1,2,5是非接收节点,他们统一放入一个分区,分区编号0.节点3, 4, 6, 7 是接收节点,他们统一放入一

2021-04-19 20:13:39 694

转载 三.正则表达式转换为有限状态自动机:NFA转换为DFA

原文:https://study.163.com/course/courseMain.htm?courseId=1002830012NFA转DFA算法:我们先获取NFA的起始节点,然后计算它的ε闭包:ε-closure({17}) = { 17, 3 , 1, 4, 5, 9}我们知道,处于ε闭包中的任何一个状态节点时,我们可以不用输入任何字符就可以直达其他节点,因此,闭包中的所有节点其实可以等价于一个节点,这个节点就可以作为NFA对应的DFA中的一个节点。因此我们把集合{ 17, 3 , 1,

2021-04-19 20:08:21 919

转载 二.正则表达式转换为有限状态自动机:NFA状态机识别输入字符串

原文:https://study.163.com/course/courseMain.htm?courseId=1002830012给定正则表达式:D*.D | D.D*利用我们前几节开发的程序,对上面的正则表达式构建对应的NFA状态机,构造出的状态机如下(展示原图):我们将用上面的NFA来识别字符串1.2。在上图中,最后一个状态18,由于没有出去的边,所以,状态18为接收状态。我们从状态17开始,记得我们以前说过,对应于ε边,状态机不需要任何输入字符就可以自动进入ε边所指向的下一个状态。由此,

2021-04-19 20:04:04 874

转载 一.正则表达式转换为有限状态自动机:正则表达式转NFA

原文:https://study.163.com/course/courseMain.htm?courseId=1002830012一.有限状态自动机的分类有限状态自动机,其实可以分成两类。第一类是我们上面给出的,叫做确定性有限状态自动机: Deterministic finite automaton 简称DFA. 确定性的状态机有一个特点,就是给定当前状态和输入字符,那么下一个状态就能被唯一确定。例如基于上图,在状态1时,接收到字符0-9,那下一个状态一定只能是1,如果接收到字符 . ,那下一个状态,

2021-04-19 20:01:29 1883

原创 Mysql单表数据500万是否一定要分库分表?

总是听人说单表500w一定要分库分表,上千万的数据查询一定慢,没有场景的前提,都是扯淡的,下面做个小测验。数据库:mysql8.0.20系统:win10数据构建:数据构建地址注:我将索引user_id去除了,添加了user_name和phone索引。mysql配置如下:mysql配置全是安装后默认的,关键参数innodb_buffer_pool_size为128M.关于InnoDB缓冲池大小配置请参考官网:配置InnoDB缓冲池大小数据条数:13442974 查询全部co

2021-04-13 20:59:46 1947 1

原创 mysql 幻读和不可重复读区别

面试有一部分人不太理解这两个区别,自己梳理下。幻读侧重行数量发生了变化。不可重复读侧重某一行数据发生了变化。幻影行,重点是行,同一个事务中,某一行之前没有,后来读到了,那我认为读到幻影行了(比如其他事务插入了新行)。不可重复读,广义上讲,第一次读和第二次读数据不一样,这包含两种情况:(1) 同一行数据发生了变化;(2) 行数量发生了变化;为了区分来这两种情况,就把后者单独叫“幻读”。而不可重复读通常指的就是第一种情况。...

2021-03-19 18:54:11 612

原创 MongoDB WiredTiger基础数据结构

WiredTiger引擎被MongoDB收购,WiredTiger数据结构不是b-tree,不是b-tree,不是b-tree。WiredTiger数据结构官方说明简单截图作为证明。对于WiredTiger存储引擎来说,集合所在的数据文件和相应的索引文件都是按b-tree结构来组织的,不同之处在于数据文件对应的b-tree叶子结点上除了存储键名外(keys),还会存储真正的集合数据(values),所以数据文件的存储结构也可以认为是一种b+tree,其整体结构如下图所示:rootpage、int

2020-11-13 09:30:53 376

转载 MongoDB 存储引擎 WiredTiger 原理解析

原文链接:https://www.pianshen.com/article/54991730099/

2020-10-20 12:41:37 264

原创 spring boot lettuce和HikariCP线程池大小的设置

HikariCP是用于数据库的连接池,连接池的大小设置请参考HikariCP,简单总结下建议设置连接数:connections = (core_count * 2) + effective_spindle_countcore_count表示核数, effective_spindle_count表示one hard disk 。lettuce是用于连接redis的Java驱动包,这个连接池的大小没找到相关文章,但是根据我司的性能工程师的建议设置2倍的核数即:connections = (core_c

2020-10-11 21:41:32 899

原创 rocketmq4.7.1延时队列,支持任意时间延时

rocketmq延时队列gitup详细文档待续…

2020-09-24 00:16:03 1599

原创 Hotspot synchronized的实现

一.synchronized用法以及字节编译 public synchronized void testsynchronized(){ System.out.println("ok"); } public void testsynchronized1(){ synchronized(Test.class){ System.out.println("ok"); } } public void testsyn

2020-09-22 07:35:04 213

原创 g1垃圾回收算法文章的记录

三色标记法与读写屏障的文章R大G1算法原理的解释write-barrierread-barriermutator

2020-09-20 09:27:32 96

原创 Hotspot Reference的实现

一.referencePolicyshare.vm.memory.referencePolicy是用于java.lang.Reference实例清理。class ReferencePolicy : public CHeapObj<mtGC> { public: virtual bool should_clear_reference(oop p, jlong timestamp_clock) { ShouldNotReachHere(); return true; }

2020-09-13 10:21:05 114

原创 Hotspot Metaspace

新项目碰到了Metaspace空间不足导致fullgc,所以便想弄清楚Metaspace初始大小,什么时候扩容,扩容多少等等…首先讲解下在GC日志中,Metaspace这一行的 used ,capacity ,committed ,reserved 具体都代表什么?还有class space 这一行的 used ,capacity ,committed ,reserved 具体都代表什么? Metaspace used 13009K, capacity 13344K, committed 1

2020-09-06 13:32:30 337

原创 kafka扩展

以下扩展还未实现,后续会慢慢实现。扩展点一:kafka重试与死信队列kafka在我们系统中用于微服务之间保证数据一致性,但是若是消费失败,无限重试?也无死信队列概念。不扩展也能实现重试与死信队列,重试可以借助第三方工具比如redis,es等,当重试一定次数,同样可以新建kafka队列,用做于死信队列,为什么想去扩展?因为引第三方插件同样带来了复杂性,也保证代码格式的统一,因为目前代码有的消费直接捕获异常,有的不做处理,有的做了重试。目前的扩展的思路,重试次数通过新建队列时指定,存储于zk,支持一个top

2020-05-20 22:46:26 1034

原创 记录存储用户视频播放历史记录选型

需求背景,服务端存储app端用户视频播放历史记录。日活跃用户三百万,增长用户播放指标每天20w,召回用户指标每天20w,每个用户存储上限250条数据,每天数据大小340B,按照腾讯视频,爱奇艺视频,十秒同步一次播放进度。按照上面指标,qps过十万妥妥的,虽然之前有日数据千万的经验,和上面这个比小巫见大巫,并未有过这个量的经验,刚开始设定并未考虑用户增量和用户召回量,刚开始技术选型是mongodb或者Es,但是会议讨论是直接被pass,按照这个量需要选用hbase或者cassandra,国门用hbase的

2020-05-10 06:33:18 1290 4

原创 一.kafka0.8概要

改写kafka0.8 Java版本git地址:https://github.com/smipo/mykafka-0.8kafka0.8相比于0.7多了副本和分片。

2020-05-09 09:31:08 75

原创 kafka TimingWheel(时间轮)

上篇文章说到HashedWheelTimer结构是个数组+链表,而kafka TimingWheel结构也是个数组+链表,区别呢HashedWheelTimer只有一个轮(一个数组),而TimingWheel是多轮(多数组)。TimingWheel结构是由DelayQueue(这个实质上是object数组,最外层的轮)+buckets(数组+TimerTaskList)组成,如下图kafka TimingWheel源码解析也是一坨,不多说这个了,想说下kafka和netty时间轮的一些区别,kafka的

2020-05-09 09:29:00 425

原创 netty HashedWheelTimer(时间轮)

写文章,也是复习的一种,最近需要找工作,一部分面试官需要看博客和gitup之类,现在面试很多套路,蛋疼。HashedWheelTimer源码解析很多,在此也引用一个大佬的源码解析,https://zacard.net/2016/12/02/netty-hashedwheeltimer/ ,我写这篇文章主要是为了一些疑惑,也是为了准备面试官的提问需要博客。4版本HashedWheelTimer,wheel我认为可以理解为数组+链表类似hashmap数据结构。但是HashedWheelTimer最初版本wh

2020-05-09 09:27:25 257

原创 elasticsearch6 dsl解析(1)

版本号:6.0.1上两周,es从2升级到6,而我负责升级的东西,只有查询,写dsl写的快吐了,在这里吐槽下,mysql导入es的字段原汁原味的,字段都不转化的。如下图mmp,然后只能自己做了字段转换,言归正传,写了那么多dsl,在想底层怎么解析,一直没时间,趁着元旦写一下,底层是lucene,从lucene先看起来,es6.0.1采用lucene的版本7.0.1,下载代码导入idea,这个可以谷歌。Query中rewrite是重新构建语法数的方法,Query子类如下图类没截全,太多了,其中Mul

2020-05-09 09:20:59 502

原创 记录面试BlockingQueue

面试常见的队列比较ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue,编程中常用的ArrayBlockingQueue,LinkedBlockingQueue是这两个,现在记录下我面试遇到的ArrayBlockingQueue问题,1.ArrayBlockingQueue是无锁的吗?答:ArrayBlockingQueue是 有界阻塞队列。2.ArrayBlockingQueue为什么实现是阻塞队列?能像LinkedBlockingQueue的

2020-05-09 09:16:06 279

原创 Jctools Queue队列

JCTools是一款对jdk并发数据结构进行增强的并发工具,主要提供了非阻塞Map以及无锁Queue的增强数据结构,关于NonBlockingHashMap源码分析我写了篇文章。如果还不了解CAS,可以参考这个博客http://blog.csdn.net/hsuxu/article/details/9467651主要说下JCTools中的Queue,和jdk中的Queue比性能有很大的提升,主要实现利用了CAS和填充缓存行(避免伪共享),典型的空间换时间,然后我在百度时很多文章千篇一律不知道是不是抄袭

2020-05-09 09:13:56 507

原创 Java NIO

本来想写关于netty类的时序图,学习下设计模式并学习如何扩展Java nio的,毕竟对于我这种拧螺丝钉的给我一个任务如何写出高内聚低耦合的代码才是重要的,但是找不到合适相关联Java NIO和netty相关的代码,所以我花费了一点时间整理了下相关代码。import java.io.IOException;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.ByteBuffer;import

2020-05-09 09:12:47 83

空空如也

空空如也

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

TA关注的人

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