首页
动态
橙Bot
导航
翻译橙
标签分类
文章归档
专栏
图库
友链
留言板
1
技术方案有什么
2
引导AI,探索无限可能:深入了解prompt
3
Github:那些你不知道的使用方式
4
博客接入公众号,我是如何做到的?
5
我在青岛~
橙序员
累计撰写
186
篇文章
累计创建
65
个标签
累计收到
4
条评论
栏目
首页
动态
橙Bot
导航
翻译橙
标签分类
文章归档
专栏
图库
友链
留言板
搜索
标签搜索
公众号
事务
流处理
大数据
旅行
mongo db
SUNO
github
IDEA
安全
注解
总结
求职
分布式事务
CAP
分布式系统
loadbalancer
装修
买房
前端
方案设计
AIGC
JVM
资讯
Netty
NIO
BIO
zookeeper
RocketMQ
MySQL
stable diffusion
spring MVC
spring AOP
JDBC
mybatis
logback
docker
consul
spring event
新冠
连接池
redis
运维
nginx
hiper-v
DDD
搞笑
数据库
团建
游戏
Gradle
心情
好物
eureka
spring framework
spring boot
设计模式
apache common
ShardingSphere
KAFKA
leetcode
spring cloud
feign
ES
起点
目 录
CONTENT
以下是
开发技巧
相关的文章
2023-06-19
索引之争:B+树vs.组合索引vs.覆盖索引,你选择哪个?
索引是一种用于提高数据检索效率和降低数据库IO成本的数据结构。它通过对数据进行排序和组织,可以快速地进行等值查询和范围查询。不同的数据结构可以实现索引,其中最为合理的选择是B+树。B+树降低了树的高度,减少了查询的遍历次数,同时支持等值查询和范围查询。
在MySQL中,不同引擎使用不同的方式实现索引。在MyISAM引擎中,数据文件和索引文件是分开存储的。它使用B+树构建索引树,叶子节点存储的是索引列的值和对应行的磁盘地址。主键索引和辅助索引的结构相同,只是主键索引的键值是唯一的。在InnoDB引擎中,每个表都有一个聚簇索引,也是使用B+树构建的。聚簇索引的叶子节点存储的是整行记录。除了聚簇索引之外的索引都称为辅助索引,它们只存储主键值而非磁盘地址。
总结起来,索引是一种提高数据检索效率和降低数据库IO成本的数据结构。B+树是一种常用的索引实现方式。在MyISAM引擎中,数据文件和索引文件分开存储,使用B+树构建索引树。而在InnoDB引擎中,每个表都有一个聚簇索引,叶子节点存储整行记录,其他索引称为辅助索引,只存储主键值。
2023-06-19
388
0
0
开发技巧
2023-06-18
InnoDB内存结构与事务管理
InnoDB引擎被广泛使用的原因主要有以下几点:
1. 支持事务:InnoDB是一个支持ACID事务的存储引擎,可以保证数据的一致性、隔离性、持久性等特性,适用于需要高并发读写操作的数据库场景。
2. 缓冲池:InnoDB引擎通过缓冲池来提高数据库的整体性能。缓冲池是一个内存区域,用于缓存磁盘上的数据页,减少了磁盘IO的次数,加快了数据读取和写入速度。
3. 插入缓冲:InnoDB引擎使用插入缓冲来提升数据插入性能。在插入数据时,会先将次要索引的更新记录到插入缓冲中,再通过合并操作提升次要索引的插入性能。
4. 自适应哈希索引:InnoDB引擎可以根据查询的频率和模式,为热点页建立自适应哈希索引,提高连续查询的性能。
5. 锁信息和数据字典信息:InnoDB引擎可以保证并发访问时的线程安全,并且缓存了数据表信息,提升了数据访问的效率。
6. 重做日志缓冲:InnoDB在缓冲池中变更数据时,会先将变更写入重做日志缓冲中,然后再按时或事务提交时写入磁盘,确保数据的持久性。可以通过配置属性控制重做日志的写入时机,提高性能。
综上所述,InnoDB引擎通过支持事务、优化内存结构和提供多种性能优化机制,使得它成为了很多数据库开发人员首选的存储引擎。
2023-06-18
595
0
0
开发技巧
2023-06-04
深入解析MySQL架构:核心要点揭秘
文件结构是指MySQL存储目录中包含的不同部分,包括日志、https认证、表空间和数据文件、InnoDB重做日志以及缓冲池。
其中,日志文件主要用于记录数据库的操作信息和错误信息,包括错误日志、二进制日志、查询日志、慢查询日志和事务redo日志等。错误日志记录运行过程中遇到的严重错误信息和启动关闭信息,二进制日志记录数据库的DDL和非SELECT的DML语句以及执行时间,通常用于主从复制和数据备份恢复。查询日志可记录用户的所有操作,但在高并发环境中会产生不必要的磁盘IO,建议非调试场景不开启。慢查询日志记录执行时间超过阈值的查询语句。
表空间和数据文件是MySQL中存储表数据和索引的地方。系统表空间是被多个表共享的,包含InnoDB数据字典、double write buffer、changebuffer、undo logs的存储区域,以及用户在系统表空间创建的表数据和索引数据。用户表空间只存储用户定义数据表的数据和索引信息,其余信息存放在系统表空间中。数据文件是InnoDB和MyISAM常用的引擎,用于存储实际的数据。
总之,MySQL的文件结构包括日志、https认证、表空间和数据文件、InnoDB重做日志以及缓冲池。这些文件用于记录数据库操作信息、存储表数据和索引,并对数据库的性能和数据恢复起到重要作用。
2023-06-04
410
0
0
开发技巧
2023-05-20
Redis高级使用场景:消息队列、发布订阅和事务管理
REDIS使用场景消息模式队列模式我们可以使用list类型的lpush和rpop实现消息队列。但使用rpop命令会不知队列中是否有消息,需要轮询,消息会有延迟另外损失系统性能。我们可以使用brpop命令,如果从队列中取不出来数据,会一直阻塞直到超过指定时间后才返回null缺点:做消费者确认ACK麻烦
2023-05-20
441
0
0
开发技巧
2023-05-14
Redis持久化与集群演变
REDIS持久化有三种方式:RDB持久化、AOF持久化和混合持久化。RDB持久化是Redis 5.0之前默认的持久化方式,通过配置快照规则来触发持久化操作。其优点是可以最大化Redis性能,但缺点是一旦Redis异常退出会丢失最后一次快照以后更改的数据。AOF持久化是通过将每条更改数据的命令写入AOF文件来实现,可以通过配置规则来决定写入时机,但会降低Redis性能。AOF重写是对AOF文件进行压缩,去除重复操作,减小文件体积。如何选择RDB和AOF取决于业务需求,如果数据不能丢失则需要使用RDB+AOF方式持久化,如果只是缓存服务器则只需要配置RDB混合持久化。Redis 5.0之后默认采用混合持久化方式。
2023-05-14
412
0
0
开发技巧
2023-05-13
REDIS内存模型和使用优化
Redis内存模型使用hash表来管理存放在Redis中的键值对。数据的扩容和缩容是通过多次渐进式的rehash过程完成的。具体步骤如下:首先为ht[1]分配空间,字典同时持有ht[0]和ht[1]两个哈希表,然后通过维持一个索引计数器变量rehashidx来表示rehash工作开始。在rehash进行期间,每次对字典执行操作时,程序会将ht[0]哈希表在rehashidx索引上的所有键值对rehash到ht[1],完成后将rehashidx的值增一。随着字典操作的执行,最终ht[0]的所有键值对都会被rehash至ht[1],此时将rehashidx设为-1,表示rehash操作完成。整个Redis的存储模型包括dictEntry结构存放数据、redisObject对象维护键值对的值和指向具有不同数据结构的数据对象的数据指针。常用的数据类型和编码方式包括整型字符串、小于等于44字节的简单动态字符、大于44字节的简单动态字符串、压缩列表实现的列表对象等。
2023-05-13
597
0
0
开发技巧
2023-05-06
Spring boot如何简化项目搭建
本文介绍了Spring Boot如何通过对容器的定制化升级来简化项目搭建。在Spring Boot应用中,容器启动时会根据应用类型创建不同的应用容器,如Java应用、Web应用和云原生应用。判断应用类型的逻辑在SpringApplication的构建函数中实现。Spring Boot实现了'All in one'的简便,让我们无需重复搭建项目。
2023-05-06
826
1
2
开发技巧
2023-05-05
设计模式怎么记?
本篇纯属个人创作,押不押韵的可能就没那么将就了~~~创建型设计模式对象构建时(创建模式):外部依赖的获取使用门面模式封装对象属性构建使用建造者模式1和2为对象创建中的其中两步如果对象全局唯一,则在工厂中使用单例集合存储(单例)如果外部依赖相同条件下结果不变,则使用缓存集合(享元)创建模式使用口诀:属
2023-05-05
339
0
0
开发技巧
2023-05-05
MVC如何简化请求处理?
在使用servlet开发web项目时,我们的web.xml文件通常会做如下配置:<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/x
2023-05-05
467
0
2
开发技巧
2023-04-28
AOP如何进行功能增强
前置-动态代理示例代码如下:public interface UserService { void add(); void remove();}public class UserServiceImpl implements UserService{public void add(){Sy
2023-04-28
470
0
0
开发技巧
2023-04-22
bean工厂的功能拓展
诸如前文https://shiker.tech/archives/96所述,spring通过bean工厂替我们管理了我们平时开发中对象创建和属性填充等工作,但是我们实际在开发中,并没有直接使用XmlBeanFactory进行bean的获取或其流程的操作,而是通过创建应用容器(ClassPathXml
2023-04-22
439
0
2
开发技巧
2023-04-16
bean获取&bean工厂职责梳理
内部类实现流程测试用例我们测试用例如下:public class A { @Setter private String c; @Setter private B b; @NoArgsConstructor class B { @Setter
2023-04-16
418
0
0
开发技巧
2023-04-16
spring如何解决循环依赖
在日常开发中我们可能会遇到以下场景:public class A {@Setterprivate String c;@Setterprivate B b;}@AllArgsConstructorpublic class B {private A a;}上述过程中我们发现,A、B中的属性相互依赖,在创
2023-04-16
369
0
2
开发技巧
2023-04-09
spring如何实现依赖注入?
在上一篇文章 spring如何实现控制反转?中,我们留下了一个拓展问题,即当有如下两个类:@Datapublic class A {private String c;private B b;}@Datapublic class B {private String s;public B(String
2023-04-09
428
0
0
开发技巧
2023-04-09
spring如何实现控制反转?
什么是控制反转?控制-创建对象传统的对象创建流程中,我们需要使用new关键字创建对象。在这个过程中,用户-也就是我们自己有权决定对象的创建,这种方式下,用户需要自己创建对象,也就是要自己控制对象实例化和属性赋值等操作。假如我们有以下java类:@Datapublic class B {private
2023-04-09
643
0
0
开发技巧
2023-04-02
Mybatis如何简化CRUD过程?
在上文 java如何连接数据库?中,我们已经了解了java是如何通过驱动管理器加载驱动创建数据库连接了,在上述流程中我们的输入输出如下:【输入】:数据库连接信息:数据库主机数据库端口号数据库库名用户名密码要执行的sql静态查询sql预占用sql,入参可根据需要设置:sql入参【输出】:sql执行结果
2023-04-02
810
2
1
开发技巧
2023-03-26
记一次logback引发线上的内存报警
最近接手的服务经常出现线上内存溢出问题,导致服务需要频繁重启。经过查看内存使用记录,发现内存占用在上线后1天就达到4G以上,其中大部分内存被char数组占用了61%。这些char数组中存储了大量的日志记录,而由于老服务的日志打印过于频繁,每条日志的大小在6、7K之间。此外,阻塞队列设置得过小,并且没有设置neverBlock导致业务线程阻塞,导致堆文件里充斥着大量日志。通过查看logback的源码可以发现,当存储日志时,logback会先将日志放入阻塞队列中,根据neverBlock的值决定是采用阻塞方式还是非阻塞方式存储。neverBlock为false时,采用非阻塞方式存储,否则采用阻塞方式存储。
2023-03-26
1556
0
0
开发技巧
2023-03-26
java如何连接数据库?
本文旨在说明:如何使用java连接数据库?jdk又是如何规范各个数据库驱动实现的?执行sql需要做哪些过程?在jdk自带的jre中,我们可以在java.sql.*中看到一些关于sql相关的接口和工具类:这些类都为我们做了什么呢?假如你来出一个需求。。。如果你是技术,来不依赖任何包实现查询mysql数
2023-03-26
650
0
0
开发技巧
2023-03-03
chatGPT来面试-数据库篇
数据库的三级缓存是怎么回事?数据库的三级缓存通常指的是Hibernate框架中的缓存机制。Hibernate是一种流行的ORM框架,旨在简化Java应用程序与关系型数据库之间的数据访问。Hibernate提供了一个多级缓存系统,以提高应用程序的性能和响应速度。这个多级缓存系统由三个层级组成,因此被称
2023-03-03
468
0
0
开发技巧
2022-11-26
DBCP连接池原理与配置分析【三】
本文介绍了数据库连接池的创建过程和配置属性讲解。文章主要以GenericObjectPool.create()方法为切入点,详细讲解了数据库连接池的初始化过程。在连接池的创建过程中,使用了PoolableConnectionFactory.makeObject方法来创建具体的数据库连接。这里提到了池化连接PoolableConnection继承了DelegatingConnection,实现了Connection接口,Connection接口可以执行SQL语句并返回结果。文章还介绍了Connection接口的一些主要方法,包括createStatement方法用于创建Statement对象发送SQL语句到数据库。总体来说,本文详细介绍了数据库连接池的创建和配置过程。
2022-11-26
644
0
0
开发技巧
2022-11-20
DBCP连接池原理与配置分析【二】
对象连接池属性主要封装在BaseGenericObjectPool中,包括maxTotal、blockWhenExhausted、maxWaitDuration、lifo等默认配置属性。其中maxTotal表示最大连接数,blockWhenExhausted表示当连接用尽时是否阻塞等待,maxWaitDuration表示最大等待时间,lifo表示是否采用后进先出等策略。除此之外,还包括fairness、testOnCreate、testOnBorrow、testOnReturn、testWhileIdle、durationBetweenEvictionRuns、numTestsPerEvictionRun等属性。这些属性可根据具体需求进行配置,以提高连接池的性能和稳定性。
2022-11-20
829
0
0
开发技巧
2022-11-13
DBCP连接池原理与配置分析【一】
DBCP原理日常,我们通过spring或者手动创建连接时,dbcp会做哪些操作呢?以手动根据dbcp创建数据连接并查询为例:public void test(){System.out.println("Setting up data source.");DataSource da
2022-11-13
660
0
0
开发技巧
2022-11-05
REDIS面试问题
问题1:redis的阻塞队列怎么做到阻塞式的抢占?redis在blpop命令处理过程时,首先会去查找key对应的list,如果存在,则pop出数据响应给客户端。否则将对应的key push到blocking_keys数据结构当中,对应的value是被阻塞的client。当下次push命令发出时,服务
2022-11-05
544
0
0
开发技巧
2022-10-30
小站点如何做到服务冷备?
如题,本文就探讨本站点如何实现网站冷备来介绍实现方式。本站的环境为:机器:阿里云ECS站点:博客主站以及众多子站本文中所用的工具为服务端运维工具:宝塔面板文件同步工具:rclone
2022-10-30
577
0
0
开发技巧
2022-10-27
同一机器,不同端口的泛域名解析如何做到?
答案:nginx反向代理nginx反向代理首先我们要理解代理,所谓代理,就是两台机器之间的通信非直接通信,而是通过代理服务进行间接通信。假设我们原来与服务器直接的交互如下:‘添加了代理后,我们的请求会首先通过代理协议发送到代理服务,代理服务再转发到服务器上:根据代理服务部署再客户端(请求方)和服务端
2022-10-27
673
0
0
开发技巧
1
2
3
4