Kyligence 副总裁李栋:指标中台构建数字化管理新体系|爱分析活动

2022 年 12 月,爱分析举办了“2022爱分析·数据智能网络研讨会”。爱分析邀请Kyligence合伙人&副总裁李栋进行了题为《指标中台,构建数字化管理新体系》的主题演讲。

指标是企业数据价值消费单元,也是企业实现精细化管理、数据驱动的必要工具。目前,更广泛的人员正在参与和影响企业业务发展,这对指标质量、指标开发效率、指标更新时效等提出了更高要求。指标中台无疑成为企业实现指标管理、提升运营效率的重要工具。

Kyligence 合伙人&副总裁李栋在会上的演讲围绕指标中台展开,分享了指标中台的发展背景和趋势、典型客户建设指标中台案例和效果,介绍了指标中台技术底座对解决宽表爆炸、企业数据指标口径、企业数字化管理等痛点的价值。

现将李栋总的演讲实录整理后分享如下。

Kyligence 合伙人&副总裁李栋:

01 公司简介

我的分享主题是《指标中台,构建数字化管理新体系》。首先简单介绍一下Kyligence,Kyligence是全球领先的多维数据库和指标中台的技术软件供应商,于2016年由Apache Kylin开源项目的创始团队创建。Apache Kylin是目前较为领先的大数据 OLAP 开源技术。Kyligence研发的多维数据库和指标中台等产品,也是依托于Apache Kylin技术实现。同时Kyligence入选了《2022 Gartner Innovation Insight for Metrics Store》报告,这是唯一入选的中国厂商。此外,我们还有很多合规认证等。

02 指标中台的趋势和背景

在上周的12月15号,由爱分析和Kyligence共同打造的中国首份《指标中台市场研究报告》刚刚发布。在此之前,双方还开展了一项关于“企业指标管理与数据分析现状”的调研。调研涵盖了银行、保险、制造、零售与消费品等各个行业的数字化转型领先企业,涉及数据、IT、业务等多种角色一起深度参与,收集了很多宝贵数据。此外还有来自银行、保险、零售等行业客户的最佳实践。基于所有这些信息,我们整合成了这样一份指标中台报告,欢迎大家下载。我今天的分享也将以这份报告中的内容为主线进行展开。

首先是关于指标中台的趋势和背景。德鲁克曾经说过,没有度量就没有管理,因为不能去管理一些不可度量的事物。除此之外,我们也会看到企业数字化经营的关键,是要建立以指标为核心的管理体系,例如KPI、OKR,或是平衡计分卡、BI等管理手段,本质上都是在帮助企业的决策者和管理者更好地了解企业的经营指标,构建可观测的经营管理体系。

指标是通用的管理语言

为什么指标这么重要?指标是企业内部通用的管理语言,连接着业务和数据。一方面在业务侧,人人用指标,指标是企业业务运营、经营管理过程中的共同语言。在数据侧,指标又是通用的数据语言。只有把数据加工成为指标,或者通过数据计算出指标结果,才能够体现出数据分析的价值。在爱分析和Kyligence联合开展的“企业指标管理与数据分析”的调研中,当评价指标体系对于公司的重要程度时,能看到有85%的企业认为指标体系对于公司很重要,有49%的企业是经常使用指标体系管理业务。

指标体系建设面临的挑战

指标体系的重要性已很明确,然而企业在建设指标体系的过程中面临诸多挑战。第一个挑战是现有系统难以满足业务人员更精细化、更实时的用数需求。如业财一体化中,业务人员和财务人员希望站在全局的视角上,同时对业务部数据和财务数据有宏观的了解。这要求对现有的跨平台或多渠道的数据进行整合,这是企业当下面临的第一个挑战。

第二个挑战是企业IT能力和成本有限,无法满足业务爆发式的增长。比如保险公司每周都会发布新产品,每个新产品都需要运营团队对用户的各种行为数据进行详细分析。然而公司不可能为每个新产品都投入相应的IT资源,包括通过数据开发人力进行手工开发等,这个成本很难吃得消。

