自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 为“自研”的KV数据库编写JDBC驱动

所以我们需要在META-INF/services/目录里创建一个以服务接口命名的文件, 文件名为"java.sql.Driver"的文件, 该文件内容为接口实现类: ‘org.littlestar.propsjdbc.Driver’。一觉醒来,受到梦的启发,自研了一套K/V数据库系统,因为"客户"一直催促我提供数据库的JDBC驱动,无奈之下,只好花费一个上午的时间为用户编写一个。经过"客户"专家组评审,这套数据库系统测试符合预期,达到了业界领先水平,喜提6000w马内,实现人生财富自由。

2024-04-02 15:39:08 262

原创 MySQL新的版本发布模型 - 创新版本和长支持版本

2023年7月18日,MySQL发布了最新数据库服务器版本8.1.0,其中变化最大的是MySQL采用了新的版本发布模型。除了包含缺陷修复,还可能包含已经稳定的新特性。新模型可以让MySQL更快的引入型特性,但是频繁的变化对与用户来说是个挑战,对于一个稳定的生产系统,我们通常需要的是缺陷修复,而不是引入变化。这种模型有一个缺点: 新特性只在大版本发布,而大版本发布周期通常很长(通常2年),虽然保持了版本稳定,但新特性发布比较慢。

2023-08-15 11:29:13 1100

原创 InnoDB文件物理结构解析7 - FIL_PAGE_SDI

其中一个重要的改变就是,从8.0版本开始,MySQL废弃了.frm文件(还包括.par,.TRN,.TRG, .isl,db.opt,ddl_log.log ),MySQL使用字典信息序列化格式(serialized form)来存储数据字典,这部分数据称为serialized dictionary information (SDI),MySQL将SDI存放对应表的表空间中,并引入新的Page如:FIL_PAGE_SDI来存放SDI的数据。语句获取film表的DDL语句。视图获取表元数据信息。

2023-08-14 19:17:10 260

原创 InnoDB文件物理结构解析6 - FIL_PAGE_INDEX

InnoDB中,非主键索引(组合索引)字段是允许包含空值的。记录内容中,最前面部分存放索引的字段,后面接着索引字段值对应的主键值,记录内容不包含DB_TRX_ID和DB_ROLL_PTR伪字段。由输出可以看到,InnoDB索引,记录的是索引值对应的主键值,而不是行记录的地址,这与Oracle数据库的索引是不同的,或许与InnoDB是索引组织表有关,行记录存储在主键中。索引深度level>0时,根据非叶子节点内的值范围找叶子节点,再根据所在叶节点中找到对应的主键值,然后根据主键"回表",找到对应行记录。

2023-08-14 17:25:13 228

原创 InnoDB文件物理结构解析5 - FIL_PAGE_INDEX

如果执行的是"truncate sakila.film",该方法是无效的,因为整个ibd文件的存储空间会被"重置"(文件会变小,没有page(14)),全表删除(“delete from sakila.film”)通常不会,但也有特例,当一个表的数据量非常小(索引深度小于1),所有的行都在一个(Leaf) Page时,观察到全表删除和truncate一样,整个页的记录数据会被清掉(置为00),可以通过hexdump确认。程序输出和我们预想的一样,记录虽然被delete语句删除了,但是数据还是保留在页内的。

2023-08-14 17:16:33 147

原创 InnoDB文件物理结构解析4 - FIL_PAGE_INDEX

null-bitmap前面是variable-field-lengths部分,该部分是可变长字段的长度列表,该列表也是可变长的,要读取同样需要先确定列表的长度。当你的一个表,只有几行数据时,那么你可以观察到page(4)的page_level=0,这是一个Clustered Key Leaf Page,表所有的行记录都存储在该页内,当你不断往里面插入数据,该页无法容纳所有记录时,page(4)的会变成Clustered Key Non-Leaf Page,原来page(4)中的数据会分散到其它的叶节点内。

2023-08-11 18:14:58 199

原创 InnoDB文件物理结构解析3 - FIL_PAGE_INDEX

infimum的Next Record Offset是一个指针,指向的是下一条记录的位置,这个下一条记录位置到底是什么位置?因为案例的page(4)的page_level=1,也就是说存放的是非叶子节点,所以记录类型都是REC_STATUS_NODE_PTR,我们可以看到最后一条记录指向的位置(next_pos)为112,通过System_Records的结构图,可知这是supermum记录的"Next Record Offset(2 bytes)"位置,说明记录到此遍历完成。

