自定义博客皮肤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)
  • 收藏
  • 关注

原创 Vert.x,Web - Router

Vert.x-Web是用于构建Web应用程序的一系列模块,可以用来构建经典的服务端Web应用, RESTful应用, 实时的(服务端推送)Web应用,或任何您所能想到的Web应用类型。Vert.x Web的设计是强大的,非侵入式的,并且是完全可插拔的,可以只使用您需要的部分。Vert.x Web不是一个Web容器。要使用Vert.x Web,需要添加"vertx-web"依赖:</</</</

2024-10-10 11:07:33 321

原创 Vert.x,Databases

Vert.x提供了数据库相关模块(扩展包),方便我们通过异步方式访问数据库。数据库扩展主要包括:响应式数据库客户端(vertx-xxx-client)和通用JDBC客户端(vertx-jdbc-client)。响应式数据库客户端是事件驱动和非阻塞的,可以仅仅使用一条线程来处理大量的数据库连接。专注于可伸缩性和低开销。这些客户端还内置连接池,提供了更简单易用的API。

2024-09-27 19:31:22 507 1

原创 Vert.x,Core - Verticle and Event Bus

Verticle是由Vert.x部署和运行的代码块。Verticle实例可使用任意Vert.x支持的编程语言编写,可以将Verticle想成Actor Model中的Actor。可以将Verticle理解成一个可以独立热部署的组件(模块),一个应用程序通常是由在同一个Vert.x实例中同时运行的多个Verticle实例组合而成。不同的Verticle实例通过向Event Bus(后面会介绍)上发送消息来相互通信。

2024-09-26 17:18:01 941

原创 Vert.x,Core - Future

在同步编程(synchronous programming)中,当调用一个方法,方法的调用者(线程)需要一直等待,直到方法结果返回。而在异步编程(asynchronous programming)中,通过异步方法,方法的调用者不需要等待结果返回,当结果就绪时候会通知我们。Vert.x的提供的API大都是异步的,调用并不需要等结果返回。假设一个业务逻辑需要A() -> B() -> C() -> D() 这4个调用来完成,他们调用有向后顺序,后一个调用依赖前一个调用的结果。

2024-09-23 17:05:46 612

原创 Vert.x,Core - 黄金法则

Vert.x的核心Java API被我们称为Vert.x Core, 提供了Vert.x底层功能。对于Maven项目可以通过以下方式添加依赖:

2024-09-21 16:42:03 747

原创 Vert.x, 简介

Vert.x是Eclipse基金会下的一个开源项目,基于Eclipse Public License(EPL)2.0和Apache License 2.0双重许可,是一个基于JVM的用于构建响应式(reactive)应用程序的工具包。Vert.x基于Netty,但不仅仅局限于开发可扩展的高性能网络服务器和客户端。

2024-09-18 18:54:41 830

原创 Vert.x, 异步编程和响应式系统

最近准备写一个Vert.x的系列专题,将自己的理解分享给大家,也想通过笔记整理编写加深自己的理解。

2024-09-13 19:16:41 1035

原创 通过Java调用OceanBase云平台API

最近由于工作原因又开始捣鼓OceanBase,OceanBase云平台(OCP)提供了强大的管理和监控功能,而且对外开放API接口,可以将部分监控整合到自己的平台,所以写了个Java调用OCP API的demo做为自己的技术储备,也想分享给大家。也因为最近对Eclipse Vertx和异步编程非常兴趣,所以案例使用是Vertx的WebClient,而非Apache HttpClient, 不过,不管用什么库,原理是相似的。

2024-07-05 15:44:46 1258

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

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

2024-04-02 15:39:08 309

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

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

2023-08-15 11:29:13 1208

原创 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 352

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

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

2023-08-14 17:25:13 275

原创 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 189

原创 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 267

原创 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 213

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

InnoDB的FIL_PAGE_INDEX物理结构解析。

2023-08-11 17:39:55 286

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

InnoDB数据文件解析。

2023-08-11 16:54:09 268

原创 解析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 763

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

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

2023-04-10 17:21:52 2959

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

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

2022-09-07 09:47:41 984

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

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

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

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

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

2022-03-25 16:39:41 2167

原创 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 696

原创 Spring基础入门8 - Spring Boot

Spring Boot入门1

2022-03-17 09:48:29 370

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

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

2022-02-08 16:38:28 1028

原创 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 1255

原创 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 462

原创 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 291

原创 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 301

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

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

2022-01-20 10:52:48 204

原创 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 268

原创 使用Springboot重写了EventCentral。

Springboot重写EventCentral。

2022-01-17 11:01:38 454

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

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

2021-11-26 17:49:17 3127

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

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

2021-08-16 16:51:43 524

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

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

2021-08-04 15:42:02 274

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

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

2021-07-30 18:46:01 469 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 481

原创 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 484

原创 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 3569

原创 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 444

通过Java调用OceanBase云平台API代码

通过Java调用OceanBase云平台API代码

2024-07-05

properies文件jdbc驱动

properies文件jdbc驱动

2024-04-02

空空如也

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

TA关注的人

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