第三个挑战是管理人员缺少统一的指标查询入口。这个挑战本质上还是指标口径问题。以销售额为例,从财务视角和业务视角对销售额的计算口径就会不一样。口径不一致,管理上就需要花很多时间对齐口径。

第四个挑战是数据治理缺少有效的抓手。当企业缺乏有效的抓手去开展数据治理工作时,将很难产生直接的成果和效益。调研数据也验证了这一点,在统计中发现,像指标质量、指标体系不完整、数据分析平台性能待完善等,都是企业普遍面临的问题。

什么是指标中台

指标中台产品的设计初衷就是解决以上问题。为什么叫指标中台?对于中台,大家很熟悉的概念有One Data、 One ID、 One Service 等。指标中台是集中管理、存储指标以及提供指标服务的一个平台,提供业务模型、指标管理、指标加工、数据服务等一体化的解决方案。指标中台在企业整体的架构中,处于数据湖、数仓和数据应用之间。

指标中台主要有两部分,上面一部分是指标应用,下面一部分是计算引擎。应用层的目的是构建指标目录,包括像指标定义、指标可视化、指标质量、指标管理、指标服务等功能。在指标定义中,需要定义指标的口径、指标的计算逻辑、商业意义、商业价值以及指标的归属。

在计算引擎层,针对指标分析、指标查询、指标服务等功能实现,需要具备高性能、高并发的计算分析能力,以支撑平民数据分析师对海量数据的使用。

基于指标中台,在下游的多种分析工具如BI、Excel、Tableau及其他可视化工具、协同工具中,都可以获取最权威的具备一致性的数据。

03 指标中台实践案例

接下来介绍指标中台的实践案例。

平安银行:潘多拉指标中台

银行业的数字化一直走在各个行业的前列。首先介绍一个来自于平安银行的案例。平安银行是一家全国性的股份制商业银行,金融服务种类齐全。平安银行从2016年起开始数字化转型布局。在平安银行的零售业务板块中,包括信用卡、消费金融、汽车金融等细分业务板块,每个板块都涉及到产品、渠道、客户交易等信息。从数据分析的角度来看,要想实现精准营销、改善客户体验,需要从不同维度、不同渠道以及用不同的指标来进行复合性的分析。例如在精准营销中,对客户生命周期全链路进行管理时,需要结合客户在银行的交易数据、产品数据、行为数据等进行综合分析。

在建设指标中台之前,平安银行通过传统的BI报表分析的方式,面临许多挑战:1)数据治理难,报表口径不一致,取数存在信任危机;2)数据协同难,不同部门间的数据处理模式不同,相互之间很难复用;3)数据处理工具使用难,效率低,如平安银行的零售业务中数据开发人员高达200名,依然存在数据开发周期长、响应慢的问题。

为解决以上问题,平安银行建设了潘多拉指标平台,并选型使用 Kyligence 多维数据库作为底层核心组件。所有业务人员通过潘多拉指标平台自助获取所需要的任何业务的指标数据,可以减少重复性报表的开发工作,通过指标看板、智能的归因分析和趋势预测来对指标进行一站式的、全链路的分析和洞察。此外,也能通过潘多拉指标平台的指标定义、指标发布、指标管理等一系列指标自动化管理流程来提升数据和指标管理效率。

目前平台已经接入了15000多个指标、1000多个维度,活跃用户也已超过5000人。从效果来看,数据开发效率得到大幅提升,数据开发周期缩短了3-5天,ETL人力缩减了30%,同时指标复用率超过25%。

百胜中国:指标分析与管理应用提升数据决策效能

接下来再介绍来自于百胜中国的案例。百胜中国是全球性的餐饮集团,是零售餐饮行业的典型代表,肯德基、必胜客都属于百胜中国下的品牌。随着百胜中国的快速发展,尤其互联网业务的爆发式增长,整个公司的数据体量也在不断增长。

为提升整体经营效率,百胜中国的各个部门包括区域级别、门店级别都产生了大量的数据分析需求和指标应用的需求,如销售部门需要从地区、时间、金额、频次等多个角度分析销售订单情况。如果每个指标都通过报表开发,整体的分析效率会非常低下。

