7AA7 博客

数据库

MySQL、Redis 等数据库的优化与运维。

雾梨 Mist 2026-10-20 UID:84

用内容哈希做重复文件检测:从思路到实现

数据库

磁盘清理里最实在的一块是找重复文件:照片导了两遍、下载目录和文档目录有同一份 PDF、备份目录里躺着历史版本的全家福。按文件名找是不可靠的,按内容找才准——而"按内容"这件事,工程上就是哈希。这篇文章把重复文件检测的完整思路走一遍,从筛选策略到索…

188 0 3
雾梨 Mist 发布于 · 2026-10-20
苏念禾 2026-10-20 UID:79

NoSQL 选型思考:文档、键值与关系型的边界

数据库

"NoSQL" 这个词覆盖面很宽,键值存储、文档库、列族数据库、图数据库都算,彼此之间的差异比它们和关系型数据库之间的差异还要大。讨论选型时如果说"我们要用 NoSQL",这句话本身几乎不含信息量。真正有用的问题是:这个业务问题的数据访问模式是什么,哪一…

195 0 2
苏念禾 发布于 · 2026-10-20
VectorQ 2026-10-19 UID:96

事务与隔离级别:脏读、不可重复读与幻读

数据库

ACID 四个字母里,A、C、D 在工程上相对好验证:原子性靠日志回滚,持久性靠刷盘策略,一致性是业务与约束共同保证的结果。真正让人头疼的是 I——隔离性。它的定义本身就带着妥协:完全隔离等价于串行执行,性能不可接受;降低隔离又会引入各种读写异常。工程…

830 0 6
VectorQ 发布于 · 2026-10-19
Cache 孙 2026-10-18 UID:133

数据库事务日志:WAL、redo 与 undo 的作用机制

数据库

把某一行从 1 改成 2,如果直接改磁盘上的数据页,这是一次随机写。数据库每秒要改成千上万行,数据页在磁盘上的位置又是分散的,全靠随机写会立刻碰到 IOPS 上限。日志的作用就是把这个随机写换成顺序写。 为什么需要 WAL 顺序写和随机写不在同一个量级:机…

2.3k 0 8
Cache 孙 发布于 · 2026-10-18
Elowen 2026-10-17 UID:81

慢查询优化:从 EXPLAIN 开始排查

数据库

慢查询排查是个有固定套路的活:先从慢查询日志里找到嫌疑人,用 EXPLAIN 看它打算怎么执行,判断问题出在索引、写法还是表结构上,改完再验证。整条链路里,EXPLAIN 是承上启下的一步——它不能告诉你语句有多慢,但能告诉你为什么慢。这篇文章把这条链路的每…

333 0 6
Elowen 发布于 · 2026-10-17
码同客 2026-10-16 UID:88

Redis 数据结构实战:五种基础类型的使用场景

数据库

Redis 的价值不在于"快"本身,而在于它把一组精心挑选的数据结构放在了内存里,并且保证了单个命令的原子性。用好 Redis 的关键,是让业务模型尽量贴合这些结构的原生语义——一旦发现需要在客户端把多个命令拼成一个"复合操作",就该停下来想想选型是不是出了…

273 0 3
码同客 发布于 · 2026-10-16
Moon 槐 2026-10-16 UID:80

备份与恢复演练:RPO/RTO 的落地

数据库

