摘要:GaussDB(for MySQL)是华为自研云原生数据库,具有高性能,高扩展,高可靠的特点,完全兼容MySQL协议,自研架构和友好的生态兼容性,可以同时满足数据库管理员、应用开发者、CTO的运维、使用和业务发展需求,本次主要介绍GaussDB(for MySQL)在云原生技术方向上遇到的挑战和未来的发展演进路径。
在2023云数据库技术沙龙 “MySQL x ClickHouse” 专场上,华为云数据库高级产品经理周家恩,为大家分享一下《GaussDB(for MySQL)云原生数据库技术演进和挑战》的一些技术内容。
周家恩,华为云数据库高级产品经理,10年以上数据库技术运维,产品管理经验,先后在多家TOP云厂商任职产品经理,熟悉MySQL,SQL Server等多款数据库管理,维护以及商业运营工作,现任华为云数据库高级产品经理,负责原生数据库GaussDB(for MySQL)产品管理和设计,运营工作。
本文内容根据演讲录音以及PPT整理而成。
大家好,先让我自我介绍一下。目前我在华云数据库团队担任数据库产品经理,主要负责MySQL领域的产品规划。今天我带来的主题是《GaussDB(for MySQL)云原生技术的演进和挑战》。
让我们先来看一下华为数据库的发展历程。可能在许多人的眼中,华为是以硬件起家的公司。但实际上,华为数据库的发展已经开始了十几年,起步非常早。在云这块的话有几个阶段,我们主要分成两条线:开源和云原生数据库。
开源方面,我们涉及到的是RDS和MySQL。而对于云托管,我们早在2014年15年左右就开始了内部业务的使用。此外,我们还推出了云原生数据库,其中包括云原生MySQL。亚马逊在2014年推出后,很多云厂商都不断地在借鉴和学习。在2018年和2019年,我们发布了第一个商用版本。
在我们看来,云原生数据库与存储的可用性、可靠性和性能密切相关。华为的企业级存储在中国市场拥有非常不错的市场占有率,因此我们将云原生数据库与华为的企业级存储紧密融合。随着架构和技术的不断演进,我们在2019年推出的商用版本,这就是我们华为数据库发展的历程。
让我们来了解一下GaussDB(for MySQL)的系统架构。GaussDB(for MySQL)是一款基于存算分离架构的云原生数据库,完全兼容MySQL协议,并由华为自主研发的分布式存储系统作为底层支撑。它采用active架构,相比传统开源架构,不需要备库进行数据同步,从而节省了用户的成本。最关键的一点是,GaussDB(for MySQL)采用日志即数据架构,这一架构最早由亚马逊的Aurora推出。该架构的优势在于优化了MySQL事务提交路径,从而显著提升了整个事务提交的性能。
让我们先来了解一下我们在性能方面做了哪些工作。通常来说,云原生数据库在性能方面领先于传统架构。我们经过实测发现,在写入性能方面,我们的性能是开源架构的七倍。这主要归功于我们的架构设计。
我们采用了存算分离架构,不同厂商的设计会有所不同,但我们的设计与亚马逊的Aurora比较相似,可以说华为的架构与亚马逊最接近。我们采用了日志即数据架构,即在整个事务写入时,我们会直接进行REDO落盘即事务提交,不需要再从计算节点刷脏页到磁盘,从而大幅减少了整个事务提交的网络负载和开销。因此,我们的写入性能比开源架构和没有采用这种架构的厂商都要高。
本次活动中我们主要讨论MySQL x ClickHouse,在TPCH领域,我们也做了很多优化工作,并开发了并行查询技术,从而在性能方面取得了很大的提升。下面看一下我们在性能这块做了一些优化。
就并行查询而言,目前我们在TPCH的22个SQL中的整体性能提升可以达到26倍。华为在并行查询方面所做的一些工作与其他厂商也稍有不同。
就目前在云原生数据库领域比较大的几家友商来说,例如Aurora,在并行查询这个方面,它是通过将算子下推到存储引擎上来实现的。而亚马逊并不是在SQL引擎这一层面进行并行操作,它主要是充分利用了其分布式存储来提升性能。而像国内其他友商,则主要是在SQL引擎层面进行并行操作。
其实我们做了两个方面的工作。一方面,在SQL引擎层面,我们实现了并行操作,就像上一页所讲的那样。另一方面,我们还实现了NDP算子下推,充分利用了分布式存储的性能,将底层存储资源充分利用起来。我们对复杂的算子、Filter、Projection、谓词包括比较运算等进行了下推优化,同时也对快速列和虚拟列进行了下推。因此,在复杂查询方面,我们称之为“双轮驱动”,这也是我们与其他厂商不同的地方。接下来,看下实际的性能表现。
这个就是开启NDP在TPCH场景下的一个性能表现。开启以后,最高场景是可以就是计算到网络之间的开销。开源的MySQL在进行大的复杂查询时,我们需要将数据从磁盘传输到计算层进行计算,会有大量网络开销,而通过算子下推技术,TPCH处理多个SQL时,我们看到网络开销的最高节省率超过90倍。在性能方面,我们测试了NDP+PQ场景,该技术品牌被称为NDPQ。性能表现最高提升高达30倍以上。
在可用性方面,我们的DFV支持跨AZ能力。目前,华为云国内的主力region包括上海、北京、广州、贵阳、乌兰察布等都支持3AZ部署。未来,3AZ部署也将成为华为云GaussDB(for MySQL)的默认架构。今年我们正在开通的节点中,包括香港、曼谷以及拉美、中东等地区。在欧洲,我们与德国电信和法国电信合作,推动GaussDB(for MySQL)全球化进程。我们的跨AZ能力可以实现RPO=0,保证数据的高可靠性。
关于扩展性,我们知道在云上使用MySQL数据库,它更适合互联网业务,尤其是互联网、游戏和电商等用户。当然,现在政企客户也越来越多地上云,我们也为此做了节点的自动扩展,以满足更多不同类型客户的需求。目前,我个人觉得现在云有一个非常重要的的趋势发展,其中一个关键的趋势是HTAP。另外,Serverless也是一个重要的趋势。我们可以看到,像亚马逊去年的invent大会上最核心的发布之一,就是所有数据库开始向是Serverless化发展。
在云上除非技术实力特别强之外,用户最关注的问题就是成本。因此,我们提供了一种类似于Serverless的服务,支持按需自动弹性扩展。这是我们早期推出的一个雏形,其中包括自动弹性扩展周期和按需模式。由于采用了存算分离架构,加节点的弹性过程非常快速,一般只需要五到十分钟即可完成。因此,它的速度比传统的MySQL快得多。传统的MySQL在数据量不断增加时,进行规格变更和加节点所需的时间非常长。
在备份方面,我们的存储采用基于AppendOnly模式的DFV存储。我们实现了秒级快照,这是我们自己开发的快照系统。我们进行了测算,发现大约1TB的数据备份恢复只需要三四十分钟即可完成。
我们还将在今年年底推出backtrack功能,该功能基于存储的多版本特性,用户可以在选择的时间点范围内进行回溯操作,往前或往后。我们可以将1TB数据这个级别的回溯时间控制在五分钟以内。
再看数据库代理服务,我们目前支持用户按需购买服务。默认情况下,我们不提供代理服务。如果用户有需求,可以按需购买读写分离服务,无需对其业务进行任何改动即可自动实现读写分离。
我们今年对读写分离进行了大量的优化,其中包括基于负载均衡模式的支持,我们还根据业务特征,支持用户选择最终一致性、会话一致性和全局一致性三种一致性级别。
我们的代理服务支持只读模式和读写模式。如果用户需要在分析型业务和交易型业务之间进行物理隔离,可以选择只读模式。在只读模式下,代理服务会为用户创建不同的只读节点,从而实现对分析业务和交易业务的物理隔离。
接下来介绍我们的HTAP只读分析节点。这是我们在HTAP领域中不断推进的一步。正如我之前所述,我们在复杂查询方面采用了并行查询和算子下推等技术。然而这些还不足以满足所有用户的需求,因为这2个技术本质上仍在同一份数据上进行操作,也就是说还是在整个一套系统里面。
因为大家都知道,在做TPCH这样的场景时,对整个资源的消耗是不可控的。一个分析业务可能会影响到交易型业务。为了解决这个问题,我们开发了只读分析节点,它基于ClickHouse实现。通过CDC模式,我们可以将用户交易数据从GaussDB(for MySQL)同步到ClickHouse。正如之前的嘉宾所介绍的,我们也是采用了基于binlog的方案。
我们目前还处于公测阶段,主要服务于华为内部的终端消费者,例如华为手机、手环和运动健康等业务。这些业务的一部分分析业务已经迁移至我们的只读分析节点上。
关于并行创建索引,我们都知道社区版的MySQL在创建索引时是单线程操作,无法实现多线程。因此,如果要创建一个较大的索引,耗时会非常高。为了解决这个问题,我们开发了多线程的索引创建功能,多线程被设计用于从存储读取数据、排序以及创建索引等操作。经过测试,该功能相比于开源版本的MySQL,可以提升性能六到七倍。
在我们后续产品的演进中,Serverless将是一个非常关键的方向。我们计划在今年上半年(五六月份)进行Serverless的公测,下半年则会正式商用。在Serverless领域,我们已经做了很多探索。目前业内最为出色的Serverless产品是亚马逊的Serverless V2。虽然亚马逊在最初推出的Serverless V1已经引起了不少关注,但它仍存在某些局限性,例如扩缩的粒度和速度可能不够理想。但是随着Serverless V2的推出,它的扩缩粒度可以达到0.5 ACU,而且端到端的感知速度只需十秒钟。因此,当时的亚马逊Serverless V2可以说是引领了整个云原生数据库Serverless的发展趋势。
我们还在技术方面进行了很多创新。其中,我们实现了快速弹性的缓冲池(buffer pool),并在内核层面对其进行了加速。通过这一技术,我们可以实现毫秒级的扩展,从而在端到端的运行过程中,经过内部环境测试后,可在大约十秒钟内(甚至可能更快,大约八秒左右)完成。
我们还探索了一些技术,例如ALT应用透明迁移。在Serverless领域,跨机操作是一个关键点。在单机内,我们可以相对简单地实现弹性伸缩,但是在云上,我们需要考虑如何跨多台物理机运营,如何扩大资源池规模。这带来的问题是资源池水位可能会比较高,在扩展过程中可能会出现资源不足的情况,这时我们需要跨机操作,因此保证迁移的平稳性和不中断就显得尤为重要。我们实现了ALT应用透明迁移技术,通过事务状态保持等方式,实现了平稳迁移。
在Serverless领域,我们已经实现了按需付费的存储,计算层计划在今年五六月份推出,而Serverless代理层预计会在今年年底推出。
最后再看一下我们的几个案例,其中第一个种子用户是国内比较大的保险公司。他之前使用的是Oracle,但由于国产化的需求和去O的需求,他们选择了我们的服务。由于我们的服务可以部署在公有云上,我们通过一些专家服务和相关工具对该公司业务进行评估,并将其迁移到GaussDB(for MySQL)。迁移完成后,该公司的TCO降低了50%。
我们的另一个案例是华为终端。整个业务规模非常大,涵盖了华为整个手机业务、汽车业务以及应用商店等实例,实例数量可以达到非常大的规模。以前,由于线下的自建数据库存在许多痛点,他们有一个庞大的DBA团队来维护。经常面临可用性和运维相关的问题,以及如果发生切换,可能会面临数据丢失的情况。
迁移到GaussDB(for MySQL)后,他们面临的问题像数据丢失就已经不存在了。此外,我们不断演进,扩展了自动弹性伸缩等特性。让用户的成本降低了40%左右。同时,他们以前使用了商业的分析型数据库软件,也开始逐步使用我们的HTAP分析只读节点,这进一步降低了整体的成本。
本次大会围绕“技术进化,让数据更智能”为主题,汇聚字节跳动、阿里云、玖章算术、华为云、腾讯云、百度的6位数据库领域专家,深入 MySQL x ClickHouse 的实践经验和技术趋势,结合企业级的真实场景落地案例,与广大技术爱好者一起交流分享。
SAPHANAROWID:范例一:Select"rowid">6and"rowid"<10范例二:SELECT"注意:只能使用"rowid"ROWID"都是错误的语法。错误语法:错误范例一:Select"rowid">6androwid<10Couldnotexecute'Select"rowid">6androwid<10'in3ms632µs.SAPDBTechJDBC:[7](at53):featurenotsupported:line1col54(atpos53)错误范例二:Select"rowid">6and"ROWID"<10Couldnotexecute'Select"rowid">6and"ROWID"<10'in4ms2µs.SAPDBTechJDBC:[260](at53
导入模块fromdjango.dbimportconnection复制contact=request.POST.get('contact') year=request.POST.get('year') month=request.POST.get('month') filterTime="%%"+year+'-'+month+"%%" param=(contact,filterTime) print(param) #currentTime=datetime.datetime(int(year),int(month)) cursor=connection.cursor() sql='SELECTscore,COUNT(1)FROM`webapp_commentsys`WHEREcontact=%sandcreate_timeLIKE%sGROUPBYscore;' print(sql) cursor.execute(sql,param) recor
先从一个HelloWorld应用开始,试试和古老的WinForms一样的拖控件式开发在创建完成一个GTK#2.0应用之后,咱可以试试开始拖控件的开发,当然这个开发方式开发出来的应用界面有点古老。不过作为玩还是不错的先拖入一个容器,和WPF一样,窗口里面的内容只允许一项,如果这一项是组件,那么意味着不能添加其他的元素,因此此时推荐使用是一个一个容器接着拖入一个按钮和一个文本然后点击按钮的属性的Label修改按钮显示文本内容为Click如下图选择文本,设置文本内容是空字符串按钮点击的事件,可以在属性的信号里面找到点击事件填写事件名,此时将会在MainWindow.cs文件创建方法返回代码,在按钮点击方法里面设置文本内容此时运行代码,可以看到如下界面这就是最简单的拖控件的方法
使用Matplotlib在wxPython的Panel上绘制曲线图,需要导入:importnumpy frommatplotlib.backends.backend_wxaggimportFigureCanvasWxAggasFigureCanvas frommatplotlib.figureimportFigure复制下面直接贴出源代码:#coding=utf-8 """ 程序的主入口 """ importwx importnumpy frommatplotlib.backends.backend_wxaggimportFigureCanvasWxAggasFigureCanvas frommatplotlib.figureimportFigure classFirseFrame(wx.Frame): def__init__(self,parent=None,id=-1,title='',pos=wx.DefaultSize,size=wx.DefaultSize,style=wx.DEFAULT_FR
2、数据库表的范式化优化1、表范式化范式化是指数据库设计的规范,目前说道范式化一般是指第三设计范式。也就是要求数据表中不存在非关键字段对任意候选关键字段的传递函数依赖则符合第三范式。 存在以下传递函数依赖关系: (商品名称)->(分类)->(分类描述) 也就是说存在非关键字段“分类描述”对关键字段“商品名称”的传递函数依赖。不符合第三范式要求的表存在以下问题: 1、数据冗余:(分类,分类描述)对于每一个商品都会进行记录。 2、数据的插入异常 3、数据的更新异常 4、数据的删除异常(删除所有数据,分类和分类描述都会删除,没有所有的记录)如何转换成符合第三范式的表(拆分表): 将原来的不符合第三范式的表拆分为3个表 商品表、分类表、分类和商品的关系表 2、反范式化反范式化是指为了查询效率的考虑把原本符合第三范式的表“适当”的增加冗余,以达到优化查询效率的目的,反范式化是一种以空间来换取时间的操作。 如何查询订单信息selectb.用户名,b.电话,b.地址,a.订单ID,sum(c.商品价格*c.商品数量)as订单价格 from订单表asa join用户表asbona.用户
前不久分享了一篇关于数据指标DAU/MAU的部分理解,文章里我多次提到下面这句话「没有绝对的对错,只求彼此的认同」为什么要多次强调这句话?因为我们学习指标概念的前提都不是去追求一个绝对的对错,而是为了最后能和你共事的同事/伙伴形成认同。这样当你们去共同探讨某一个指标问题的时候,你们能清晰的认识到你们对这个指标的认识是什么,只有这样你们才能基于同一个认知去探讨问题,而不会出现各说各话的尴尬场面。接下来咸鱼继续和大家聊聊我对数据指标的学习与认识。如何定义新增?假设我们的某个产品和渠道商合作,对我们的产品进行推广,结算费用时如何定义「新增」用户?(渠道推广费用以新增用户数计费)这里我们剖析一下「新增」这个指标:新:我们如何选择合适的方法判定「新」?增:我们如何选择一个合适的节点定义「增」?如何判定「新」?判定新用户有一下两种方法:基于设备判定:移动端,PC端各有门道如:MAC地址之类基于账号判定:以安装的用户登录的账号判断按照具体业务需求选择即可如何选择适合的节点定义「增」?渠道商往往比较强势,所以合作前就该谈好在那个节点算钱。往往我们推广一款产品有以下几个节点: 渠道商引流页面->应
1<template> 2<divclass="home-wrapper"> 3<divclass="home-top">thisisfromHome.vue</div> 4<!--num>10,背景颜色红色,否则橙色--> 5<divclass="test":class="num>10?bgColor1:bgColor2">thisisatest,numis:{{num}}</div> 6<button@click="changeNum">clicktochangenum</button> 7<divclass="test2":style="{fontSize:fontSize+'px'}">thisistest2</div> 8<button@click="chang
最近写商城项目,对于商品的详情部分我选择使用百度编辑器UEditor,这是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量、可定制、用户体验优秀等特点先说一下报错502的解决办法吧,昨天真是写了一天的Bug,改来改去的。下午将写好的程序交给公司产品助理进行测试商品上传,然后错误就来了直接在群里发了一个上传失败请重试的截图,大写的尴尬哦 ?没直接回复,以为是服务器的权限的问题,然后去改了一下权限,让重新上传一下,结果还是不行,跑过去看了一下,报错502这就开始接着找Bug了,看了一下发现是Uploader.class.php中的一段代码搞的鬼$this->stateMap['ERROR_TYPE_NOT_ALLOWED']=iconv('unicode','utf-8',$this->stateMap['ERROR_TYPE_NOT_ALLOWED']);复制把上面这段代码注释掉就可以解决502问题UEditor报502错误也有很多种,这里提供一个我所遇到,仅供你参考 ?下面来说
AI和机器学习将极大改变安全运作方式,虽然目前正处在驱动网络防御的早期阶段,但已经在终端、网络、欺诈或SIEM中,起到了识别恶意活动模式的明显作用。未来,在防御服务中断、属性及用户行为修改等领域,我们将看到越来越多的用例。机器学习在安全领域的顶级用例有哪些呢?我们不妨来看看以下5个。1.用机器学习检测恶意活动并阻止攻击机器学习算法可帮助公司企业更快速检测恶意活动,并在攻击开始前就予以阻止。英国初创公司Darktrace于2013年成立,其基于机器学习的企业免疫解决方案(EnterpriseImmuneSolution),在这方面已取得了很多成功。作为这家公司的技术总监,大卫·帕尔玛见证了机器学习对恶意活动及攻击的影响。帕尔玛称,利用机器学习算法,Darktrace最近帮助北美一家赌场检测出了数据泄露攻击。该攻击将联网鱼缸用作了进入赌场网络的切入点。该公司还宣称,去年夏天的WannaCry勒索软件大肆虐中,其算法也防止了类似的一起攻击。针对感染了150个国家20多万受害者的WannaCry勒索软件,帕尔玛称:“在数秒内,我们的算法就检测出了一家国民医疗服务(NHS)机构网络中的攻击,在尚
开始浏览器报(net::ERR_CONNCTION_ABORTED)然后就一直找这个错误是怎么引起的,找了一圈也没有找到答案。 后来看了一下后台发出后台错httppostrequestheaderistoolarge错误 这一下就好解决了修改一下TOMCAT就行了接下来我们看如何修改: post请求,本身请求参数无大小限制,但是一般的服务器像tomcat都有默认大小,出现上述问题就是传输的参数超过了默认大小, 处理办法:在server.xml中 <ConnectorconnectionTimeout="20000"port="8080"protocol="HTTP/1.1"redirectPort="8443"maxPostSize="0"maxHttpHeaderSize="102400"/>复制 处加上maxHttpHeaderSize="102400"
原创:http://blog.csdn.net/cooleader320/article/details/1907535 http://www.cnblogs.com/chenxizhang/archive/2008/11/10/1330718.html 测试驱动开发(TDD)是一个很时髦的名词。VSTS2005开始附带了一些测试工具。但也有一些很好的开源工具。本文就是介绍三个相关的工具。 WhatisNUnit? NUnit是一个单元测试的Framework,是专门针对.Net来写的。可以在http://www.nunit.org免费下载. http://www.cnblogs.com/confach/archive/2005/08/14/177817.html 1. NU
https://mp.weixin.qq.com/s?__biz=MzA3NjAwOTk0NA==&mid=2650657441&idx=1&sn=e0b9365e66329d8e735605a511f46d9c&chksm=876eaa16b01923008d4a07156936a434bdd9a3133309e457d24fc9d9e19905bfdf3de639427e&mpshare=1&scene=23&srcid=1107mAk4DmryoFUXsnloSXca&sharer_sharetime=1667882093728&sharer_shareid=28419bb91d88bfa778ee5f6d3429afa5#rd 3.7数字化前沿在需求侧的进展落地P端:机会空间(自建生态)接下来我想讲P端的机会空间,再拆解一下对不同的人群,特别是开发者,都面临哪些创业创新机会。下面这一页,我们梳理了针对开发者的创业创新机会有哪些,包括在中国如何自建生态,今天所有数字化
原文链接:https://www.jianshu.com/p/cd2dd59d1566 最近在搞监控,突然看到我系统的内存要用完了,赶紧登录服务器看看, ~]#dstat-m 16G内存就剩1G了。怎么回事,然后用free命令看了下 ~]#free-m 原来是cached占用较多,真正用的只有6773M,空闲是9307M。但是还是对cached占用这么多比较担心,所以就查了下, 下面文章转载至http://blog.csdn.net/beacherlu/article/details/45871489 经常遇到一些刚接触Linux的新手会问内存占用怎么那么多? 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是linux内存管理的一个优秀特性,在这方面,区别于Windows的内存管理。主要特点是,无论物理内存有多大,Linux都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的
问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。 购票时,一个人可能购一张或多张票,最多不超过5张。如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应该安排在编号最小的几个空座位中(不考虑是否相邻)。 假设初始时车票全部未被购买,现在给了一些购票指令,请你处理这些指令。 输入格式 输入的第一行包含一个整数n,表示购票指令的数量。 第二行包含n个整数,每个整数p在1到5之间,表示要购入的票数,相邻的两个数之间使用一个空格分隔。 输出格式 输出n行,每行对应一条指令的处理结果。 对于购票指令p,输出p张车票的编号,按从小到大排序。 样例输入 42542 样例输出 126789101112131434 样例说明 1)购2张票,得到座位1、2。 2)购5张票,得到座位6至10。 3)购4张票,得到座位11至14。 4)购2张票,得到座位3、4
名称 优点 缺点 VisualSourceSafe(简称VSS) VSS采用标准的windows操作界面,容易上手。VSS的安装和配置非常简单,并且费用低几乎免费。 VSS的配置管理的功能比较本,VSS只能在windows平台上运行,安全性不高。 SVN(Subversion) SVN支持Linux和windows简单易学,容易上手,功能较高,安全性较高,免费。 技术支持差,遇到问题只能自己上网查资料。 ClearCase 功能强大,可以适用于多人开发。 使用难度稍大,上手不易,并且价格不菲。 GitHub 免费,速度快,功能比较强大适用于任何大小的项目。 上手难,需要长时间的不断实践学习磨合。
1<!DOCTYPEhtml> 2<htmllang='zh-cn'> 3<head> 4<title>Insertyoutitle</title> 5<metaname='description'content='thisismypage'> 6<metaname='keywords'content='keyword1,keyword2,keyword3'> 7<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"> 8<linkrel='stylesheet'type='text/css'href='./css/index.css'/> 9<scripttype='text/javascript'src='./js/jquery-1.12.1.min.js'></script> 10<styletype='text/css'> 11html,body,div,svg{
Preface 说了好久要手撕一次lstm预测,结果上学期用bucket时遇到issue后就搁了下来,后面还被突然尴尬了几次(⊙﹏⊙)b。 好吧,先把issue放出来https://github.com/apache/incubator-mxnet/issues/8663,然而并没有大神鸟(我也不知道为什么...)。 Code 今天也是事起突然,然后就写了段测试程序(可能大家都玩gluon,不理symbol那一套了): importmxnetasmx frommxnetimportgluon importnumpyasnp hiden_sizes=[10,20,1] batch_size=300 iteration=300000 log_freq=20 ctx=mx.gpu() opt='adam'#'sgd' unroll_len=9 t=mx.nd.arange(0,0.01*(1+unroll_len),.01,ctx=ctx) tt=mx.nd.random.uniform(shape=(iteration,1),ctx=ctx) t=(t+tt).T#(unroll_le
1介绍 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。 2详细介绍 2.1top命令运行图 打开shell终端输入:top,即可显示下图 2.1.1第一行-基本信息 信息栏第一行 含义(基本信息) top-08:56:22 当前时间:08:56:22 up23days,19:15, 运行时间23天又19小时15分钟 1user, 当前有一个登录用户 loadaverage:0.00,0.01,0.05 系统负载,三个数值分别为1分钟、5分钟、15分钟到现在的平均值 系统平均负载如何理解 单核CPU-单车道-数字在0.00-1.00之间正常 多核CPU-多车道-数字/CPU核数在0.00-1.00之间正常 安全的系统平均负载:单核负载在0.7以下是安全的,超过0.7就需要进行优化了 应该看哪一个数字,1分钟,5分钟还是15分钟?:作者认为看5分钟和15分钟的比较好,即后面2个数字。 怎样知道我的CPU是几核呢?:grep'modelname'/proc/cpuinfo|wc-l 2.1.2第二行-
$0Shell本身的文件名。 $n传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 $#传递给脚本或函数的参数个数。 $*所有参数列表。 $@所有参数列表。$*和$@都表示传递给函数或脚本的所有参数,不被双引号("")包含时,都以"$1""2"…"n"的形式输出所有参数;当它们被双引号("")包含时,"$*"会将所有的参数作为一个整体,以"$1$2…n"的形式输出所有参数;"@"会将各个参数分开,以"$1""2"…"n"的形式输出所有参数。 $?最后运行的命令的结束代码(返回值)即执行上一个指令的返回值(显示最后命令的退出状态,0表示没有错误,其他任何值表明有错误)。 $$当前Shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID。 $!Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)。 $-显示shell使用的当前选项,与set命令功能相同。 !!执行上一条命令。 !number执行~/.bash_history当中的第number条命令。 !command由最近的命令向前搜寻首个命令串开