百胜中国与 Kyligence 进行合作,并通过建设指标分析与管理应用体系,对以上诸多问题进行了改善。整体的数据准备时间降至30分钟,相较之前用时缩短75%;OLAP性能大幅提升,500亿+数据体量下平均响应时间仅4秒,90%的查询用时在1秒以内。指标分析与管理应用体系的性能充分满足包括集团、区域等各级数据分析师在内的数据消费者使用需求。

此外,这套指标分析与管理应用体系还保留了业务人员既有的数据分析习惯。过往百胜分析师习惯使用Excel,这套体系能在大数据体量下依然支持分析师使用Excel对接或进行自助式分析。

这些案例的背后,是包括 Kyligence指标中台引擎、产品、方法论在内的整套解决方案。一方面,Kyligence有企业级指标中台解决方案,以Kyligence的多维数据库技术为核心底座,具备指标管理引擎,支持高性能的指标计算和查询服务,为金融、零售、制造等企业提供端到端的解决方案,帮助企业简化数据分析和指标管理。

另一方面,Kyligence也推出了名为Kyligence Zen的一站式指标中台产品。这是一个标准化的SaaS产品,支持企业将云端的S3、CSV文件等常用数据源快速接入指标中台,通过指标目录、指标自动化、目标管理、指标API、归因分析、指标模板等开箱即用的能力迅速从零开始搭建、实践指标中台。

04 指标中台技术底座

企业业务增长带来宽表爆炸问题

为什么Kyligence的指标中台解决方案在技术上更有优势?这主要是因为底层多维数据库技术。举个例子,Kyligence服务的一家互联网行业电商客户,这家电商企业从2019年下半年开始建设自己的数字化平台。如下图所示,左侧从数据库、日志系统中抽取的数据进入数据仓库。数据进入数据仓库的贴源层后,经过加工一步步变成宽表、业务表。业务表包含了各种业务指标,如销售相关的各种指标,客户相关的各种指标,网络流量、广告相关的各种指标等,每个指标都是从贴源层原始数据一步步加工形成。每个业务表的背后都存在着大量的宽表。

这里就会产生一个问题,指标数量的快速增长带来了宽表爆炸。这也是多数企业在数据湖建设和数据仓库建设过程中面临的共性问题。Kyligence在服务这家电商客户时看到,业务端的一个订单表背后会产生1万多张宽表。大量的宽表一方面快速消耗计算和存储资源,另一方面宽表的ETL需要消耗大量的开发运维人力,带来计算成本和人力成本的持续增长。

多维数据库解决宽表爆炸问题

Kyligence多维数据库能有效解决宽表爆炸问题。什么是多维数据库?多维数据库来自于经典的OLAP Cube理论。经典的OLAP Cube 理论下,在三维的Cube 中,每个维度代表业务中的一个维度,每个格子代表一个维度下的度量。也可以换一个角度理解Cube,即Cube中的每个节点代表一个基础指标,如任何一个时间、任何一个地区、某个商品品类的销量对应的就是一个节点。在多维数据库中,每个格子代表的基础指标加上一些业务口径,如时间段、地区等就可以构成丰富的业务指标体系。多维数据库的核心在于它存储的是维度和度量,而不是以表为核心去存储数据。

此外,所有指标的生命周期也能被统一管理。而在关系型的数据库中,不同的指标用不同的宽表进行存储,生命周期难以实现统一管理。经常出现的情况是,宽表与宽表间的数据更新不同步,导致指标的生命周期不一致,最终出现数据信任问题。

多维数据库基于空间换时间的思想,将指标预计算好并存储在多维数据库中,因此业务分析时具备高性能。此外,多维数据库也更节省成本,相较于昂贵的计算资源,多维数据库通过云上存储实现空间换时间,性价比更高。

那么,多维数据库是如何解决宽表爆炸问题的?回到电商客户案例中,所有数据进入贴源层后都可以被多维数据库进行统一管理。

