- 博客(72)
- 问答 (2)
- 收藏
- 关注
原创 MySQL索引实现原理分析
目前大部分数据库系统及文件系统都采用B-Tree(B树)或其变种B+Tree(B+树)作为索引结构。B+Tree是数据库系统实现索引的首选数据结构。在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的...
2018-10-10 17:59:07 79633 29
原创 mysql-数据页结构
数据页结构·数据删除后记录并没有马上被删除,而是被打上了删除标记,并被记录到一个垃圾链表中,之后若有新纪录来,它们则可能覆盖被删除的记录占用的存储空间。·页内数据组成单向链表,且再次进行了分组,每组最后一条数据顺序存储在靠近页尾部的地方,这种数据称为槽,页目录就是多个槽组成的。·页内数据单向链表,页与页之间双向链表。索引·二级索引携带主键信息到聚簇索引重新定位完整记录的过程称为回表。·二级索引记录的内容由三部分组成: ·索引列的值 ·主键值 ·页号表空间...
2023-04-06 22:24:58 705
原创 【深入理解Kafka系列】第六章 __consumer_offsets(位移主题)
__consumer_offsets、OffsetCommitRequest 和OffsetCommitResponse概念简介,及如何删除过期的位移主题消息。
2022-10-17 22:51:37 1810 1
原创 MYSQL查询优化器
MYSQL 逻辑结构MySQL 使用典型的客户端/服务器(Client/Server)结构, 体系结构大体可以分为三层:客户端、服务器层以及存储引擎层。其中,服务器层又包括了连接管理、查询缓存 、SQL 接口、解析器、优化器、缓冲与缓存以及各种管理工具与服务等。逻辑结构图如下所示:具体来说,每个组件的作用如下: 客户端,连接 MySQL 服务器的各种工具和应用程序。例如 mysql 命令行工具、mysqladmin 以及各种驱动程序等。 连接管理,负责监听和管理客户端的连接以及线
2021-11-12 16:34:08 4299 4
原创 Apache Calcite
前言Calcite 之前的名称叫做 optiq,optiq 起初在 Hive 项目中,为 Hive 提供基于成本模型的优化,2014 年 5 月 optiq 独立出来,成为 Apache 社区的孵化项目,主要作用是提供标准的SQL语言查询底层各种数据源的一个工具,可以将各种SQL语句解析成抽象语法术AST(Abstract Syntax Tree), 之后通过操作AST就可以把SQL中所要表达的算法与关系体现在具体代码之中。Calcite 的目标是"one size fits all "(一种方案适
2021-11-05 16:08:59 1296
原创 mysq如何保证数据的可靠性
目录1. redo log2. binlog3. 两阶段提交MySQL这种关系型数据库中,讲究日志先行策略,只要日志持久化到磁盘,就能保证MySQL异常重启后,数据不丢失。在MySQL中,提到日志不得不提的就是redo log和binlog。1. redo log事物在执行过程中,生成的redo log是要先写到redo log buffer的。redo log buffer里面的内容并非每次生成后都要直接持久化到磁盘的。如果事物执行期间MySQL发生异常重启,那这部分日志就丢了
2021-05-20 14:36:43 483
原创 jvm相关知识点整理
1、java内存区域·程序计数器:当前线程所执字节码的行号指示器,如果线程执行的是一个java方法,则记录的是正在执行的虚拟机字节码指令的地址。·java虚拟机栈:栈帧,存储局部变量表、操作数栈、方法出口等,每个方法调用到结束,就对应一个栈帧在虚拟机栈从入栈到出栈的过程。·本地方法栈:为虚拟机使用到的本地(Native)方法服务。·堆:所有的对象实例都应当在对上分配(也有栈上分配等),是垃圾管理器管理的区域,可以固定大小,也可以拓展(通过参数-Xmx -Xms)。·方法区:存储已被虚
2021-03-04 18:43:26 361 1
原创 mysql---字符集及比较规则
1、字符集与比较规则字符集:字符串和存储的二进制的映射关系,某个字符范围的编码规则。如:ascii、gbk、utf8、utf8m64等比较规则:对某种字符集来说,制定的用来比较字符大小的多种规则(一种字符集多种比较规则,一个默认规则)。比较规则名称以关联的字符集名称开头,紧跟规则使用语言,后缀是是否区分重音、大小写等。如utf8_polish_ci、utf8_spanish_ci、utf8_general_ci。2、mysql有4个级别的字符集和比较规则:服务器级别、数据库级别、表级别、行级
2021-01-15 21:44:48 575
转载 【转】利用try-with-resource机制关闭连接
JAVA的一大特性就是JVM会对内部资源实现自动回收,即自动GC,给开发者带来了极大的便利。但是JVM对外部资源的引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO流等,这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等。传统的手动释放外部资源一般放在一般放在try{}catch(){}finally{}机制的finally代码块中,因为finally代码块中语句是肯定会被执行的,即保证了外部资源最后一定会被释放。同时考虑到finally代码块中也有可能出现异
2020-11-24 11:52:33 452
转载 PageHelper导致自定义Mybatis拦截器不生效
背景:最近由于公司要做统一的数据变更记录,以前是基于Aop来做的,这样效率很低,而且在做批量处理(insert,update,delete)操作时基本不可用。所以我打算使用CDC(如Canal,Maxwell等工具)来监听mysql的binlog来做。但是不是所有的表都会有user_id字段,所以我们须要在sql上做一些处理,因为公司现在统一用的是mybatis,那么现在我觉得比较好的方式就是...
2020-03-26 14:48:04 8893 6
原创 生产中遇到的pageHelper问题(自动加上limit)
最近发现生产环境中的有些不需要分页的sql自动加上了limit分页,后面查了资料发现了原因,记录一下。别人遇到的同样的问题:http://www.herohuang.com/2018/08/08/pagehelper-limit/pageHelper分页原理:https://www.lovecto.cn/20180805/185.html...
2019-12-09 16:03:55 1100
原创 运用ThreadFactory管理自己的线程池
前话最近项目中因为需要用到多线程处理数据,在Java中,我们通常使用两种方式来创建线程:集成Thread类和实现Runnable接口。Java还提供了一个接口,既ThreadFactory接口,用于创建你自己的线程对象工厂,可以设置线程名称、优先级等属性。ThreadFactory为什么要用ThreadFactory来创建线程呢?自定义具有描述意义的线程名称。如果使用默认的Thre...
2019-11-04 11:01:51 2163
原创 设计模式之策略模式的实际运用
前话在日常工作中,运用设计模式的思想能让我们写出更佳优雅的代码。平常策略模式的思想用的比较多,今天我们就来讲讲策略模式。策略模式策略模式讲的是一个对象具有某个行为,但是在不同的场景,这个行为的表现形式又不一样,换句话说就是有不同的算法实现,所以我们把这些不同的实现封装起来,可以在运行时动态的选择或切换。(多态思想)策略模式有两个明显的特点:对不同的实现各自有一个封装(实现类)。...
2019-10-11 17:58:58 406
转载 (转)sharding-jdbc系列(四):源码分析
看到一篇不错的博客https://blog.csdn.net/feelwing1314/column/info/22801/1
2019-07-30 10:59:53 624
原创 sharding-jdbc系列(三):分布式主键
在我们进行开发工作时,数据库表主键自动生成是一个基本的需求,而且大多数数据库也提供了基本的解决方案,比如mysql的自增主键、Oracle的自增序列。但是我们进行了分库分表后,同一个逻辑表内的不同实际表之间的自增键由于无法互相感知而产生重复主键。目前有许多第三方解决方案可以完美解决这个问题,如UUID等依靠特定算法自生成不重复键,或者通过引入主键生成服务等。为了方便用户使用、满足不同用户不同使...
2019-07-05 14:50:45 5608 3
原创 sharding-jdbc系列(二):在spring boot下的分库分表运用
本文使用的是spring boot+mybatis+sharding-jdbc+druid。项目整体结构单库分表集成项目背景:创建一个数据库user0,假设只有一张表t_user需要进行分表,分为2张表t_user0、t_user1,分片字段为主键id,采用取余的分片算法(%2)。创建对应的数据库及表create database user0;CREATE TAB...
2019-07-04 17:47:17 2132
原创 sharding-jdbc系列(一):概念
前话前段时间公司项目比较忙,天天都忙于码代码,最近好不容易项目上线了,后期就是试运行解决线上问题,要闲一些了,看了下公司以前的一些项目,发现其中居然有用到sharding-jdbc,想到以前自己也使用过,但是仅仅是会用过,对一些原理还不了解,所以决定趁这段时间学习一下。核心概念一、 背景在互联网海量数据时代的今天,我们需要存储的数据也越来越多,在使用关系型数据库例如mysql等时,...
2019-07-04 11:39:44 55814 1
转载 java 23种设计模式 深入理解(转载)
转载以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究)创建型抽象工厂模式http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html工厂方法http://www.cnblogs.com/java-my-life/archive/2012/03/25/2416227.h...
2019-06-24 14:10:40 161
原创 druid与mysql连接超时的问题
背景公司一个项目使用了druid连接池,mysql数据库,生产环境日志偶尔会打印一个错误如下:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure。查了下,错误挺常见,出现这个错误的原因:1.网络错误,导致数据库无法连接。2.数据库连接闲置时间太长,导致数据库关闭...
2019-04-17 17:11:09 10201
原创 反射中,Class.forName和ClassLoader区别
今天浏览其他博客的时候,看到一个问题问“反射中,Class.forName和ClassLoader区别”,思考后,发现自己知道这两个都可以用来进行类的加载,但是其区别确实还不了解,经查阅相关资料学习后总结如下:一、类加载过程装载:通过累的全限定名获取二进制字节流,将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lang.class对象; 链接:执行下面的校验、...
2019-02-20 17:53:01 8062 3
原创 如何保证redis中存放的都是热点数据
当redis使用的内存超过了设置的最大内存时,会触发redis的key淘汰机制,在redis 3.0中有6种淘汰策略:noeviction: 不删除策略。当达到最大内存限制时, 如果需要使用更多内存,则直接返回错误信息。(redis默认淘汰策略) allkeys-lru: 在所有key中优先删除最近最少使用(less recently used ,LRU) 的 key。 allkeys-r...
2019-02-19 22:22:49 13213 2
转载 Java线程的6种状态及切换
一、线程的6种状态1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready...
2019-02-13 16:15:22 187
原创 jvm内存模型详解
一.运行时数据区域总图 二.名词解释:•本地方法栈(线程私有):登记native方法,在Execution Engine执行时加载本地方法库•程序计数器(线程私有):就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。•Java栈(线程私有): Java线程执行方...
2019-01-10 14:35:53 197
转载 Redis持久化RDB与AOF
前言我们知道Redis是一款内存服务器,就算我们对自己的服务器足够的信任,不会出现任何软件或者硬件的故障,但也会有可能出现突然断电等情况,造成Redis服务器中的数据失效。因此,我们需要向传统的关系型数据库一样对数据进行备份,将Redis在内存中的数据持久化到硬盘等非易失性介质中,来保证数据的可靠性。将Redis内存服务器中的数据持久化到硬盘等介质中的一个好处就是,使得我们的服务器在重启之...
2019-01-03 10:59:12 197 1
转载 Spring中BeanFactory与FactoryBean区别
一句话总结:BeanFactory实际上是一个Factory,是一个接口,是管理spring中bean的工厂;而FactoryBean是一个Bean,但他不是一个简单的bean,他是一个能修饰对象的bean,返回的是getObject中实际返回的bean对象。https://www.jianshu.com/p/05c909c9beb0...
2018-12-26 17:49:33 452
转载 粗略描述spring对bean的初始化操作
1.解析xml等配置文件,例如applicationgContext.xml,将xml中定义的bean(如loginService和loginResource)解析成Spring内部的BeanDefinition。2.以beanName(如loginService)为key,BeanDefinition(如loginService相应的BeanDefinition)为value存储到Defau...
2018-12-21 23:24:20 225
原创 mybatis执行流程
源码类执行流程:返回SqlSessionFactory 其实就是从Configuration 解析org.apache.ibatis.session.SqlSessionFactoryBuilder.build(java.io.InputStream) >org.apache.ibatis.builder.xml.XMLConfigBuilder 构造函数 &g...
2018-12-19 14:47:38 2338 1
原创 mybatis中#与$的坑
今天在做项目的时候遇到一个动态排序的功能,需求为:可点击多个列后面的箭头,动态升降序。一.解决思路前端动态传入字段名与排序方式(desc、asc)二.解决方式1.代码如下:ORDER BY #{sort}||' '||#{sortType}执行后发现排序未生效2.代码如下:ORDER BY ${sort} ${sortType}排序生效。三.原因...
2018-12-14 17:49:17 290
转载 分布式session一致性
一、缘起什么是session?服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。 Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建session,提供数据存储功能。最常见的,会把用户的登录信息、用户信息存储在session中,以保持登录状态。 什么是session一致性问题?只要用户不重启浏览器,每次http...
2018-12-13 16:58:32 218
原创 mysql同步
一、概念介绍:binlog: binary log,主库中保存更新事件sql日志的二进制文件,所有对数据库有影响的操作的sql语句都会按照发生顺序保存到binlog中(例如,create table,update,insert,delete等),binlog可设置过期时间,其中保存的sql是在过期时间内的语句,binlog是从库拉去执行sql的数据源。binlog输出线程:当有从库连接到...
2018-12-11 23:10:25 2034 1
原创 NIO之selector知识总结
一、概念selector三大概念:Channel(通道):Channel分为服务端Channel:ServerSocketChannel与客户端Channel:SocketChannel, Java NIO 中权威的说法:通道是 I/O 传输发生时通过的入口,而缓冲区是这些数 据传输的来源或目标。对于离开缓冲区的传输,您想传递出去的数据被置于一个缓冲区,被传送到通道。对于传回缓冲区的传输,...
2018-12-11 22:15:25 260
空空如也
JSP使用request对象的addCookies()方法记录上次访问时间
2014-05-19
怎么在递归调用中让其中一部分代码只运行一次
2014-05-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人