2023-08-11 17:53:31 174

原创 InnoDB文件物理结构解析2 - FIL_PAGE_INDEX

InnoDB的FIL_PAGE_INDEX物理结构解析。

2023-08-11 17:39:55 224

原创 InnoDB文件物理结构解析1 - 概述

InnoDB数据文件解析。

2023-08-11 16:54:09 200

原创 解析InnoDB(.ibd)存储结构

一直都对innodb的文件结构非常感兴趣 , 最近又翻了翻Jeremy Cole关于InnoDB的文章(https://blog.jcole.us/2013/01/03/the-basics-of-innodb-space-file-layout/), 手又痒痒, 用Java写了一个解析innodb数据文件(.ibd)文件的小程序, 可以对.ibd的基本存储单位页(Page)的页头页和页尾进行解析。想做为一个开始, 后续如果有精力且资料充足的情况下, 会把逐步将innodb主要的Page都解析出来。

2023-06-15 11:14:20 478

原创 Linux进程打开文件数限制(nofile)

ulimit是Linux内建的命令可以用于限制用户的系统资源使用。其中的nofile(ulimit -n)限制当前用户允许打开的最大文件数(open files), 最近因为要监控系统中每个用户的资源使用情况,做了一些测试在这里做个记录,希望可以帮助有需要的朋友。

2023-04-10 17:21:52 2556

原创 基于AIX的Oracle RAC (11.2)操作系统安装建议

很久不装小鸡不搞AIX了,最近因为工作需要又整了一份,分享给大家参考,希望还有人用得到;-)

2022-09-07 09:47:41 888

原创 Java Thread Dump分析 - 记一次(连接池的)连接不释放问题。

Java Thread Dump分析个人心得体会。

2022-06-01 19:06:40 2181 1

原创 Spring基础入门10 - 微服务与Restfull API

微服务架构是一种软件架构模式/风格, 并不是某个具体的框架和技术。微服务架构提倡将大的系统构建成一系列按业务功能划分的, 可独立运行的, 自治微服务(子系统)。各个服务彼此之间职责明确, 分工协作。在传统的单体式架构中, 所有的模块代码存放在一个应用中, 所有的数据存则放在一个数据库中。在这种模式下,随着需求的不断增加, 业务功能增加到一定程度,单体应用变得越来越庞大和臃肿,可维护性逐渐降低,灵活性降低,代码发布频率越来越慢,新功能交付效率也变得越来越低下。微服务架构可以帮助我们克服旧架构所面临的挑战,

2022-03-25 16:39:41 2092

原创 Spring基础入门9 - 使用Spring Boot编写Web应用

关于WebApplicationTypeSpring的主要开发场景是Web应用,我们将上例改成一个Web应用, 我们首先通过Sping Tools插件添加一个"Spring Web"依赖。添加完成后,插件在pom.xml文件添加了"spring-boot-starter-web"依赖,并在resources目录下创建了"static"和"templates"子目录。这时我们的代码不做任何修改,再运行一次我们的程序,程序不再像之前一样自动退出,通过程序输出, 程序启动了一个嵌入的Tomcat Web服务

2022-03-17 16:08:17 623

原创 Spring基础入门8 - Spring Boot

Spring Boot入门1

2022-03-17 09:48:29 277

原创 Spring基础入门7 - JPA/Hibernate

