注意 convT

主要观点:使用 Go 编写世界上第一个版本控制的 SQL 数据库 Dolt,通过避免在关键节点使用接口使表扫描速度提高 24%。
关键信息

  • 接口可模块化代码、在编译时强制行为实现、帮助聚合高阶逻辑、绕过导入循环,但不提升代码速度。
  • 对比接口和非接口版本的性能,接口版本更灵活但更慢,如在将整数转换为字符串的例子中。
  • 在 Dolt 的表扫描中,大量使用接口导致约 12%的 CPU 时间用于运行 convT 变体,通过重新安排操作顺序避免 runtime.convT64,节省时间和内存,使 sysbench 表扫描提高 24%。
    重要细节
  • 展示了接口在不同代码场景中的示例,如 PetPerson 实现 String() 方法可赋值给 Stringer 类型变量,Catalog 接口在不同存储层有不同实现。
  • 给出了性能测试的代码和结果,如 f1f2 的基准测试,以及 types.IntType.SQL 优化前后的对比。
  • 介绍了 Dolt 中表扫描的具体过程和 Convert 方法的作用,以及如何通过优化避免接口指针的 malloc 操作。
阅读 7
0 条评论