备份脚本每天在跑,日志显示成功,监控面板上一片绿色。直到某天需要真正用它恢复数据的时候,才发现文件是坏的、binlog 有断档、或者恢复出来少了几个小时的记录。备份本身不产生价值,能被成功用于恢复的备份才产生价值。 先把两个指标定义清楚 RPO(Recov…

1.8k 0 13
Moon 槐 发布于 · 2026-10-16
逻辑熵 Logic 2026-10-16 UID:93

MySQL 索引入门:B+ 树、联合索引与最左前缀

数据库

索引是数据库性能问题里被讨论得最多、也最容易被误解的一层。很多线上慢查询的根因不是"没加索引",而是"加了索引但没用上",或者"用了索引但代价比想象中高"。想把索引用明白,得先理解它在磁盘和内存之间是怎么组织数据的,再回头看 SQL 语句里那些看似随…

483 0 4
逻辑熵 Logic 发布于 · 2026-10-16
逻辑熵 Logic 2026-10-12 UID:93

时序数据库入门:写入模型与降采样

数据库

监控系统每秒采集几十万个指标点,把这些点塞进关系库里,一个月后表会撑到无法维护。时序数据有自己的形状:写多、几乎不更新、按时间追加、查询几乎总是时间范围加几个维度过滤。针对这种形状专门设计的存储引擎,与通用行存的取舍差异很大。 时序数据的四…

1.3k 0 4
逻辑熵 Logic 发布于 · 2026-10-12
Schema 李 2026-10-09 UID:130

数据库连接池原理:连接数不是越多越好

数据库

线上服务响应变慢,第一反应往往是"连接池不够用,调大最大连接数"。调完可能确实缓解,也可能更慢,甚至把数据库拖垮。连接池的参数不是孤立的,它连接的是应用侧并发模型与数据库侧执行模型两端。理解两端的成本结构,才能知道连接数该定多少。 一条连接的…

2.2k 0 9
Schema 李 发布于 · 2026-10-09
江眠 2026-10-04 UID:120

读写分离与主从延迟:一致性的工程处理

数据库

读写分离通常是数据库扩展的第一步:写走主库,读分摊到多个从库。收益立竿见影,问题也很隐蔽——主从之间的数据不是同步到达的,业务读到的可能是几毫秒前的旧数据。多少业务能容忍这个"旧",是设计阶段必须回答的问题。 复制链路的基本模型 以 binlog 复制…

2.1k 0 8
江眠 发布于 · 2026-10-04
江眠 2026-09-28 UID:120

分库分表的时机与代价

数据库

数据量涨到一定规模,团队会开始讨论要不要分库分表。这个决定几乎不可逆——一旦上线,路由逻辑、运维方式、故障排查路径都会改变。动刀之前值得先把"为什么现在要拆"和"不拆还有什么办法"想清楚。 先确认真的需要拆 单表变大带来的压力,很多时候不是非靠拆…

275 0 1
江眠 发布于 · 2026-09-28
雾梨 Mist 2026-09-28 UID:84

数据库迁移:跨库数据同步与一致性校验

数据库

迁移的困难不在搬数据,而在搬的过程中源库还在被写入。两边同时有写入,就必须在"业务不能停"和"数据不能错"之间找一条可执行路径。所有迁移方案本质上都在安排这两件事的顺序。 三类场景,难度差很多 场景 典型动因 主要难点 可行路径 同构升级 版…

629 0 4
雾梨 Mist 发布于 · 2026-09-28
Elowen 2026-09-26 UID:81

大表 DDL 的在线变更方案

数据库

给一张几百 GB 的表加个字段,开发以为是一行 SQL 的事,DBA 知道这可能是几小时的磁盘 IO 和一次业务抖动。搞清楚 DDL 背后的执行路径,才能判断一次变更到底需要多少资源、会不会阻塞业务。 DDL 为什么会锁表 原因有两类。 第一类:元数据锁(MDL)。任何…

2k 0 19
Elowen 发布于 · 2026-09-26
朔风 2026-09-26 UID:67

执行计划进阶:JOIN 顺序与驱动表选择

数据库

一条三表 JOIN 的慢查询,加索引之后可能依然很慢。原因往往不在索引本身,而在优化器挑选了错误的驱动表或者 JOIN 顺序——一旦外层产生的结果集远大于预期,内层的索引再好,也只是被执行了更多次。 优化器是怎么挑 JOIN 顺序的 对于一张 join 涉及到的表,…

934 0 3
朔风 发布于 · 2026-09-26
Cache 孙 2026-09-19 UID:133

JSON 字段与半结构化数据的存储取舍

数据库

现代关系库都提供了原生 JSON 类型:MySQL 的 JSON、PostgreSQL 的 jsonb。它让"先上线再说"变得非常容易——不用改表结构就把业务属性塞进去了。问题是这类字段用久了,往往会变成查询瓶颈的来源,而改造成本随数据量增长。 什么时候 JSON 字段是合理的 属性…

745 0 4
Cache 孙 发布于 · 2026-09-19