# 《高性能SQL引擎》总体架构-第01节:高性能SQL引擎总体方案目标与架构设计

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本节难度:★☆☆☆☆
  • 本节重点:梳理高性能SQL引擎的总体方案目标、技术选型与架构设计,从总体上理解高性能SQL引擎的方案目标、技术选型和架构设计,并从全局视角了解高性能SQL引擎的设计和架构思想,并能够将其灵活应用到自身实际项目中。

大家好,我是冰河~~

在前面的文章中,我们梳理了高性能SQL引擎的需求和流程,并且对高性能SQL引擎的技术流程进行了梳理和总结。目前我们已经大致了解了高性能SQL引擎的执行流程。接下来,就可以对高性能SQL引擎制定方案目标和进行总体架构设计了。

# 一、前言

相信很多有一定工作经验的小伙伴都有这样的体会,接到新的任务后,如果不做全面的需求分析、系统分析和架构设计,一上来就开始干代码,十有八九会在开发中途发现自己写的代码功能不太符合实际需求,或者突然发现某个功能有更好的实现方式,只是自己一开始没完全搞懂需求,根本没想到会有更好的实现方式。

更多的时候,想将原有的代码推倒重来,按照更优的方案来完成相应的需求任务开发,但是,此时发现时间根本来不及了,只能在原有的代码上苦苦支撑。最终,原本设想的功能完善、支持高并发、高性能、高可用和高可扩展的代码,却变成了一坨坨“屎山”。

# 二、本节诉求

梳理高性能SQL引擎的总体方案目标、技术选型与架构设计,从总体上理解高性能SQL引擎的方案目标、技术选型和架构设计,并从全局视角了解高性能SQL引擎的设计和架构思想,并能够将其灵活应用到自身实际项目中。

# 三、方案目标

与其他项目一样,高性能SQL引擎在进行技术选型与总体架构设计之前,同样需要明确一个事项:就是高性能SQL引擎无论采用哪种方案,采用哪种架构设计都需要明确这种方案的业务目标、技术目标和架构目标,并在研发过程中不断评估高性能SQL引擎的总体性能表现,发现系统瓶颈并不断进行优化。

总体上,我们自主设计和研发的高性能SQL引擎,需要满足如下方案目标。

  • 业务目标:满足通过JSON模板或者直接创建对象组合动态生成SQL的需求。
  • 技术目标:在8c16g,千兆带宽机器下,QPS达百万级别,性能瓶颈主要为机器网卡,高性能SQL引擎自动生成SQL要达到非常高的性能。
  • 架构目标:高并发、高性能、高可用、可扩展、可监控、可预警、可伸缩。

# 四、技术选型

这里,再次跟大家明确下技术选型。这次带着大家一起手写的高性能SQL引擎项目去除了各种复杂的场景校验逻辑,在代码结构上非常精简,核心功能就是通过JSON模板或者直接创建对象组合动态生成SQL,不再依赖各种实体模型来接收和传递数据。代码精简,意味着性能会非常高,同时,也意味着使用到的技术也会非常简单。主要的技术选型如下:

  • 基础工具:Hutool
  • 单元测试:Junit
  • 基准性能测试:JMH
  • 压力测试:JMeter

没错,这次的高性能SQL引擎项目所使用到的技术就是这么简单。

# 五、总体架构设计

高性能SQL引擎的总体架构设计非常简单,主要如图1-1所示。


可以看到,高性能SQL引擎的总体架构设计由下到上依次为抽象模型、SQL构建器和驱动引擎三部分。

  • 抽象模型:高性能SQL引擎的底层核心模型,高性能SQl引擎会将传递的JSON模板参数,解析成对应的抽象模型,进而生成对应的SQL语句。抽象模型主要包含:表模型、分区与聚合模型、关联模型、条件模型、分页模型和排序模型。
  • SQL构建器:高性能SQL引擎的模型到SQL的核心构建器,模型到SQL的转换主要由SQL构建器完成。
  • 驱动引擎:高性能SQL引擎统一对外封装的驱动引擎程序,其他服务或者程序只需要传入JSON模板或者模型数据即可驱动SQL语句的生成,并获取到对应的结果数据。

# 六、内部执行流程

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码