Java 开发 / 数据库

Error running jOOQ code generation tool: com.mysql.cj.jdbc.Driver..

Java 开发

压测工具 JMeter 实操

Java 开发

线上定时任务全部罢工

Java 开发

多种状态字段的查询性能优化案例

Java 开发 / 数据库

[升级版]通过 Jdbc + Job 解决跨库大表数据迁移

3月29日 · 2020年

线上 JVM 堆内存不足引发BeanCreationNotAllowedException

286 0
线上 JVM 堆内存不足引发BeanCreationNotAllowedException背景某个周六的中午,领导突然找我说线上有大量报错,让我看一下。我发现日志中出现了很多下面的报错信息,而且持续了一段时间(后面才发现收到了告警邮件,但是当时手机没有提醒,强行甩锅...):...
3月27日 · 2020年

多种状态字段的查询性能优化案例

268 0
多种状态字段的查询性能优化案例前提问题当分页查询消息的时候,会查询符合条件的消息total数量,这个操作在查询消息数量比较多的时候,很容易出现timeout(从库查询一万多条消息,count 一下,需要90多秒),经查证,是现有receiver_visible_roles字段导致的:receiver_visible_roles存储:目前这个字段是存了5种角色的可见性,1代表可见,0代表不可见,从高位到低位依次代表:E、D、C、B、A。假如A、B可见,其余角色不可见,则存储00011。receiver_visible_roles查询:假如查A、B可见,其余角色没有限制,则需要 in (00011, 00111, 01011, 01111, 10011, 10111, 11011, 11111),虽然该字段建有索引,并用到了索引,但还是很慢。另,假如再新增角色,查询性能会更慢......
3月20日 · 2020年

[升级版]通过 Jdbc + Job 解决跨库大表数据迁移

281 0
前面写过一篇通过 Jdbc + Job 解决跨库大表数据迁移,那只是个初始版本,后面对其进行了优化改造,数据迁移性能大幅度提升。优化点单实例 Job 优化为多实例 Job单线程优化为多线程普通偏移优化为分段偏移...
3月17日 · 2020年

Redis中通过scan命令获取key、value【Java实现】

871 0
需求:通过 Job 每秒去 Redis 中获取 Key 前缀为:“message:xxx:yyy:id: ”的所有 Value,Value以字符串类型存储,键值对存储量级:几百万。 Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的 Key 的信息,有两种方式:1、通过 keys 命令,简单粗暴,由于Redis单线程这一特性,keys 命令以阻塞的方式执行。keys 命令通过遍历查找,时间复杂度是 O(n)。Redis 库中 key 的数量越多,查找实现的代价越大,产生阻塞的时间越长。2、通过 scan 命令,以非阻塞的方式实现 key 值的查找,绝大多数情况下是可以替代 keys 命令的,可选性更强。...
1月27日 · 2020年

通过 Jdbc + Job 解决跨库大表数据迁移

577 0
将 scala 项目重构为 Java 微服务,在进行读迁移时,其中有一块业务数据量是亿级别的,需要进行跨库数据迁移(注意:表结构发生了很大变化),并且在迁移过程中尽量做到不停服迁移。针对亿级别的数据量级,肯定不能使用脚本迁移的方式迁移,更不可能使用 mysqldump 命令进行导入导出进行数据迁移。网上还有以导入导出文件的形式迁移百万级数据,但是这个操作需要修改 mysql 的配置,保险起见,直接 pass ...最终,选择通过 Jdbc 配合 Job 在双写阶段进行数据迁移,待数据迁移基本完毕,并且数据一致性校验没问题后,再进行读迁移的上线(此时,只需要业务方上线,将读切换到现在的微服务即可)。...
1月9日 · 2020年

@Transactional 事务提交之后执行 @Async 修饰的方法

1059 0
一个 @Transactional 修饰的方法A 的内部要调用另一个用 @Async 修饰的方法B,并且方法B 要在方法A 的事务提交之后,异步执行,大概就是下面代码这样。方法A 和 方法B 假如在同一个类中,则方法B 的 @Async 注解会失效:首先解释下 @Transactional 注解失效的原因:Spring 在扫描 bean 的时候会扫描方法上是否包含 @Transactional 注解,如果包含.....
12月18日 · 2019年

异步并发利器:CompletableFuture、parallelStream

962 0
生产上 prometheus 频繁告警java.net.SocketTimeoutException: timeout(远程调用超时),首先确定是哪个接口,后查看 Hystrix 的配置,发现 A 服务对 B 服务设置的超时时间是20s(一开始是没有发现未启用这个配置的),故一直在 review B 服务的这个超时的接口,一开始是在整个接口上,接口内部的 IO 操作、MQ 操作上都做了时间差的日志打印操作,发到线上后,发现有的请求达到了10s 多,但是 Hystrix 配置的超时时间是 20s 呀,百思不得其解,眼下做的只能是赶紧优化下 B 服务的这个超时接口了(毕竟耗时太严重了)。...
12月15日 · 2019年

Error running jOOQ code generation tool: com.mysql.cj.jdbc.Driver..

675 0
今天在用 JOOQ 生成代码的时候,即运行 mvn clean install 命令时,出现以下错误,代码中指定的驱动明明是“com.mysql.jdbc.Driver”,但是报错信息中显示的确是驱动“com.mysql.cj.jdbc.Driver”。经搜索,com.mysql.jdbc.Driver 是 mysql-connector-java 5 中的com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6 及以上版本中的.....
12月6日 · 2019年

压测工具 JMeter 实操

653 0
Apache JMeter是一个Apache项目,可以用作负载测试工具,用于分析和衡量各种服务的性能,重点是Web应用程序。 JMeter可用作JDBC数据库连接,FTP,LDAP,Web服务,JMS,HTTP,通用TCP连接和OS本机进程的单元测试工具。...
12月3日 · 2019年

SpringBoot 中 @Scheduled 的执行原理

1082 0
前面有篇文章是“线上定时任务全部罢工”,本文主要从代码的角度分析下原因。注解 @Scheduled 的执行原理 1、加载所有使用 @Scheduled 注解的类及方法。Spring 首先会通过类 ScheduledAnnotationBeanPostProcessor 的 postProcessAfterInitialization 方法去初始化 bean,待初始化完 bean 后,就会拦截所有用到“@Scheduled”注解的方法,进行调度处理,具体细节请看下面代码:.....