多线程编程中,数据竞争是最隐蔽的 bug 来源。C++11 的
std::atomic提供了原子变量,但真正的复杂性藏在memory_order参数里。本文从 CPU 缓存和编译器优化的视角,解释为什么原子操作需要内存序,以及 acquire/release/relaxed 等序的区别。
InnoDB 是 MySQL 最成熟的存储引擎,覆盖了绝大多数 OLTP 场景。MyRocks 基于 RocksDB(LSM-tree),在 InnoDB 已经足够好用的前提下仍被 Meta、Percona 等公司引入生产,原因只有一个:它在特定负载下能用更少的磁盘 I/O 完成同样的工作。本文从 InnoDB 的结构性开销出发,说明 LSM-tree 如何针对性地缓解这些开销,以及 MyRocks 为此付出的代价。
多版本并发控制的核心问题只有一个:给定一个读操作,它能看到哪些写?解决这个问题的通用答案是时间戳——每次写入打上时间戳,每次读取携带一个时间点,凡是在该时间点之前已提交的写入均可见,之后的均不可见。这套模型的关键在于"时间"由谁提供、如何分配、以及存储层如何按时间戳组织和检索数据版本。本文从授时服务出发,梳理
txn_start_ts/read_start_ts两个核心概念,再对比 RocksDB(MyRocks / TiKV)与 InnoDB 在版本存储和可见性判定上的不同选择。
handler是 MySQL Server 与存储引擎之间的唯一接口层。执行器通过handler的虚函数调用读写数据,存储引擎只需实现这套接口即可接入 Server,而无需感知 SQL 解析与优化的细节。本文梳理handler接口的六个分族,重点分析事务族为何在handler(per-table)与handlerton(per-connection)上混合挂载,以及这种设计选择背后的事务语义约束。

MySQL 的架构可以沿 Client → Server → Engine 三段来看。Client 负责连接管理和协议编解码,Server 负责 SQL 解析、优化和执行调度,Engine(主要是 InnoDB)负责数据的实际存取。当单机到达瓶颈后,DB Proxy、DB Agent、读写分离、分库分表等方案会嵌入 Client 和 Server 之间。
Runtime Filter 是一种动态查询优化技术,通过在查询执行过程中生成过滤条件,提前过滤不必要的数据,显著减少数据扫描量和网络传输,提升 JOIN 查询性能。
一致性协议是分布式系统的基石,它确保多个节点在面对网络分区、节点故障等异常情况下,仍能对系统状态达成共识,保证数据的正确性和系统的可用性。
本文讨论unix中的系统调用open()与其阻塞模式,具体为O_NOBLOCK 标记的添加与否对于读FIFO命名管道造成的影响。
本文详细介绍了基于 VuePress Plume 主题的博客站点的完整 CI/CD 自动化部署方案,包括 Jenkins 容器化部署、GitHub Actions 触发、构建优化以及常见问题的解决方案。
本文讲解了字典树的结构和实现方法。字典树是一种用于处理字符串集合的数据结构,特别适用于前缀查询和自动补全等应用。
本文讲解了堆的概念和实现方法。
JWT实现了服务器侧的无状态,一种用于在网络应用场景中安全地传输声明的开放标准(RFC 7519)。它可以用于身份验证、授权信息传递或信息加密传输等场景。
跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的Web安全漏洞。攻击者通过在网页中注入恶意的客户端脚本,使其在用户的浏览器上执行,从而获取用户的敏感信息,如Cookie、会话令牌等,或者执行其他恶意操作。
Session 技术是为了解决 HTTP 协议无状态 问题而产生的:当用户访问网站时,需要将“用户身份”或“临时数据”跨多个请求进行持久化存储。Session 本质上是一种“服务器端保存数据 + 客户端保存一个会话标识(Session ID)”的方案。
![]()
Keep evolving.
yangpu shanghai
fudan university