首页 > 数据库 >从MLSQL性能设计到对架构师的重新思考

从MLSQL性能设计到对架构师的重新思考

时间:2023-04-03 15:03:05浏览次数:41  
标签:数仓 索引 抽象 思考 具象化 架构师 MLSQL 我们


从MLSQL性能设计到对架构师的重新思考

五年前,我会认为,架构仅仅是针对一个可大可小的问题,把流程设计好,然后往里面填充合适的组件,从而最终解决这个问题。在这个过程中,区分架构师是否资深主要是在设计过程中对可扩展性,可维护性,以及成本权衡的把控能力。

现在,我觉得架构不应该仅仅是这样的。

真正的架构,它会是一个自上而下的思考模式,首先需要对问题本质的进行解析,进而进行抽象。最高层的抽象可能类似,”解决复杂的问题的办法一定是简单的“东西,这是一句有价值,但基本没法实操的话,是水货,但却可以作为自己在接下来设计的一个指导原则,一个准绳,一个衡量现在的路对不对的指标。

我们知道,自上而下的思考本质是抽象的层层具象化,而每个抽象是不是合理,是不是比较优的,那就靠这个最高的抽象进行评判。

当我们试图针对现有的问题,去思考出一个更具象化一点的抽象的时候,这个抽象的来源在于,你需要对问题的历史进行回顾,找到这个问题的最初产生的动机,亦或是针对目前的场景我们做一个统一的概括,看这个概括是不是能覆盖到目前所有能想到的场景。

举个例子,假设我要想解决的问题是MLSQL的查询性能问题。那我认为,一定有一个简单的抽象,这个抽象可以把我们要解决的问题归结为一个简单的问题。这个抽象经过我的经验,我发现是索引。对索引我的解释是,

  1. 在存储维度上,索引可以是数据自身的分布,也可以是对原始数据生成新的数据结构组织。
  2. 在时间维度上,索引和原始数据是可以有时延性的,可以是实时秒,分级别的,也可以是小时,天,甚至月级别的。

那么这个索引的抽象是不是具有较高的抽象层次?我认为是有的,我们可以做些场景match测试,一个典型的情况是,我认为无论数据批处理同步到数仓中,亦或是通过CDC的方式同步数仓中,数仓本质上就是我们要同步的数据的一种索引,是对关系型业务数据的一个索引。我们通过这个索引加速了我们的查询。那么批处理和CDC表面是入库方式的不同,但实际上我们认为是索引的时延不同而已。CDC是实时索引,按时间周期全量同步的,是非实时索引。既然是索引,如果我不需要加速,那么数仓在我们的架构体系中,就是可选的。如果我们返回到数仓产生的原始动机那里去,你就能知道我们的抽象是合理的:数仓出现的最早的动机是,当时的分布式计算框架(MR)不给力,底层的关系型数据库不给力,最终导致两者无法结合,所以为了解决这个问题,需要有个数仓,把数据丢到汇总到数仓里,让不给力的MR可以在数仓上计算。知道这个动机后,你就会知道,数仓他在最早期,是因为技术上不给力才产生的,尽管随着发展他衍生出了很多新的东西新的概念。按这个思路,我们就能推演出,数仓未来一定是会萎缩的,随着技术突破,联邦查询会是主流,这也体现了技术的螺旋式上升。我们看到,通过我们使用索引对数仓进行解释,以及对这个技术产生的动因分析,他们竟然得到了惊人一致的结论,这也再次证明,我们的抽象是合理的。

从上面的例子,我们还能看到,抽象也可以视为一种思维模型,而且这种思维模型是可以推导出一些新的结论的。

有了索引的抽象之后,我们需要进一步具象化新的抽象,以便于我们能够真正的落地它,从而解决我们实际要解决的问题:如何提升MLSQL的性能。

使用索引,应该是有一种具体的形态的,针对大数据场景,我们可能会得到如下一个新的抽象:多表转宽表,宽表加索引。

对于多表,我们如何给其加索引呢?或者说索引的形态是什么?在这层抽象里他指明了方案,就是宽表(典型如物化视图技术)。宽表我们也需要进一步提速,所以宽表上也需要有索引,到这里这里可以具象化到更加细致的技术上了,比如z-ordering,bitmap之类。