数据如何实现统一管理?在多维数据库中定义的多维数据模型、维度和指标,本质上是在贴源层的表上定义了统一的业务元数据。基于业务元数据,一方面能更好地管理底层数据,另一方面,可以赋予上层的业务用户更好的数据消费能力。同时,包括数据分析师在内的业务用户也能更加自主地基于多维数据库中的基础指标进行创新,创建更多的衍生指标。业务端的指标都是衍生指标,不会产生底层宽表,自然也不会带来宽表爆炸问题。

怎么理解这一点?这里补充一点背景知识。基础指标、衍生指标等概念来源于指标体系构建过程。最开始通过表进行初步计算如求和的指标是基础指标,围绕着基础指标,通过口径、时间、四则运算产生更多衍生指标、复合指标、时间衍生指标等概念。其中,只有基础指标是需要被预计算的,外围的衍生指标、复合指标不需要。正是基于多维数据库对指标体系的梳理,能有效减少宽表爆炸问题。而在关系型数据库中,衍生指标或者复合指标都是通过宽表的方式创建的,会消耗更多IT成本。

再回到电商客户案例中,一开始贴源层有5000多张表,通过多维数据库定义出2000多个基础指标,进而衍生出1万多个衍生指标。其中5%的衍生指标可以基于基础指标通过大规模并行处理在线计算得到;95%的指标已经完成了预计算。通过多维数据库,数据人员可以更好地管理数据,业务人员也会更加自主地使用指标进行业务创新。

多维数据库的Cube理论使整个宽表的数量大幅降低,充分预计算加少量在线计算的方式也能降低企业整体的TCO(计算总拥有成本),因此多维数据库能更好地应对宽表爆炸挑战。

通过以上介绍,可以证明多维数据库确实是支撑指标中台的更好的技术底座。

今天的分享就是这些。欢迎大家来试用Kyligence指标中台技术,在kyligence.io网站上有两个产品试用入口,一个是关于多维数据库,一个是一站式指标中台产品。最后欢迎大家下载由爱分析和Kyligence联合出品的《中国指标中台市场研究报告》。前面介绍的内容可能比较简略,在这份报告中会有更加详细的介绍,包括案例、指标体系构建方法论、指标中台落地方法论等。

本文转载于网络 如有侵权请联系删除