1. 数据访问层 (DAO模式)通常我们的应用都要使用数据,涉及到大量的数据存取, 对于企业级应用,数据存放在关系型数据库是最常用的方案。前文提到Spring MVC将前端展现与业务逻辑分离,为了让程序结构更清晰,我们还会将数据访问从业务逻辑中也分离出来,做为一个数据访问层(持久化数据层)。这样我们就获得了一个J2EE经典的三层架构: 表现层 - 业务逻辑层 - 数据访问层。数据访问层通常使用的DAO模式进行封装,DAO模式主要包括三部分:DAO接口: 对需要的数据库操作的接口,提供外部(业务逻

2022-02-08 16:38:28 973

原创 Spring基础入门6 - Spring JDBC

JDBC(Java DataBase Connectivity)是一套Java访问关系型数据库的标准, JDBC只定义接口,具体实现由各个厂商(框架)负责。 Spring使用的是javax.sql.DataSource接口获取数据库连接, DataSource代表一个数据源(获取数据库工厂),相较于直接通过java.sql.Driver获取数据库连接(通常是通过DriverManager根据SPI规范查找Drive实现, 并调用匹配的Driver创建连接),DataSource最大的优势就是可以实现连接池。

2022-01-28 18:59:33 1221

原创 Spring基础入门5 - Spring MVC

1. Spring MVC简介1.1. MVC设计模式MVC(Model View Controller),是一种设计模式。所有设计模式归的目的根结底都是解耦,MVC模式也不例外, 那么MVC模式要解的是什么耦合呢? MVC的设计意图是要将前展示与业务逻辑分离出来。在Spring MVC,将Web应用程序抽象成职责不同3种角色:Model, View和Controller。Controller层不会负责具体的页面渲染(不包含页面如何展示的代码), 而是接收用户的URL请求(POST/GET),执行业务

2022-01-27 17:29:44 441

原创 Spring基础入门4 - Spring MVC

前面章节学习了Spring框架的IoC和AoP, 接下了学习使用Spring开发J2EE Web应用程序。一个J2EE Web应用程序需要符合J2EE的相关规范, 并部署运行在符合J2EE规范的容器中, 如(Apache Tomcat)。本文将简单的介绍Eclipse Web应用开发环境的构建。开发环境:JDK 8+Eclipse IDE for Enterprise Java and Web DevelopersApache Tomcat 9.X开发工具建议使用Eclipse for J2E

2022-01-24 11:49:34 239

原创 Spring基础入门3 - AoP

上文我们一起学习了Spring IoC控制反转,下面我们继续学习一下AoP(Aspect Orient Programming), 面向切面编程。AoP同样是一种设计思想,AoP要达到的效果是,在不修改源代码的前提下,为系统中的业务组件添加某种功能增强。AoP实现分为:静态AoP和动态AoP。静态AoP在编译阶段对程序源代码进行修改, 生成了静态的静态AoP代理类, 来实现增强功能的织入;动态AOP在运行阶段对动态生成代理对象(使用JDK动态代理或CGlib动态地生成AoP代理类), 来实现增强功能

2022-01-21 10:10:29 260

原创 Spring基础入门2 - IoC容器

在上文介绍了Spring IoC容器的基本用法,下面做一个稍微复杂点的例子,学习以下Spring的IoC和AoP的“实际”使用。我们假设有一个在线商城OnlineStore, 在线商城需要提供一些银行相关服务。(假设)因为银行服务的实现是容易变化的,后续可能会变更不同的服务提供商(实现),所以在设计上我们需要将银行服务抽象为接口BankingService,这样OnlineStore依赖的是稳定的接口,而不是具体变化的实现, 实现了解耦。package org.littlestar.learning.pa

2022-01-20 10:52:48 183

原创 Spring基础入门1 - IoC容器

1. Spring简介Spring是一个开源, 一站式的, 轻量级的Java企业应用开发框架。Spring框架是一个企业应用开发框架, 简单来说就是开发服务器端应用的框架;Spring是轻量级的框架, 与传统的EJB类似, Spring框架也是采用容器来管理应用对象(Bean), 但是从大小与开销两方面而言Spring都是轻量的, 完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布;Spring是一站式(full-stack)的框架, Spring非常全面, 无缝整合了各种优秀开源

2022-01-20 09:55:35 227

原创 使用Springboot重写了EventCentral。

Springboot重写EventCentral。

2022-01-17 11:01:38 421

原创 百度网盘客户端(java)版本

最近在Fedora34上跑官方的百度网盘老是工作不正常,看到百度网盘开放有API,于是自己写了一个基于字符界面和命令行的百度客户端:https://github.com/Li-Xiang/jbaidunetdisk/releases/程序支持字符用户交互界面,也支持命令行方式执行,可以方便通过脚本或者计划任务执行。用户交互执行效果如下:程序说明:jbaidunetdisk调用的是百度开放平台提供的接口,调用接口基于Apache Http Client库。要使用百度网盘的开放平台,首先需要申请接入

2021-11-26 17:49:17 2883

原创 如何使用工具提高Java代码的质量(基于Eclipse)-3

评判代码质量, 性能是一个重要的考量。大多数的软件都会对响应时间和吞吐量有要求。对应用程序进行性能测试是检验产品性能的重要手段, 而在编码阶段我们也需要对一些关键或者频繁调用的代码进行性能测试, 以验证代码的性能; 当对已有的接口实现添加新的业务逻辑时, 我们也需要通过测试来评估变更带来的性能影响; …我们常规的做法是在代码的开始位置记录下开始时间戳(例如通过System.currentTimeMillis()),再在结束位置记录结束时间戳, 通过计算时间差来获得执行时间。更优雅的做法是通过第三方的Com

2021-08-16 16:51:43 447

原创 如何使用工具提高Java代码的质量(基于Eclipse)-2

软件测试是保证软件质量, 提高软件可靠性的关键, 软件企业都非常注重测试, 江湖上一个流传非常广的一个传说是"微软公司的测试人员与开发人员比例一般为1:1, 甚至在Windows 2000开发团队中, 有1800个测试人员, 900个开发人员, 测试人员与开发人员比例为2:1…"软件测试是个很大的话题, 上文提到的PMD进行代码审查(Code Review), 是一种静态测试,测试不需要执行代码; 而对应的另一种动态测试, 测试需要实际运行程序, 动态测试又分白盒, 黑盒。黑盒测试通常也称功能测试

2021-08-04 15:42:02 240

原创 如何使用工具提高Java代码的质量(基于Eclipse)-1

在数字化程度越来越高的今天,代码无处不在, 从我们使用的各种电脑, 智能手机,汽车等等智能设备, 都需要通过代码来实现各种各样的功能。代码的质量影响用户体验, 关乎产品成败,关键系统的缺陷将导致巨额且无法挽回的损失。据报道, 造成波音737 MAX坠毁的部分原因被指是由于MCAS系统上的软件引发错误。目前, 代码还是靠人来编写, 这就难免会出现各样的的缺陷,而现代软件越来越复杂, 代码量通常也是惊人的。所以我们就需要通过工具帮助我们提升效率, 就如同现代的车企不但自己不造轮子, 还会用上工业机器人,建房子

2021-07-30 18:46:01 366 1

原创 Tuning the XFS file System

网络上非常多的关于数据库文件系统调优的文章,里面的秘籍是不是都是真的,还是瞎折腾?Don’t Trust it, Test it!其中一个来自希捷的文档"https://www.seagate.com/files/www-content/support-content/solid-state-flash-storage/accelerator-cards/_shared/masters/seagate-ssds-linux-and-mysql-tpc-c-optimizations-application

2021-02-04 09:39:07 399

原创 tpcc-dbcp -- 基于java和apache dbcp实现的一个tpcc测试工具

1. 关于tpcc-dbcp之前学习mysql,经常使用percona开发的tpcc-mysql,模拟业务负载。但tpcc-mysql本身已经不更新了,只能支持mysql数据库,且数据加载时单线程的,大数据量装载数据非常慢。所以最近花了些时间,参考了tpcc-mysql,用java和apache的数据库连接池(dbcp),就有了tpcc-dbcp这样一个类tpcc-mysql的测试软件。相较于tpcc-mysql: - 支持多种数据库: MySQL, PostgreSQL, Oracle, DB2,

2021-01-18 16:52:41 423

原创 MySQL组复制学习笔记(基于MySQL 8+) -- 使用篇

3.1. 启动/停止可以通过start/stop group_replication来启动停止组复制进程.mysql> start group_replication; /* 启动MySQL组复制相关线程, 启动对应端口的监听, 如,33061 */mysql> stop group_replicaiton; /* 关闭MySQL组复制相关进程*/可以通过group_replication_start_on_boot变量来指定是否随着MySQL启动而启动, 如果组没有其他成员, 第一

2020-05-19 15:59:21 3395

原创 MySQL组复制学习笔记(基于MySQL 8+) -- 部署篇

组复制组内每个数据库服务器实例运行在单独的硬件主机上,这时推荐的部署方式,但这不是强制的。组复制首先需要安装3个MySQL数据库, MySQL8.0内建提供了组复制插件, 安装没有特殊要求, 本文不介绍。组复制最少需要3个MySQL服务器实例。2.1. 组复制的需求与限制组复制需求:1). 数据必须放在InnoDB存储引擎, 禁用除InnoDB之外的其他存储引擎, 对应的配置项: disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,