再具象化一层,我们应该有一个合理的架构去承载上层的这些抽象,如何在MLSQL之上可以让用户实现各种索引,如何然让用户使用这种索引,于是,我们需要在MLSQL两个层面去做设计:

  1. 如何让用户在使用MLSQL语言的时候,指定或者透明使用索引。
  2. 如何让用户实现一套规范,即可将索引注册到MLSQL系统上。

其实到这里,就已经非常细化了,几乎到了初步可执行的层面。我们最终在MLSQL引擎上构建了一套开放的可插拔的索引体系,在此基础上,我们实现了诸如

  1. z-ordering索引细节Z-Ordering索引加速大数据查询,
  2. json字段索引加速,可以对json里的字段进行查询加速。
  3. 联邦查询技术聚合下推

以及一些基于索引技术理念的应用

  1. 如何开箱即用的分析你的数据库数据(JDBC索引技术预览)


标签:数仓,索引,抽象,思考,具象化,架构师,MLSQL,我们
From: https://blog.51cto.com/u_13658130/6166436

相关文章

  • 架构师技能要点
    我想做一个软件架构师,那么要学习哪些技术呢作为软件架构师,您需要掌握以下技术:编程语言:掌握至少一门编程语言,例如Java、Python、C++等等。设计模式:熟悉常见的设计模式,例如工厂模式、单例模式、观察者模式等等。数据库:掌握关系型数据库和非关系型数据库的设计和使用,例如MySQL、O......
  • “通信原理研讨会”之后的一些思考
    大家好,我是小枣君。上周六,东南大学联合人民邮电出版社,在北京共同主办了一场“通信原理”课程研讨会。该研讨会邀请了包括北邮、国防科大、成电、西电在内的国内众多高校通信原理课程一线教师,共同参与教学内容研讨、教学经验交流。研讨会的演讲嘉宾,都是国内顶尖高校的顶级专家,相信很......
  • 谈谈对GPT发展的一些思考(产品角度)
     ​作者:良知犹存转载授权以及围观:欢迎添加微信号:become_me     搬运一下朋友圈写的一些小文字,分享一波。 核心:一个产品的商业之路,破局。这个案例我觉得真的很经典。 ​ 上周听领导......
  • ATHK1001 分析思考
    ATHK1001ANALYTICTHINKING:ASSIGNMENT1,2023Duedate:11:59pmFriday,March31st(Week6).Latepenaltyof5%percalendardayapplies.Onlinesubmission:AllsubmissionsaretobemadeonlineontheATHK1001Canvaswebsite.Submissionswillbechecked......
  • MySQL主键的一些思考
    MySQL创建表的时候可以不设置主键吗?MySQL创建表的时候是可以不主动设置主键的,但是表是一定需要一个主键的,MySQL会主动将第一个不为null的唯一索引设置为主键为什么MySQL推荐使用自增id作为主键?MySQL官方推荐不要使用uuid或者不连续不重复的雪花作为主键,而是使用连续自增的主键id......
  • 一直有份思考
    从去年开始,一直有一个念头,要将自己在工作中体会的编码思想记录下来。曾经天真的认为,自己脑子可以一直记住,但还是要遵循那句老话,好记性不如烂笔头,实际文档化的记录是最好的,......
  • C/C++ 思考:策略模式在协议解析中的应用
    目录引出问题传统解析方式策略模式简介UML类图改进1:基于函数的代码结构改进改进2:基于对象的结构改进参考引出问题在基于消息包的通信协议中,通常会通过一个id或命令名来标......
  • 思考 React Hook 和 Vue 组合式 API
    Vue组合式API优化周期函数Vue2比如mounted周期中有很多获取数据的逻辑都在这里,在updated周期中又有很多更新的逻辑在这里。在老版本的Vue3文档中讲解组合式AP......
  • 飞腾与鲲鹏性能差异的一些思考
    飞腾与鲲鹏性能差异的一些思考背景自己在进行stress-ng以及sysbench的测试验证时发现:飞腾的性能要比鲲鹏的性能有非常大的差距.最近同事在现场也进行了压测,也发现......
  • 【必须收藏】别再乱找 TiDB 集群部署教程了,这篇保姆级教程来帮你!!| 博学谷狂野架构师
    TiDB基础使用TiDBdashboard使用TiDBDashboard是TiDB自4.0版本起提供的图形化界面,可用于监控及诊断TiDB集群。TiDBDashboard内置于TiDB的PD组件中,无需......