相关文章

  • 任意文件下载漏洞的接口URL构造分析与讨论

    文件下载接口的URL构造分析与讨论某学院的文件下载接口http://www.****.edu.cn/item/filedown.asp?id=76749&Ext=rar&fname=filedown.rar参数分析:id资源的idExt资源的文件下载格式fname文件下载后的名字逻辑原理:发送参数给filedown.asp,asp文件接收参数id的值并从数据库查询对于ID资源的URL地址,并且下载;按照ext格式进行下载返回,按照fname对下载返回的文件命名。某协会文件下载接口http://www.****.org.cn/content/download.do?filename=test.doc&url=group1/M00/05/38/Cj0BE16hNJKAIuAEAAFkAF_b3No247.doc参数分析:filename文件下载后的名字url文件的下载路径通过页面的标签分析,我们寻找到downloadfile()函数,我们调用该函数,我们则成功的下载了该函数,我们综合分析该URL地址:http://www.****.org.cn/content/do

  • 策略模式 Strategy Pattern

    StrategyPattern,是Java常用的设计模式之一。它提供了一个类的行为或其算法在运行时可以更改的能力。它的结构环境角色,持有一个策略引用。抽象策略角色,与业务逻辑无关,是具体策略角色必须实现的接口或继承的父类。具体策略角色,包装了相关算法或行为。一个简单的演示演示代码//抽象策略角色 publicinterfaceSaleStrategy{ doublegetRetailPrice(doubletagPrice); } //具体策略角色 publicclassPublicSaleStrategyimplementsSaleStrategy{ @Override publicdoublegetRetailPrice(doubletagPrice){ returntagPrice*0.95D; } } publicclassSuperSaleStrategyimplementsSaleStrategy{ @Override publicdoublegetRetailPrice(doubletagPrice){ returntagPrice*0.88D; } } publiccl

  • ubuntn备份办法总结(四种)

    办法一:使用respin,步骤如下:sudoadd-apt-repositoryppa:sergiomejia666/respin sudoapt-getupdate sudoapt-getinstallrespin sudorespinbackupbackup.iso复制办法二: 1.下载:根据你的系统版本到http://www.filewatcher.com下载相应的程序包:首先是remastersys_3.0.4-2_all.deb 然后根据你的系统版本以下应用包2选1下载(不需要图形界面下面GUI包可以跳过):remastersys-gui_3.0.4-1_i386.deb(32-bit) remastersys-gui_3.0.4-1_amd64.deb(64-bit)2.安装:首先命令行输入sudoapt-getinstallplymouth-x11,如果缺少支持出现错误,就换成:sudoapt-get-finstall 如果sudoapt-get-finstall失败,需要修改source.list源 第一种办法是:1.在电脑右边打开“ubuntu软件中心”――2.双击放

  • [Oracle ASM全解析] 管理磁盘组模板

    这节讲ASM磁盘组模板前面说过每种ASM文件类型都有其默认的模板,包括文件的冗余级别和条带化参数1.模板属性值7-4为条带化的属性值,具体意义参见前面的文章7-5为冗余属性的值和磁盘组冗余级别的对应关系,有MIRROR,HIGH,UNPROTECTED三种从上图我们可以看到在Normal的磁盘组中我们也可以用High属性值来做到三路镜像2.默认模板属性值7-6为ASM文件类型的默认属性值以控制文件为例,上图表示当在Normal磁盘组中其默认为High值,然后对比7-5的图可以看到提供三路镜像我们可以通过V$ASM_TEMPLATE视图来查看模板的具体属性SQL>SELECTdg.nameASdiskgroup,t.name,t.stripe,t.redundancy,t.primary_region,t.mirror_regionFROMV3.增加新的模板到磁盘组3.1新模板的默认值新建的自定义模板并不是默认的模板名,我们需要在新建文件时使用addtemplate手动指定自定义模板名我们无法修改已存在的文件的模板新建一个名为reliable的模板,属性为high级别,并将他添加到

  • python simplehttpser

    工作中想搭建个简单的http服务,直接在终端python-mSimpleHTTPServer8000复制便可以启动http服务了,用来分发资源。 但是当我们想要引用该页面的资源时,因为浏览器的跨域访问限制,不能够如愿,如何解决呢?把下面的代码写入文件中,直接运行,则浏览器在引用的时候就不会被阻拦了。fromSimpleHTTPServerimportSimpleHTTPRequestHandler importBaseHTTPServer classCORSRequestHandler(SimpleHTTPRequestHandler): defend_headers(self): self.send_header('Access-Control-Allow-Origin','*') SimpleHTTPRequestHandler.end_headers(self) if__name__=='__main__': BaseHTTPServer.test(CORSRequestHandler,BaseHTTPServer.

  • tf.contrib.slim.conv2d()

    convolution(inputs, num_outputs, kernel_size, stride=1, padding='SAME', data_format=None, rate=1, activation_fn=nn.relu, normalizer_fn=None, normalizer_params=None, weights_initializer=initializers.xavier_initializer(), weights_regularizer=None, biases_initializer=init_ops.zeros_initializer(), biases_regularizer=None, reuse=None, variables_collections=None, outputs_collections=None, trainable=True, scope=None)复制inputs是指需要做卷积的输入图像num_outputs指定卷积核的个数(就是filter的个数)kernel_size用于指定卷积核的维度(卷积核

  • Android动态修改ListView中指定Item的组件属性

    Android动态修改ListView中指定Item的组件属性 在Android实际开发过程中经常会遇到,修改ListView中某一项的值。如何达到这一目的呢? 方法主要有两种: 第一种方式:当ListView中某一项的值发生变化之后,重新加载数据已达到更新ListView的目的。 虽然第一种方式能够解决问题,但不值得推荐。因为这样会带来不必要的资源消耗。在移动终端这种硬件资源和计算能力都有限的情况下,显然有点得不偿失了,况且用户的体验也不好。 第二种方式:第二种方式可以说是第一种方式的改进。ListView中某一项的值发生改变,实际上是ListView的数据源发生了改变。既然数据源发生了改变那么我们就修改数据源。 下面就拿修改ListView中某一项文件名来演示具体步骤: 步骤一:获取单击ListView中tem的位置 //注册单击ListView中的Item响应的事件 list.setOnItemClickListener(newOnItemClickListener(){ @Override publicvoidonItemClick(AdapterView<?>p

  • Visual Studio 2010/2012 Pro Power Tools

    VisualStudio2010新增“扩展管理器”的功能,可用于添加、移除、启用和禁用VisualStudio扩展。我们可以从VisualStudioGallery(VisualStudio库)网站上安装扩展,这些扩展一般是VSIX包格式,包括项目模板、项模板、工具箱项、托管扩展框架(MEF)组件和VSPackage。安装在“VisualStudio安装文件夹\Common7\IDE\Extensions\Company\Product\Version\"文件夹中。VisualStudio ProPowerTools是微软主要编程环境的一套扩展功能,旨在提高微软VisualStudio开发人员的效率。目前包括2010和20122个版本:想安裝VisualStudio2010/2012ProPowerTools,我们可以通过Tools-〉ExtensionManager,搜索Powertools:安装完后重新启动,即可启用该扩充套件的功能,下面就让我们来看一下该扩充套件的功能。AlignmentHelpers以往在浏览程序时,若程序代码很多,顺着开下来常常头昏眼花,看到后来不集

  • Ceph 快速部署 ( Centos7 + Jewel )

    作者:徐凯这篇文章主要介绍了如何用三台虚拟机搭建一套Ceph分布式系统,步骤简洁但不失准确性。环境清理一小节可以解决绝大多数部署不成功的问题,最后一节介绍了常用的Ceph操作,希望能给刚搭建环境的同学一些帮助。环境三台装有CentOS7的主机,每台主机有三个磁盘(虚拟机磁盘要大于100G),详细信息如下:[root@ceph-1~]#cat/etc/redhat-release CentOSLinuxrelease7.2.1511(Core) [root@ceph-1~]#lsblk NAMEMAJ:MINRMSIZEROTYPEMOUNTPOINT sda8:00128G0disk ├─sda18:10500M0part/boot └─sda28:20127.5G0part ├─centos-root253:0050G0lvm/ ├─centos-swap253:102G0lvm[SWAP] └─centos-home253:2075.5G0lvm/home sdb8:1602T0disk sdc8:3202T0disk sdd8:4802T0disk sr011:011024M0r

  • 字节跳动基于 Apache Hudi 的多流拼接实践方案

    字节跳动数据湖团队在实时数仓构建宽表的业务场景中,探索实践出的一种基于HudiPayload的合并机制提出的全新解决方案。 字节跳动数据湖团队在实时数仓构建宽表的业务场景中,探索实践出的一种基于HudiPayload的合并机制提出的全新解决方案。 该方案在存储层提供对多流数据的关联能力,旨在解决实时场景下多流JOIN遇到的一系列问题。接下来,本文会详细介绍多流拼接方案的背景以及实践经验。 业务面临的挑战 字节跳动存在较多业务场景需要基于具有相同主键的多个数据源实时构建一个大宽表,数据源一般包括Kafka中的指标数据,以及KV数据库中的维度数据。 业务侧通常会基于实时计算引擎在流上做多个数据源的JOIN产出这个宽表,但这种解决方案在实践中面临较多挑战,主要可分为以下两种情况: 维表JOIN 场景挑战:指标数据与维度数据进行关联,其中维度数据量比较大,指标数据QPS比较高,导致数据可能会产出延迟。 当前方案:将部分维度数据缓存起起来,缓解高QPS下访问维度数据存储引擎产生的任务背压问题。 存在问题:由于业务方的维度数据和指标数据时间差比较大,所以指标数据流无法设置合理的

  • 2263: neighbor

    2263:neighbor 时间限制:1Sec 内存限制:256MB 提交:235 解决:68 [提交][状态][讨论版][命题人:admin] 题目描述 隔壁学校地形图可以通过一个高度矩阵表示,矩阵中每一个位置都有一个数hi,j表示这个坐标的海拔,我们姑且将其称为海拔图,容易发现,我们可以通过这个矩阵轻松算出隔壁学校的主视图,左视图。     相反的,我们却不能通过主视图和左视图唯一确定海拔图,现在问题来了,已知主视图左视图,我们需要知道铲平隔壁学校的代价上限和下限(即可能的体积最大值与最小值)  输入 第一行两个数n,m(1<=n,m<=1000, 0<=hi,j<=1000),分别表示海拔图的长和宽。  第二行n个数,描述了主视图每一个位置的高度。  第三行m个数,描述了左视图每一个位置的高度  输出 一行两个数,分别表示代价最小值与最大值。  样例输入 22 11 11 样例输出 24 #include<stack> #in

  • mysql优化 update中的in子句

    需求:mysql数据库中,更新所有message_repo表中所有state='100'andreceiver_id='1'的数据为state='100',表中id为主键,state和receiver_id都有索引。 原语句: updatemessage_reposetstate='101',update_time=now(),read_time=now() whereidin(selecta.idfrom(selectidfrommessage_repowherestate='100'andreceiver_id='1')a);复制 然后发现,workbench提示处于安全模式,即safemode下只能采用主键更新。 我的id不就是主键?难道这个还不是主键更新,意识到这个sql肯定被mysql错误理解了,用执行分析果然发现问题。。。    update的where子句没有使用主键索引,而是进行了全表扫描。 原本sql要表达的意思是:用select子句查询所有符合条件的主键,然后update通过主键进行更新,但是实际上,mysql是全表逐行与select子句对

  • mac item2自定义光标移动快捷键,移动行首行尾,按单词跳转

    Tojumpbetweenwordsandstart/endoflinesiniTerm2followthesesteps: iTerm2->Preferences(⌘ + ,) Openthe“Keys”tab AddthefollowingGlobalShortcutKeys Movecursoronewordleft KeyboardCombination: ⌥ + ← Action:SendHexCode Code: 0x1b0x62 Movecursoronewordright KeyboardCombination: ⌥ + → Action:SendHexCode Code: 0x1b0x66 Movecursortobeginningofline KeyboardCombination: ⌘ + ← Action:SendHexCode Code: 0x01 Movecursortoendofline Key

  • error_info

    fromdatetimeimportdatetimeimportosimportthreadingdefinfo():date_time,pid,ident=datetime.now().strftime("%Y-%m-%d/%H:%M:%S"),os.getpid(),threading.currentThread().identreturndate_time,pid,identprint(info())复制

  • PCIe采集卡设计资料:基于FPGA Spartan6 的双路光纤PCIe采集卡 2路光纤卡 双路光纤卡

    基于FPGASpartan6的双路光纤PCIe采集卡(2路光纤卡)     1、板卡概述  板卡采用xilinxSpartan6系列芯片,支持PCI ExpressBaseSpecification1.1x1。内含丰富的逻辑资源和存储单元,板卡FPGA外接双片32M*16bit DDR2缓存器,支持乒乓操作。PCIExpress接口大支持MasterDMA操作,测试大200MB/s速率传输。 2、技术参数  PCI Express:BaseSpecification1.1 x1,理论速度可达2.5Gbps。  板卡FPGA:型号XC6SLX45T-FG484,2,088KbBlockRAM Blocks,两个MCB存储控制器,358可用IO。  DDR2:型号MT47H32M16HR-37EL。  光纤接口:支持2.5Gbps 光纤SFP模块。 3、软件功能  支持windowXP,Linux驱动,客户端应用测试程序 4、物理特征  PCIExpress半长板,无风扇散热。 5、供电要求  PCIe

  • download web folder using wget

    Youhavetopassthe -np/--no-parent optionto wget (inadditionto -r/--recursive,ofcourse),otherwiseitwillfollowthelinkinthedirectoryindexonmysitetotheparentdirectory.Sothecommandwouldlooklikethis: wget--recursive--no-parenthttp://example.com/configs/.vim/ 复制 Toavoiddownloadingtheauto-generated index.html files,usethe -R/--reject option: wget-r-np-R"index.html*"http://example.com/configs/.vim/复制

  • IE6/IE7下:inline-block解决方案

    1、inline元素(比如span,em等)的display属性设置为inline-block时,所有的浏览器都支持; 2、block元素的display属性设置为inline-block时,IE6/IE7浏览器是不支持的;直接贴代码:<divclass="list">  <span>无标题文档无标题文档</span>  <span>无标题文档无标题文档</span>  <span>无标题文档无标题文档</span>  <span>无标题文档无标题文档</span></div><ulclass="list1">  <li>无标题文档无标题文档</li>  <li>无标题文档无标题文档</li>  <li>无标题文档无标题文档</li> &

  • go gin最左路由前缀树

    gin也用了一段时间了,写个文总结一下路由部分吧,以免忘记。 关键名称:最左最短前缀树。 假设,最开始的路由route.GET("/R1R2R3R4R5..........Rn",func(c*gin.Context){}),这个时候树还是空的,直接调用n.insertChild(path,fullPath,handlers)函数。 对于/R1R2R3R4R5..........Rn,分几种情况: 一、没有通配符:和* 直接生成一个结点。 二、无*号,但至少有一个冒号":",第一个冒号所在位置Ri,有如下推论: n>=i+1比如/user/:就是非法,必须带有参数名。 设集合A={j|j​(i+1,n]&&Rj=:},且A从小大到排序; 集合B={k|k​(i+1,n]&&Rk=/},且B从小大到排序。 A与B分四种情况 A与B分四种情况 A=​,B=​此时生成的路由树如下,W表示wildcard,虚线表示不挂载handlers。   A=​,B​​取k=Min(B)此时生成的路由树如下   A

  • 小程序音频播放详解

    <imgclass="static-video"@tap="startAudio"v-if="currentPlay==false":src="imageUrl+'/voice.png'"/> <imgclass="play-video"v-else:src="imageUrl+'/play.gif'"/> data中的数据 currentPlay:false, 复制 第一种方式 //开启播放音频 startAudio(){ constinnerAudioContext=uni.createInnerAudioContext();//创建并返回内部audio innerAudioContext.autoplay=false;//不自动播放 innerAudioContext.src=this.pageInfoBack.leaveReason;//音频的地址,不支持本地路径 innerAudioContext.obeyMuteSwitch=false;//即使用户打开了静音开关,也能继续发出声音 //音频播放事件 letself=this; self.curre

  • linux--档案与目录管理

    下面是最近学习档案与目录管理的一些知识点总结********博客园-邦邦酱好******** ******************************目录的相关操作**********************************1.特殊目录(1).:代表此层目录(2)..:代表上一层目录(3)-:代表前一个工作目录(4)~:代表【目前用户身份】所在的家目录(5)~account:代表account这个用户的家目录2.变换目录cd(changedirectory)3.显示目前所在的目录pwd(PrintWorkingDirectory)pwd[-P]-P:显示出确实的路径,而非使用链接路径cd/var/mailpwd-->/var/mailpwd-P -->/var/spool/mail因为/var/mail是连结档,连结到/var/spool/mail4.建立新目录mkdirmkdir[-mp]目录名称-m:直接配置文件的权限-p:帮助直接将所需要的目录(包含上层目录)递归建立起来如:mkdir-m711test1   &nb

  • Python调Jmeter执行参数化jmx脚本

      本渣使用python已久,一直响应“Lifeisshort,usePython”(人生苦短,我用python)这句话号召。用着久了,真会变“懒“,但凡是手工处理的任务,都想使用python脚本替代。   烦透了jmeter输入如下鬼命令:   Jmeter-n-t{tmpjmxfile}-l{csvfilename}-e-o{htmlreportpath}       尤其是{htmlreportpath}这个文件夹路径,没有这个文件夹又不会自动创建,有的话又必须为空。经常要给文件夹、文件命名,而且命名又没什么规范,乱七八糟的。   于是想着,即便是用python帮我创建文件夹,帮我生成命令,也是好的。       精益求精,做着做着,就会想着,干脆把命令也给执行了,于是就有这样的产出。   使用场景:     1.需要不断的运行性能测试脚本,摸底,取数。如线程数、循环次数。     2.需要等待较长时间的        话不多说,直接来段代码:   p

相关推荐

推荐阅读