捷豹方程式E车队,每一秒都至关重要

2022-02-21



在赛车比赛中,几分之一秒的时间里,就能决定几个名次。
 
许多因素决定了谁能够手持香槟站在领奖台上享受胜利,而有人不得不灰头土脸返回修理车。
 
其中一个至关重要的因素,帮助Sam或Mitch赢得比赛的,就是赛车的最优化调教。由于从自由练习、资格赛、杆位赛和反战三都在短短一天内——或者更精确地说,8小时以内——时间非常紧张。
 
那么捷豹车队在这时间里都发生了什么?从赛车返回车间,连上数据线接通到卡车端电脑的时候,这就成了一场把数据转移到Vertica的比赛。这里我们不多说许多的传感器读取。每辆车再一个比赛中请以产生500,000,000以上的数据点,这些数据将会加入到捷豹车队案例中的上千亿条已经存储的数据中。
 
谢天谢地,有Vertica,数据在几秒内就能开始传输,几分钟就完成了加载。
 
这就叫赢在了起跑线上。赛车工程师需要快速的分析刚刚捕捉到的数据,当然还包括历史数据,从这些数据中得到的信息,能够帮助他们更好地调整赛车,可以说Sam和Mitch在卡车上旧完成了领先。时间相当宝贵,因为工程师常常在赛车返回到赛场前,只有几十分钟的时间。
这就是捷豹赛车队选择Vertica的原因。Vertica众所周知的强大查询能力和数据库内函数,表现超过了数不清的竞争对手。
 
当然,进步不止。就像优化调教赛车是一个不断进步的过程,Vertica也是如此。
 
比如:APPROXIMATE_PERCENTILE函数。这个函数计算一个表达式在一组数据中分位数的近似值。参数是一个征信或者浮点列,和百分比(0到1)函数返回一个浮点值。
 
正如所期望的,当捷豹车队第一次尝试的时候,结果在几秒之内就能够返回。但是问题是,他们并不像只返回一个分位数,他们想要1%,5%,25%,中位数,75%,95%和99%的分位数。当然,你可以用7次APPROXIMATE_PERCENTILE函数,但是每一次都会增加额外的执行时间。
 
记得我们前面提到过,时间相当宝贵。等待十几秒来执行一个查询显然有点太浪费。
 
这时候Vertica工程师来了。几天之内,这个团队就设计和建造了一个python的UDx,来取代原有的函数。不再只能返回一个单独的浮点值,这个函数现在返回一个浮点数列,对应各个分位数。尽管增加了差不多2秒的执行时间,产生7个分位数增加大概3秒,这仍然可以说是一个巨大的进步,相比执行2秒的函数7次来说。
 
Vertica工程师当然也为所有用户的利益考虑。这个函数将不再是一个UDx,在下个版本的Vertica,这个函数将对所有人开放。