pipeline设计在性能上的代价(关于redis批量获取数据pipeline)
本文目录
- 关于redis批量获取数据pipeline
- pipeline和StandarScaler和SVC之间的关系
- 用Order By保证绝对正确结果但性能有很大的影响
- cpu性能指标的流水技术
- 什么是流水线技术流水线技术如何提高处理器的性能
关于redis批量获取数据pipeline
Redis是建立在TCP协议上的CS架构,客户端client对redis server采取请求响应的方式交互.每次交互会有网络延迟,大约30ms. 假设有这样一个场景,redis中存储上千个key值,获取每个key对应field的value,那么要向redis请求上千次 hget(key, field),获取响应也是对应的次数.如果能一次性将所有请求提交给server端,执行完成后批量获取响应,只需向redis请求1次,性能获大幅提升 没有用pipeline之前,基本上获取所有数据需要90多s,现在只需0.3s,性能提升清晰可见 实现以下场景:定时任务每隔1s执行任务函数,但是任务函数执行完成的时间比1s要长,此时启动定时任务要加上两个参数,否则会报错 可允许的实例个数,如果没有设置,则默认为1,表示id相同的任务实例数 像上面的例子中,会报skipped: maximum number of running instances reached (1)的错误,意思APScheduler试图重新执行作业,但前一个仍在运行。 这个参数可以理解为任务的超时容错配置,给executor 一个超时时间,这个时间范围内要是该跑的还没跑完,就别再跑了 像上面的例子中,会报Run time of job …… next run at: ……)” was missed by的错误
pipeline和StandarScaler和SVC之间的关系
Pipeline、StandardScaler和SVC(Support Vector Classifier)是机器学习中常用的三个概念,它们可以在一起使用以构建一个完整的机器学习模型。- Pipeline(管道)是一种用于将多个数据处理步骤连接在一起的工具。它允许你按顺序应用一系列的转换和估计器(estimator),并将其视为一个整体。每个步骤都是一个元组,包含一个名称和一个转换器或估计器。使用Pipeline可以更方便地组织和管理机器学习工作流程。- StandardScaler(标准化器)是一种数据预处理技术,用于对特征进行标准化处理。它通过去除特征的平均值并按标准差缩放特征,使得每个特征的均值为0,方差为1。标准化可以使得不同尺度的特征具有相同的重要性,有助于提高模型的性能。- SVC(支持向量分类器)是一种机器学习算法,用于进行二分类或多分类任务。它通过在特征空间中找到一个最优的超平面来划分不同类别的样本。SVC可以处理非线性问题,通过使用内核函数将数据映射到高维空间来进行分类。当这三个概念结合在一起时,可以构建一个机器学习流水线。Pipeline可以将多个数据处理步骤组合在一起,比如先使用StandardScaler对数据进行标准化处理,然后使用SVC进行分类。这样可以实现一个端到端的机器学习流程,方便地对数据进行预处理和建模,并且可以重复使用和部署整个流水线。
用Order By保证绝对正确结果但性能有很大的影响
一些聚合函数的结果跟流入数据的顺序有关,CH文档明确说明这样的函数的结果是不确定的。这是为什么呢?让我们用 explain pipeline 来一探究竟。
以一个很简单的查询为例:
events表的定义如下:
该查询从events表里面读取数据步骤 step 和请求ID request_id ,按照 request_id 分组并取第一个 step 。
我们看一下这个查询的pipeline:
可以看出没有sorting步骤。这个查询在多核服务器中速度是相当快的,因为充分利用了多核,直到最后一步才归并成一个数据流由一个线程来处理。
可是要注意 这个查询的结果每次都不一样,可以用加过滤条件的计数来测试,测试的SQL如下:
结果是:2500579, 2500635,2500660。结果差距都不大,但都不是绝对正确的结果。这是因为多线程执行时并不能严格保证是按照engine=MergeTree 的表的存储顺序来处理数据的。如果能容忍误差就没问题,因为这个查询的效率是非常高的。
但如果要追求绝对的正确结果。则需要显示地指定顺序,改造查询如下:
查询的pipeline变成这样:
注意到pipeline中增加了重要的一步 MergingSortedTransform 36 → 1 ,这一步保证了查询的正确性,但是将多个线程的数据流归集到一起,排序后继续由一个线程完成剩下的处理步骤,效率上受到很大的影响。测试结果表示:加了ORDER BY 子句的查询能够得到一致的正确结果,但效率差了至少10倍。越是核数多的服务器,其差距越大。
cpu性能指标的流水技术
流水线(pipeline)是 Intel首次在486芯片中开始使用的。流水线的工作方式就像工业生产上的装配流水线。在CPU中由5~6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5~6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高了CPU的运算速度。超流水线是指某型 CPU内部的流水线超过通常的5~6步以上,例如Pentium pro的流水线就长达14步。将流水线设计的步(级)数越多,其完成一条指令的速度越快,因此才能适应工作主频更高的CPU。超标量是指在一个时钟周期内CPU可以执行一条以上的指令。这在486或者以前的CPU上是很难想象的,只有Pentium级以上CPU才具有这种超标量结构;这是因为现代的CPU越来越多的采用了RISC技术,所以才会超标量的CPU。
什么是流水线技术流水线技术如何提高处理器的性能
为了进一步满足普通流水线设计所不能适应的更高时钟频率的要求,高档位处理器中的流水线的深度(级数)在逐代增多。当流水线深度在5~6级以上时,通常称为超流水线结构(SuperPipeline)。显然,流水线级数越多,每级所花的时间越短,时钟周期就可以设计的越短,指令速度越快,指令平均执行时间也就越短。cpu流水线技术是一种将指令分解为多步,并让不同指令的各步操作重叠,从而实现几条指令并行处理,以加速程序运行过程的技术。指令的每步有各自独立的电路来处理,每完成一步,就进到下一步,而前一步则处理后续指令。
更多文章:
越狱下载app的软件(ios6越狱后怎么在app store 里下软件)
2024年8月25日 17:10
office2013破解版安装包(谁能提供office 2013的破解版)
2024年7月5日 20:05
iphone女孩(女大学生,3000左右预算入手华为nova7还是iphone se)
2024年7月1日 21:45
安卓app下载官方正式版(安卓手机要用什么助手下载的软件是都是官方版的)
2024年5月14日 17:06