Dolt 的 go-mysql-server 五周年:一次 SQL 查询的旅程

本文回顾了 Dolt 数据库在采用 go-mysql-server 五周年之际,其 SQL 引擎的工作原理。文章详细阐述了从 SQL 查询解析到结果输出的整个过程,包括解析、绑定、计划简化、连接探索、计划成本计算和执行等步骤。Dolt 使用左递归解析器和自底向上的动态规划策略来优化查询计划,并利用代价模型选择最佳执行方案。文章还讨论了内存管理和未来的优化方向,例如统一中间表示和减少内存抖动。
阅读更多
本文回顾了 Dolt 数据库在采用 go-mysql-server 五周年之际,其 SQL 引擎的工作原理。文章详细阐述了从 SQL 查询解析到结果输出的整个过程,包括解析、绑定、计划简化、连接探索、计划成本计算和执行等步骤。Dolt 使用左递归解析器和自底向上的动态规划策略来优化查询计划,并利用代价模型选择最佳执行方案。文章还讨论了内存管理和未来的优化方向,例如统一中间表示和减少内存抖动。
阅读更多
一个Go语言项目中,看似无害的代码重构导致性能下降30%。罪魁祸首是`ImmutableValue`结构体的`GetBytes`方法使用了值接收器,导致每次调用都进行一次堆分配,而堆分配比栈分配代价高得多。究其原因,是Go编译器的逃逸分析不够精确,未能识别出值接收器不会逃逸。最终,将值接收器改为指针接收器解决了问题。这个案例说明,理解Go编译器对内存分配的决策,以及使用合适的接收器类型,对于编写高性能Go代码至关重要。
阅读更多
一位 Dolt 数据库的开发者尝试使用 AI 代码编辑器 Cursor,亲身检验其是否能提升 10 倍的开发效率。起初,在大型代码库中使用 Cursor 让他倍感失望,调试过程异常繁琐。然而,在创建新项目时,Cursor 表现出色,几小时内就能完成一个 Factorio 模组。在工作中使用 Cursor 开发一个小工具时,它在生成基本功能代码方面表现良好,但代码质量有待提高,重构工作依然耗时。最终,作者认为 Cursor 提升了约 50% 的效率,远低于宣传的 10 倍,并指出其在处理复杂代码和理解现有代码库方面仍存在不足。
阅读更多
本文深入探讨了Go 1.23版本中引入的range迭代器,解释了其工作原理、三种类型以及如何使用yield函数控制循环。文章列举了使用range迭代器的多种场景,包括自定义集合类型的迭代、过滤值、处理错误和使用哨兵错误等。此外,文章还介绍了Pull和Pull2函数,可以将range迭代器转换为传统的迭代器。最后,文章讨论了使用range迭代器时需要注意的代码可读性和约定问题。
阅读更多
本文介绍了在 Go 语言中编写泛型集合类型的经验,作者首先尝试了两种错误的实现方式,并分析了错误原因。最终,作者找到了正确的解决方案,即使用接口和类型约束来定义泛型集合类型,并详细解释了语法和注意事项。作者认为,尽管 Go 泛型功能强大,但相关文档缺乏对复杂用例的说明,导致开发者难以充分利用该特性。
阅读更多
本文探讨了在数据库 Dolt 中使用 160 位加密校验和作为数据块地址的安全性。作者首先介绍了加密校验和的概念、碰撞阻力以及不同校验和算法的优缺点,然后详细比较了 2 的不同幂次方所代表的数据量,例如 2^64、2^80 等,并将其与现实世界中的事物如咖啡中的原子数、海洋中的原子数等进行类比,最终得出结论:160 位地址空间足以满足 Dolt 数据库的需求,碰撞概率极低。
阅读更多
本文探讨了 Go 语言中不同错误处理策略的性能差异。作者通过基准测试发现,使用 sentinel errors 并结合 errors.Is() 的方式会使代码性能降低约 30 倍,远低于使用布尔值或直接错误比较的方式。文章分析了不同错误处理策略(如 Bool、ErrEqual、ErrorsIs、Panic 等)的性能表现,并指出 errors.Is() 在错误被包装的情况下性能损耗更为严重。作者建议开发者谨慎使用 sentinel errors,并在必要时先进行非空错误检查以减少性能损失。
阅读更多
DoltHub 承诺在 24 小时内修复 Dolt 正确性错误。他们通过以下方式实现:迅速识别错误、确定优先级(区分错误和功能)、高质量的代码和测试、以及发布自动化。Dolt 有完善的规范和测试流程,能够快速识别和修复错误。发布自动化流程使客户能够快速获得修复程序。快速修复错误建立了客户对 Dolt 的信任,这对一个只有 5 年历史的开源 SQL 数据库至关重要。
阅读更多
该网站提供了一个使用 GitHub Actions 构建 Go 项目的教程,包括设置、运行测试和部署到 Docker Hub 的步骤。它涵盖了使用 pgo 构建工具的详细说明,并提供了代码示例和故障排除建议。网站文章内容全面、技术准确,对 Go 开发人员和需要了解如何在 GitHub Actions 中构建 Go 项目的任何人都有帮助。
阅读更多