工程实践 PlanetScale Blog 2026/09/28
文章以 PlanetScale 的 Neki 分片方案为背景,讨论多租户场景下的热分片问题:按 tenant_id 均匀分布租户在业务增长后会失效,出现超大租户压垮单个分片、跨租户查询增多等情况,即租户均匀不等于数据均匀。作者引用 Slack 使用 Vitess 的真实案例,说明 messages 表从按 workspace 分片改为按 channel 分片后,把常用的单分片查询保持在一起、把跨分片查询限制在批量或管理路径,从而降低热点并获得 CPU 与存储余量。文中给出三级处置路径:纵向扩容、按 key range 隔离大租户,以及最终按访问模式和查询形状重新分片部分表,并说明 Neki 用声明式 data topology 与在线 Reshard 在不停机的情况下迁移数据。边界在于内容带有产品宣传色彩,缺少性能基准和失败案例,Postgres 与 MySQL 的表述也略有出入,读者需结合自身系统验证。
推荐收录:文章把热分片的成因与三类处置路径(扩容、按 key range 隔离大租户、按访问模式重分片)讲得具体,并给出 Slack/Vitess 的迁移决策依据与 key range 配置示例,可迁移到多租户 SaaS 的分片键复审。适合负责分库分表、租户隔离与在线扩容的工程师和架构师;但结论围绕厂商产品,缺少量化基准,引用前需自行压测验证。
工具笔记 ClickHouse Engineering 2026/09/11
文章介绍如何借助 clickhouse-local 与 ClickHouse 的 mysql 表函数,把 S3 上的 StackOverflow 投票 Parquet 数据直接写入并在 MySQL 中查询,因为 MySQL 本身没有原生导入 Parquet 的方式。作者用 Docker 启动 MySQL 8.4,下载 ClickHouse 二进制,并通过 ch-config.yaml 定义命名集合 mysql_demo 保存连接凭据。核心步骤包括用 DESCRIBE url() 探查 Parquet schema、在 MySQL 建表,再执行 INSERT INTO FUNCTION mysql(...) SELECT ... FROM url() 导入约 230 万行数据。文章重点区分两种查询方式:在 FROM 中写 ClickHouse 子查询时,ClickHouse 会解析并改写成 MySQL 合法 SQL;而通过 query() 传入字符串则原样下发,因此含 tuple 等 ClickHouse 特有函数会直接报错。作者也说明示例为本地演示环境,凭据以明文参数传入,生产系统应改用环境变量。
推荐收录,因为它给出可复现的完整方法,解决 MySQL 无法原生导入 Parquet 的真实数据搬运问题,并明确划出 mysql 表函数的两条边界:ClickHouse 子查询会被改写为 MySQL SQL,而 query() 字符串原样下发,这一区别容易踩坑。适合做 ETL、跨库迁移或用 clickhouse-local 做临时数据处理的工程师参考,命名集合与批量 INSERT 写法可直接迁移;不足是偏操作步骤,性能与生产安全约束讨论有限。
工程实践 PlanetScale Blog 2026/08/31
文章以GitHub面试题为引,解析了一个真实数据库故障链路:一个应用异常导致事务未提交,连接持有读锁;随后一个需要排他锁的schema change被阻塞,而后续所有对同一表的查询都排队等待,最终整个应用无法执行查询。作者用Postgres和MySQL的例子逐步复现了该过程,并指出根因之一是Postgres默认关闭的idle_in_transaction_session_timeout。文章随后介绍了PlanetScale提供的连接管理工具,包括Dashboard和CLI,可以查看阻塞连接、取消查询、终止事务或断开连接,并强调了保留管理连接以应对连接耗尽场景的设计。最后也涉及了该场景下如何避免锁等待以及Vitess在线DDL的优势,但文章带有明显的产品推广倾向。
文章清晰还原了未提交事务阻塞迁移并拖垮整个数据库的典型故障链路,提供了可复现的实验步骤和根因解释,对数据库运维、DBA和应用开发者都有直接参考价值。虽然结尾有PlanetScale产品推广,但核心的技术分析和锁排队原理可迁移到任何关系型数据库场景,值得收录。
工程实践 TiDB 社区博客 - 实践案例 2026/08/27
作者结合TiDB免费认证学习经历,对TiDB与OceanBase做了MySQL语法兼容性对比测试。测试围绕外键关联表、RANGE/LIST/HASH及复合分区表、在线索引DDL、前缀索引和存储过程等对象的DDL/DML展开,并检查执行计划与错误提示。结果显示两者对MySQL基本语法均兼容,都支持外键约束、普通分区和在线加索引;差异在于TiDB不支持复合分区与存储过程,OB支持;索引选择路径与报错信息也有不同。文章给出完整测试SQL、版本信息和结果截图,但未涉及性能、事务隔离、复杂查询等场景,对比深度停留在功能支持层面,且针对特定版本,结论时效性有限。
文章以可复现的SQL脚本和截图直接对比TiDB与OceanBase在MySQL兼容性上的功能差异,覆盖外键、分区、索引和存储过程等迁移常见场景,对分布式数据库选型和MySQL业务迁移评估有直接参考价值。适合DBA、架构师和迁移项目成员;测试方法可迁移,但结论基于特定版本,使用时需结合最新版本文档复核。
工程实践 TiDB 社区博客 - 实践案例 2026/08/13
文章复盘学科网阅卷系统从 MySQL 迁移到 TiDB 的实践,背景是业务具有峰谷特征、单机 MySQL 主备集群出现容量与性能瓶颈,同时研发资源有限无法改造代码。作者详细说明选型 TiDB 的关键理由:高度兼容 MySQL 实现零代码迁移、在线 DDL 不阻塞业务、弹性扩缩容适配流量波动、Raft 多副本保证数据强一致。迁移采用分批策略,优先将大表和主从延迟严重的表迁入,收益包括缓解并发压力、消除切换数据不一致风险、节省磁盘空间并避免分库分表改造。文中还总结了扩容规划、小表热点处理、低峰版本升级和索引优化等运维经验。该方案尤其适合教育行业等需要兼容 MySQL 且短时高并发的场景,但需注意跨 AZ 缩容的数据分布和热点小表的处理。
推荐收录,因为文章提供了真实业务约束下的数据库选型、迁移和运维全过程,包含零代码改造、在线 DDL、强一致、扩容规划、小表热点等具体细节,不是泛泛的技术宣传。适合数据库架构师、SRE 以及教育行业技术负责人参考,其“先兼容迁移、争取时间”的平滑演进思路可迁移到其他受限于 MySQL 单机瓶颈且短期无法大改代码的团队。
工程实践 PlanetScale Blog 2026/08/07
文章复盘了一次 MySQL 生产事故:一个长事务导致 InnoDB 版本历史膨胀,使读查询成本随并发量平方级增长,最终拖垮数据库。作者运用 Gunther 通用可伸缩性定律解析了争用系数 α 与一致性开销系数 β,阐明为何超过临界并发数后吞吐量反而下降。解决方案是将 Vitess 事务池从一万降低到约一千并引入排队,模拟原有线程池的反压行为,从而避免大量并发请求涌入存储引擎。配置变更后,系统在类似流量尖峰下吞吐稳定、无报错,MySQL 内部并发数控制在两百以内。文章强调此策略适用于悲观锁、热点行等高争用场景,且思路可迁移至 Postgres 等系统。
推荐收录,因为文章通过真实事故展示了并发与吞吐的逆向关系,并用通用可伸缩性定律提供量化分析。对负责高并发数据库、稳定性工程及反压机制设计的读者具有直接参考价值,可迁移到类似数据库和分布式系统中。文中提供的实验数据和配置对比使其结论可信,且明确给出了适用边界。
技术文章 PlanetScale Blog 2024/01/25
这篇文章系统介绍了如何在 MySQL 中表示和处理地理空间数据,先区分了实体、空间两类地理对象,再说明 POINT、LINESTRING、POLYGON 及其多几何类型在表中的存储方式。作者进一步解释了 WKT、WKB 和 MySQL 内部格式的区别,以及 SRID 如何决定坐标系和计算语义。文中给出了创建带 SRID 4326 的空间列、添加 SPATIAL KEY 的建表示例,并演示了距离、面积、包含、相交、缓冲、并集和差集等常用空间函数。最后比较了 MySQL 8 与 5.7 在 SRS 感知和空间索引上的改进,指出旧版本常在平面坐标和最小外接矩形上计算,精度和可用性都受限。整体适合作为入门到实操的参考,但示例主要覆盖基础用法,复杂 GIS 场景仍需结合具体投影与数据分布验证。
文章直接给出了 MySQL 空间数据类型、SRID、空间索引和常用函数的示例,证据充分,适合需要在数据库中存取地理位置、做邻近查询或范围分析的开发者。它的可迁移价值在于把“如何建表、如何查询、MySQL 8 为什么更准确”讲清楚;主要限制是停留在基础教程层面,复杂投影和大规模 GIS 负载还需进一步验证。