2020-05-13 17:41:33 375

原创 MySQL组复制学习笔记(基于MySQL 8+) -- 概述篇

前言: 本文主要翻译摘抄自<<MySQL 8.0 Reference Manual>>的"Group Replication"章节, 由于个人能力有限,肯定有理解不对的地方,仅供参考,官方文档写得很细,推荐细读。MySQL组复制(MySQL Group Replication, MGR)是MySQL在5.7.17 GA版本发布的数据库高可用解决方案(Group Replication is a technique that can be used to implement faul

2020-05-13 10:10:51 213

原创 OceanBase 2.2初体验

OceanBase是蚂蚁金服自研的分布式关系数据库,2019年国庆期间以6088万tpmC值的成绩,超越Oracle荣登TPC-C基准测试性能榜首。最近因为一些原因赶了趟时髦,体验了一把OceanBase,这年头不搞个什么云,大数据,人工智能,…都不好意思说自己是搞IT的,不会点python,都不敢说自己会编程…Oceanbase在0.4版本前是开源的,1.0版本后不再开源,目前可以在官网(ht...

2020-05-08 12:17:15 4591 1

原创 五岁生日快乐!

"Twinkle, twinkle, little star,How I wonder what you are.Up above the world so high,Like a diamond in the sky...."祝我们家的小星星五岁生日快乐,愿永远如砖石般闪耀,点亮夜空~...

2020-01-23 00:56:21 216

原创 通过snmp和syslog监控你的机房设备

大部分系统都通过日志系统来记录系统中发生的各种各样的事件,通过这些事件可以让我们了解系统发生过的重要信息(如告警, 错误等)。对系统日志的监控是运维的一个重要工作,对于中心级的机房,对于大量的设备逐个轮询方式检查不仅费时费力, 而其还不及时。目前有2种比较常用的主动日志推送方法,snmp trap和syslog协议。这2种协议也是目前大部分的设备和程序所内置支持的方式。1. 概述/架构Even...

2020-01-09 17:17:15 2105

原创 MySQL主从复制常见问题处理(基于percona-toolkit)

在MySQL主从数据复制环境中,常见得错误包括, 主键冲突(1062), 表或者数据库不存在(1146), 从库行不存在(1032),… 这通常是由于在从库执行了数据修改的语句或脚本, 把从库置为只读(read_only=1)可以减少这类错误,但是该参数对root用户无效,所以并不能完全避免。根源来说这类报错的原因在于主库和从库的数据不一致。网上涉及这类的文章很多,大部分(别人文档的搬运工)介绍...

2019-12-03 15:41:19 631

原创 BinlogMiner 1.1.2 版本发布

新版本说明BinlogMiner是一个基于Java语言开发,提供了一套可用于MySQL二进制文件分析的API和基于这些API实现的二进制日志分析挖掘工具。BinlogMiner 1.1.b版本的更新:增加了一个MySQL二进制文件分析程序(binlogparser), 相较于自带的mysqlbinlog, binlogparser有如下特性:– 可以基于GTID来指定需要解析的范围;–...

2019-11-29 10:33:02 137

原创 MySQL二进制日志分析-TABLE_MAP_EVENT

TABLE_MAP_EVENT用于描述即将发生变化的表的结构。当用户提交一条修改语句时(如, insert, update, delete),MySQL会产生2个Binlog事件: 第一个就是TABLE_MAP_EVENT,用于描述改变对应表的结构(表名, 列的数据类型等信息);紧接着的是ROWS_EVENT,用于描述对应表的行的变化值,后续会接着介绍。先看TABLE_MAP_EVENT的官方定...

2019-10-25 11:51:46 893

原创 MySQL二进制日志分析-QUERY_EVENT(包含代码实现)

QUERY_EVENT用于记录MySQL服务器中执行的SQL语句,早期版本无论是DDL还是DML的语句,都是记录在QUERY_EVENT中,如前文所说,由于基于语句的复制( statement-based replication - SBR)有很多问题,后续版本引入了ROWS_EVENT,DML语句可以基于值(行)复制(row-based replication - RBR)。基于语句的优势在于数...

2019-10-25 11:37:52 804

properies文件jdbc驱动

properies文件jdbc驱动

2024-04-02

空空如也

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

TA关注的人

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