拒绝双写失控:用 Lindorm 数据订阅梳理一致性方案

双写问题的核心难点不在“写两次”,而在两个独立系统之间如何拿到可接受的一致性。本文把并发双写、先写消息、先写数据库三种方案拆开说明,再结合 Lindorm 数据订阅,解释为什么在既要数据库强一致读、又要下游异步分发时,DB->Binlog->Kafka 是更实用的选择。

拒绝双写失控:用 Lindorm 数据订阅梳理一致性方案

SQL 嵌套超过三层时如何重构

SQL 嵌套超过三层,问题往往不只是“难读”,还可能在解析、优化和执行阶段直接踩到数据库限制。本文按 CTE、临时表、JOIN 替换和视图拆链四个场景,整理一套可落地的重构判断方法,帮助你在改写 SQL 时同时兼顾正确性、可维护性和性能。

SQL 嵌套超过三层时如何重构

SQL 子查询如何识别数据断档

子查询并不会自动识别“数据断档”,真正决定结果的是你如何把“前驱缺失”“区间补全”这类对比关系写清楚。本文围绕 `NOT EXISTS`、`EXCEPT`/序列生成,以及模拟 `LAG()` 的常见陷阱,梳理不同数据库里的可用写法、适用前提与性能边界。

SQL 子查询如何识别数据断档

怎样用 SQL 条件聚合生成横向统计报表

在 SQL 里做横向统计报表时,`SUM(CASE WHEN ...)` 往往比 `PIVOT` 更实用,因为它跨数据库可用、逻辑直观,也更方便处理空值与动态分类。本文结合常见踩坑,说明何时该用 `SUM`、何时该用 `MAX` 或 `COUNT`,以及分类不固定时该怎样设计。

怎样用 SQL 条件聚合生成横向统计报表

PostgreSQL 14 如何创建 SQL 触发器函数:返回规则、动态 SQL 与性能要点

在 PostgreSQL 14 里,SQL 触发器函数有几条不能踩的硬规则:返回类型必须是 `TRIGGER`,结尾必须返回 `NEW`、`OLD` 或 `NULL`;动态 SQL 里表名、列名要用 `format('%I', ...)`;`NEW` 和 `OLD` 只能按 `TG_OP` 对应场景访问。再加上行级触发器在批量更新时的性能成本,这些细节决定了触发器是稳定运行还是一上生产就报错。

PostgreSQL 14 如何创建 SQL 触发器函数:返回规则、动态 SQL 与性能要点

CentOS 上优化 ThinkPHP 响应时间的实用思路

在 CentOS 上优化 ThinkPHP 响应时间,关键不在单点调参,而在于把 Web 服务器、PHP-FPM、代码访问路径、数据库和缓存放到同一条链路里看。本文按可落地的排查顺序整理常见优化手段,并说明哪些参数需要结合并发、内存和日志数据来判断。

CentOS 上优化 ThinkPHP 响应时间的实用思路

ThinkPHP 项目在 CentOS 上如何进行性能测试

在 CentOS 上给 ThinkPHP 项目做性能测试,重点不只是“跑一遍压测”,而是保证环境一致、场景真实、指标可解释。本文按准备、工具使用、监控分析到优化落地的顺序,整理出一套可直接执行的方法,帮助你判断瓶颈究竟出在接口、系统资源还是数据库。

ThinkPHP 项目在 CentOS 上如何进行性能测试

如何使用 SQL LTRIM 函数清除字符串左侧空格

LTRIM 常被拿来清理字符串左侧空格,但它的适用范围其实很窄:只处理 ASCII 空格,跨数据库支持也不一致。本文按“能不能用、为什么没效果、会不会拖慢查询、迁移时怎么替代”四个问题梳理 SQL Server、MySQL 和 PostgreSQL 中的正确写法与避坑点。

如何使用 SQL LTRIM 函数清除字符串左侧空格