Clay 的技术空间

用进废退 | 艺不压身

最左前缀原则的介绍

最左前缀原则指的是:使用组合索引(联合索引)时,查询条件需要从索引的最左列开始匹配,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效 (这一列后面的字段的索引会失效)。比如,针对 A、B、C 三个字段建立了一个组合索引,那么在写一个 SQL 时就一定要提供 A 字段的查询条件,这样才能让组合索引生效。这是由于在建立 A、B、C 三个字段的组合索引时,MySQL 底层的 B+ 树是按照 A、B、C 三个字段从左往右去比较大小进行排序的,也就是说 B+ 树的索引结构依赖于从左到右逐层递进地有序搜索路径。如果查询条件中缺少了最左边的列,B+ 树将无法确定初始的搜索路径,从而无法利用索引进行高效查询。

阅读全文 »

索引的介绍

索引概述

MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。简而言之,索引的本质是数据结构

阅读全文 »

查看整机系统性能

top

使用 top 命令,可以查看系统的负载情况,重点关注的是 %CPU%MEMload average 三个性能指标。

1
top
阅读全文 »

ES 优化

  • 索引优化

    • 映射(Mapping):合理设计索引映射,避免使用动态映射,并为每个字段明确指定数据类型。
    • 字段类型:对于不需要全文搜索的字段,使用 keyword 类型而非 text 类型。
    • 合并(Merging):通过配置 index.merge 参数优化段合并,以减少 I/O 开销。
    • 刷新间隔:调整 index.refresh_interval 参数,减少刷新频率以提高写入性能(默认是 1 秒,可以根据实际需要调整)。
  • 查询优化

    • 缓存:利用 ES 的节点查询缓存和过滤器缓存来加速常见查询。
    • 分片首选项:设置 preference 参数来避免每次查询都访问不同的副本,从而提高缓存命中率。
    • 分页:避免深分页,使用 search_afterscroll 来处理大量结果集。
阅读全文 »

前言

从 Qt 5.15 开始,Qt 的开源版本只支持在线安装,不再提供离线安装包。使用在线安装器可以安装 Qt 5.9 之后 Qt 5 和 Qt 6 的各个子版本。

Qt 的长期技术支持版本

  • Qt 6 发布后,Qt 5 仍然在更新,Qt 5 系列的最后一个长期技术支持版本是 5.15
  • Qt 6 系列的第一个长期技术支持版本是 6.2,包含了 Qt 框架中的所有模块。

官方下载地址

阅读全文 »

大纲

概述

高可用架构方案分类

高可用方案保证数据强一致性使用说明描述
主从复制支持单主只适用于对可用性和数据一致性要求较低的业务场景。
MMM支持单主基本淘汰了,在一致性和高并发稳定性等方面有些问题。
MHA支持单主有少数开发者还在用,但也有些问题,也是趋于淘汰的 MySQL 主从高可用方案。
MGR支持单主 / 多主基于 MySQL 官方从 5.7.17 版本开始引入的组复制技术。
MySQL Cluster支持多主 MySQL 官方提供的一种分布式数据库解决方案,只支持 NDB 引擎。
Galera Cluster支持多主引领时代的主从复制高可用技术。
Galera Cluster for MySQL支持多主 MySQL 对 Galera Cluster 的实现。
MariaDB Galera Cluster (MGC)支持多主 MariaDB 对 Galera Cluster 的实现。
Percona XtraDB Cluster (PXC)支持多主 Percona 对 Galera Cluster 的实现,目前业界使用 PXC 的会多一些。
MySQL InnoDB Cluster支持单主 / 多主 MySQL 官方推出的一套完整高可用性解决方案。
阅读全文 »

前言

在开发过程中经常会遇到这样一个问题,每天或者每月必须定时去执行一条 SQL 语句,下面这篇文章主要给大家介绍如何使用 MySQL 自带的事件调度器定时执行 SQL 语句。

启用事件调度器

查看事件调度器的运行状态

1
show variables like '%sche%';

阅读全文 »

大纲

前言

本文主要介绍 SpringBoot 3 如何使用 AOT 技术,包括在 Windows、Linux 平台使用 GraalVM 将 SpringBoot 应用编译成原生镜像(二进制可执行文件)。

AOT 与 JIT

  • AOT:Ahead of Time(提前编译),程序执行前,全部被编译成机器码
  • JIT:Just in Time(即时编译),程序边编译边运行

编译器与解释器

编程语言的分类

  • 编译型语言:依赖编译器 (Complier),如 C、C++
  • 解释型语言:依赖解释器 (Interpreter),如 JavaScrpt、Python
阅读全文 »

大纲

前言

本文主要介绍 SpringBoot 3 如何整合 Actuator、Prometheus 与 Grafana,实现微服务应用的监控。

官方文档

概念介绍

可观测性

可观测性 (Observability) 一般是指对线上应用进行观测、监控、预警等,包括的详细内容如下:

  • 健康状况:组件状态、存活状态等,属于 Health 范畴
  • 运行指标:CPU、内存、垃圾回收、吞吐量、响应成功率等,属于 Metrics 范畴
  • 链路追踪
  • ……
阅读全文 »