山地车骑行

为了避免自己国庆在家瘫七天,总想着给自己整点活。作为一个社恐的肥宅,脑子中只有两个想法,一个是爬山,一个是骑行。这俩都属于那种不多逼逼,干就完事了的活动。

各类数据库获取执行计划的方式

本文仅介绍各类数据库执行计划的获取方式,执行计划内容的解读请参照官方文档

创建示例表 test,对应 DDL 语句如下

SQL> create table test (id int primary key, name varchar(20))

PostgreSQL/Kingbase(人大金仓)

SQL> explain [(format [json|yaml|text])] select * from test
  • format 参数是可选的,但是格式化之后的数据可以方便通过代码读取
  • 支持的 SQL 类型 SELECT,INSERT,UPDATE,DELETE,VALUES,EXECUTE,DECLARE,CREATE TABLE,CREATE MATERIALIZED VIEW

不添加 format 参数的结果

自动生成 Excel 列标

最近开发中涉及到将结果导出到 Excel 文件的功能,我看了一下现有的这些操作 Excel 的开源项目,无论是 Golang 还是 Python,基本上都不支持一次性插入一行数据,只能通过指定 cell 位置来一个个插入,而一个 cell 的位置基本包含这三项(sheet 名,列标,行号),sheet 名好说,毕竟是我自己生成的名字;行号也比较方便拿到;但是列标就有一丢丢蛋疼了,都是由字母拼成的,既然没有现成的实现,就只能自己实时计算了。

利用 Swagger UI 生成漂亮的接口文档

最近在跟前端进行对接的时候,规定了后端每个接口都必须要写接口文档,并且必须生成对应的 .json/.yaml 文件,这样他们就可以通过接口文件直接生成对应的 ts 文件,能够准确的进行接口参数的对接。这一部分现在我已经通过 Gitlab CI + 文件服务器的方式实现了。

关于 Alertmanager 中 group_interval 与 repeat_interval 上的一些坑

Alertmanager 中有三个关于告警时间的参数:

  1. group_wait:alertmanager 在接收到一条新的告警(第一次出现的告警)时,将这条告警发送给 receiver 之前需要等待的时间
  2. group_interval:对于一条已经出现过的告警,alertmanager 检查会每隔 group_interval 时间检查一次告警
  3. repeat_interval: 对于一条已经出现过的告警,每隔 repeat_interval 会重新发送给 receiver

这三个参数的基础含义比较简单,但是在最近的使用中,我发现当我按照如下格式设置这三个参数时: