从 Google 删库,到蚂蚁跑路,Care 与 Fear 点燃的 Flare

从‘删库到跑路’梗说起:聊聊rm -rf的设计哲学与Windows命令的替代方案 本文从技术圈流行的‘删库跑路’梗切入,深入分析了`rm -rf`命令背后的Unix/Linux设计哲学与Windows系统删除命令的差异。探讨了两种操作系统在用户信任与安全边界上的不同理解,并提供了跨平台安全删除的最佳实践方案,帮助开发者在效率与安全之间找到平衡。 阅读详情

Bytebase 第一次完成融资后写了一篇文章,主要讲了从行业层面做 Bytebase 的逻辑。一年过去了,这一年我们所处的开源/infra/数据库/企业服务赛道从热点归于平静,尤其在国内,又习惯性地反应过度,直接降到冰点。但从全球来看,整体行业其实是在继续加速发展的,年初我们的一篇「苍狼白鹿,星霜几度|万字长文回顾 2022 年数据库行业」在中英文渠道都获得了不少的关注,而今年我们能写出的内容还能更加的丰富。而今天这篇文章想讲一段个人的经历,回到做 Bytebase 的初心。也算是到年底了,给这一年来支持我们的朋友和用户一份回顾和展望吧,Enjoy。

正文

2015 年某一天下午,Google 加州山景城总部 CL2 一楼,Google 云数据库工程团队所在地。彼时一个工程师正盯着屏幕,校对着一组亟待修复的数据库实例,准备采取下一步行动。「啪」,沐浴在加州阳光下的金手指敲下了按键,指令立马顺着 Google 错综复杂的网络,横穿大半个美国,飞奔到了千里之外的爱荷华数据中心。眼看着待办任务上又划掉了一项,工程师习惯性地往后靠了靠座椅。只是紧接着几秒之后,就看到他把头伸到了屏幕前,双眼瞪大,紧盯着眼前的文字:

Instance XXX has been successfully deleted.

file

升迁,跳槽,转行,这些都可以作为职业生涯的分割点。而对我来说,一个重要的分割点,就是 2015 年这个敲下指令的瞬间,因为在这一刻,我也不幸毕业,加入了误删过生产数据库的大军。多年以后,我依然能很清晰地回忆出之后的每一个行动细节,先是后背立马冒出冷汗,呆滞了几十秒的时间,脑海快速检索各种急救方案,无果之后,从工位起身,走到 TL 旁边,强装镇定地告诉对方自己刚误删了数据库。TL 沉思了片刻,然后说到,这个是有版本管理的,可以尝试恢复一下?我被一下子点醒,慌乱之中,居然忘了这套当年 Google 云创始团队写的基于 Bigtable 上的 Megastore 上的 VFS,存储性能虽然糟糕,但是实现了强悍的增量变更和版本化,所以撤销误删数据库,只要一个简单的版本回退,相当容易。

file

劫后余生后,可能伤疤也是战士的功勋章,我承担起了更多管理数据库的职责,再加上业务本身的发展,万级,十万级,一直到 2018 年离开 Google 的时候,我负责的已经是全球数一数二体量的数据库实例集群。而接下来的一站,则是回到中国,加入当时如日中天的蚂蚁金服,也延续我在 Google 的数据库老本行,负责蚂蚁内部的数据库平台。蚂蚁的数据库平台业务主要分为三块,一个是面向 DBA 的运维管理平台,一个是面向业务研发和 DBA 协同的开发者平台,还有一个是做数据库诊断的智能平台。通过这几个平台,收拢了所有蚂蚁内部开发者和 DBA 们对数据库的变更和运维操作。

file

虽然自己不再像在 Google 那样,在一线操作数据库,但压力却又高了一个数量级。毕竟负责的平台要保驾护航的,是那些支撑着支付宝,余额宝,花呗这些国民级应用的核心数据库。一开始加入时,团队同学先给我这个外来和尚科普了下国内等保的概念,然后指着屏幕上的数据库列表告诉我,看,这几个都是最高等保级别的,一定要好好看着,可都是能要了公司命的!到后来渐渐和大家混熟后,他们再给我讲当年出了严重的数据库事故后,7x24 连轴转,享受着全程被所有总裁们站在身后围观的待遇。

file

置身于这样的环境中,偶尔我也会产生一种似乎能手握着一家千亿美金估值公司命脉的错觉,但下一秒马上被钉钉里的告警通知拉回打工人的现实。蚂蚁的技术水位整体比不上 Google,但这套内部的数据库平台,有些方面却还是领先的(最近不又中了一篇 SIGMOD)。毕竟业务场景是工具平台最好的试炼,蚂蚁支撑的业务事关民生,金融,保险,蚂蚁在业务层面的创新力也强于 Google。数据库平台团队,每天就在被各种变态的业务场景蹂躏中走向成熟。但饶是如此,身为局中人,自己当然也知道平台本身的各种不完善。记得有一次线上 P1 故障,就是因为一个危险操作按钮,没有加二次确认,导致了 DBA 的误操作。蚂蚁内部的故障是要定责的,定责又是和绩效挂钩的。所以到了故障复盘会那天,业务方和数据库团队坐在一起,前面的基本都是铺垫,最后定责的那一刻才是高潮,开始互相甩锅。但锅总有甩不掉的时候,我在数据库团队呆了一年,而这一年里背的故障,比我其余整个职业生涯加起来的还要多。但当我告别团队的时候,却还是由衷地感谢大家,没有提前终结我在蚂蚁的生涯。

file

数据库团队之后,我被调去了开发者工具部门,后来又去了生产力协同平台。不同部门有各自的精彩和挑战,但在数据库团队时的压力无疑是最大的。在巨大的压力面前,会暴露出更真实的人性,有些是负面的,但也有不少的善意。比如我们和业务团队掰扯故障定责败了,就把故障带回到数据库团队内部消化。到了内部一切还是好商量的,DBA,平台,引擎这几块的主管在一起,盘一下身上已经背的故障,再结合今年团队的情况,匀一下。蚂蚁的技术在整个业界其实还是挺领先的,但是蚂蚁的业务总又是走在技术的前面,许多时候都是没条件先硬上。所以故障分完,马上大家都还是要背靠背去支援前线的业务。这样一年下来,数据库团队背的故障数总是遥遥领先。到了这里,就又体现了老板们的管理智慧,因为还是会给数据库团队一些照顾,如果真的按照故障数打绩效,那数据库团队基本就年年认领 3.25 了。

file

其实前面提到和业务团队开复盘会的互相甩锅也是调侃,身为平台技术团队的我们也知道,自己一开始 YY 出来的轮子都是方的,业务团队都是硬着头皮开着方轮子的车,踏上征途,再在旅程中一点点把轮子磨圆。一路颠簸,不时抛锚,偶尔翻车,但大家一边骂骂咧咧,一边还是一起把车扶起来,继续赶路。有人问我,国内做 infra 有什么优势,能想到的还是那服基建狂魔的祖传药方,场景多,人心齐,脑子活,干劲足。

没有圆模子的车间只能生产方的轮子,那就一边赶路一边把轮子磨圆,越磨越圆,纵情向前。

团队间日常撕的虽狠,但一起扛过了一场场硬仗,发现最终沉淀下的还是战友般的信任。大家团结一心,努力工作,为自己,为家庭,也为世界带来更多微小而美好的改变。支付宝,支托付,蚂蚁对内对外最强调的都是信任二字。确实只要信任的招牌不倒,队伍就能重新集结,业务一时被锤,也有重整的一天。

file

虽然我负责的业务没有被捶,但后来我还是从蚂蚁跑路了,因为自己想要做一款工具,就是 Bytebase。一直说做产品要从自身的痛点出发,光这点,Bytebase 是完美符合的。Bytebase 是一款面向研发和 DBA 协同的数据库开发者工具,放眼整个业界,这也是一个新品类,因为是我从蚂蚁三段跨界经历,数据库,开发者工具,生产力协同中提炼出来的。但说到底这还是一个数据库领域专业性很强的工具,而设计内核基于的是在 Google 以及蚂蚁数据库团队经历的痛点。

把这个设计内核掰开来看就是两半,一半是 Care,一半是 Fear。

Care 的部分,在于我看到但凡要和数据库打交道的一线同学,无论是业务研发还是 DBA,都有点像部队里扫雷的工兵,任务风险高,但部队要推进,又不得不做。Google,蚂蚁的工兵装备倒是挺完善了,虽然也是险象丛生,但踩雷了还能幸存。但其他公司,扫雷的任务还是要做,可是又没有基本的作业装备,那我希望 Bytebase 就能成为他们的出门装备,帮助他们高效安全地作业。 Fear 的部分,在于我身为技术负责人,也害怕数据库误操作导致的毁灭性打击。我在 Google 算是逃过一劫,但是每当想起,我还是会后怕,假设那个数据库真的被删掉无法恢复了,对于我自己,我的主管,整个产品甚至公司品牌会带来多大的负面影响。在蚂蚁数据库团队,所幸团队给力,否则也有可能因为数据库误操作引发公共事件,而我作为主管,也很可能要承担责任,被扫地出门。有经验的技术负责人一定是希望尽量统一数据库操作入口,数据库规范和操作变更流程的,以避免诸如 #删库跑路 导致的团灭。所以对于技术负责人,我也希望 Bytebase 能成为落地他们这些想法的工具。

file

而说到 #删库跑路,它之所以能成为梗甚至破圈,也是因为它能先在广大程序员群体产生共情,因为有经验的程序员都知道带上#删库跑路的徽章是一个概率事件,要做的就是如何把这个风险降到尽可能的低:

  • 个人养成良好的操作习惯,降低 20% 概率
  • 公司建立标准化的操作流程及培训体系,降低 20% 概率
  • 技术架构简单,降低 20% 概率
  • 文档清晰,降低 20% 概率

而通过引入专业的数据库开发工具,把理念和流程通过工具进行承载,减少甚至完全避免手工直接操作数据库的机会,则又能降低至少 50% 的概率。

file

而说到引入工具,我在蚂蚁的平台部门,无论是做数据库工具,开发者工具还是协同工具,当把新工具推广到业务线的时候,总是会迎来反弹。一线的业务研发总会觉得,前线业务已经忙不过来了,平台部门又在搞什么幺蛾子来卡我们。现实中,许多被引入的平台工具确实是只重视了管控,但忽略了一线的使用感受,反而拖累了整体的生产力。 所以当我们在设计 Bytebase 的时候,最核心的任务是去做中央管控和业务线灵活度之间的平衡。用户引入 Bytebase 的目的是希望提高全局的总生产力,所以管控/流程这些都是需要的,但不同公司达到最高生产力的控制点是不一样的,所以 Bytebase 也留了一定的调节空间,让不同公司可以做不同的配置。

file

同行还有投资人常会问我 2 个问题

  • Bytebase 这个场景很窄,为什么选了它 - 这个问题,说服有难度,因为没有相似的经历可以共情。Bytebase 的初心,既始于我带着一线研发帽子的 care,也源自我换成技术主管帽子的 fear,两者交织起来,点燃了内心冲动的 flare。
  • Bytebase 这个东西国外没有对标,为什么你们能做 - 这个问题,我其实也反感回答。因为对方直接上来假设了 infra 类工具只有国外团队可以无中生有,却忽略了我们团队已被国内外最严苛场景千锤百炼的事实。

限制中国 infra 团队走向全球的往往不是客观的条件,而是主观的成见。

从 Google 删库,到蚂蚁跑路,这一串的经历不仅赋予了我设计 Bytebase 的思路,也给了我足够的底气。因为我知道整个数据库开发工具领域目前的上限在哪里,Google 也不是在所有地方做的都是最好的,蚂蚁和阿里也有不少走在业界的最前沿。

而中西合璧的 Bytebase 还能把整个领域带到一个新的高度,帮助全球不同的团队在他们各自的倒 V 型曲线上,找到数据库开发生产力的最高点。

Stay young, be simple, sometimes naive.

file


💡 你可以访问官网,免费注册云账号,立即体验 Bytebase。

MySQL实战45讲——从删库到跑路 作者:禅与计算机程序设计艺术 1.简介 随着互联网网站用户数量的不断增加、应用系统日益复杂化、海量数据存储的需求越来越高,传统关系数据库已无法满足业务快速发展和海量数据的高速增长,而分布式NoSQL数据库则成为热门的选择。但NoSQL数据库相对于关系数据库来说,其独有的灵活性、高可用性、横向扩展性等优点 阅读详情

相关推荐

IC芯片验证 - 手把手教你搭建UVM验证环境

这是一个UVM的demo项目

howard789的博客 3万+

删库不易,跑路更难

本文聊了聊删库跑路的问题。

农民工老王的博客 7543

夸克缓存视频合并小工具

原理 使用windows的命令行的copy命令来合并 copy /b 0+1+2+3 new.ts 分析缓存目录结构,发现都是一个m3u8文件带一个同名文件夹 所以分析m3u8并把原来的路径换成这个缓存文件夹路径并按顺序合并即可。 其中碰到的难点是Qprocess在windows不好使,索性直接存成.bat批处理文件再执行 还有就是中文问题,具体在代码里都说了。 代码 (环境Qt5.7.0) 这是mainwindow.h #ifndef MAINWINDOW_H #defin.

natural_Caduceus 1万+

从删库到跑路,只差一条拼接命令

欢迎关注作者墨天伦:潇湘秦的个人主页 - 墨天轮公众号:潇湘秦的DBA之路。

xiaofan23z的专栏 932

PyCharm 2023最新版安装配置全攻略(附永久激活教程)

本文详细介绍了PyCharm 2023最新版的安装配置全流程,包括版本选择、初始配置、插件生态、工程模板、调试优化及团队协作等关键步骤。特别针对专业版和社区版的功能差异进行对比,帮助开发者高效搭建Python开发环境,提升编码效率与团队协作能力。

p4q5r6s7t的博客 870

VS Code ESP-IDF无法找到源文件、头文件波浪线解决

背景:想要编译小智AI项目,可以正常编译。但是一些头文件,例如#include <nvs.h>等无法找到。

Hot_Ant的博客 1493

MySQL从删库到跑路: 入门篇

删库第一步,先入个门。

m0_50897967的博客 1440

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港 前脚刚走,后脚又来,山姆大叔又来刷存在感,2020年7月28日,USS Ronald Reagan流窜在我国东海海区被卫星拍了下来: 2020年8月1日,最新卫星图像显示USS Ronald Reagan已经返回母港日本横须贺:距离其出港(2020年6月8日)已经过去了快两个月 然而事情并没有到此结束,“America”级#两#栖#攻#击#舰#(LHA-6)选择在 “八.一” 这个特殊的日子前后出港颇具挑衅的味道。 根据2020年

qq_46071146的博客 1566

程序员的崩溃瞬间:从删库到跑路

例如,在一个团队开发的大型项目中,程序员提交的代码在审查时被发现存在大量命名不规范的问题,以及一些潜在的空指针异常风险,这可能需要程序员花费大量时间去修改代码,以满足代码审查的要求。以一个电商平台项目为例,可能在开发过程中,客户突然要求增加新的促销活动模块,并且要求在短时间内上线,这就意味着程序员需要重新设计相关功能模块的代码结构,调整数据库表结构等,而这些工作可能会影响到整个项目的进度安排。从代码中难以排查的细微错误,到频繁变更的项目需求,再到系统突然崩溃等,这些都可能成为压垮程序员的稻草。

2503_92849134的博客 1114

完整IC设计流程解析&Makefile学习

本文介绍了decorder38项目的文件结构、自动化综合流程和Makefile使用方法。项目包含RTL到GDSII全流程文件,重点关注syn目录中的综合脚本。通过make dc命令运行综合流程,生成网表、约束和时序文件。关键报告如qor.rpt、area.rpt和min_vio.rpt用于分析综合质量、面积和时序。Makefile部分解释了其基本语法、IC设计中的典型结构,包括目标定义、命令执行和特殊声明,强调了其在自动化构建和依赖管理中的重要性。

m0_63352623的博客 856

LPDDR5 学习笔记02:上电初始化与下电时序

LPDDR5上电初始化流程需严格遵守时序要求:首先确保电源按顺序上电(VDD1→VDD2H→VDD2L→VDDQ),RESET_n保持低电平至电压稳定。初始化包含自动ZQ校准、命令总线训练(CBT)、WCK2CK电平校准和DQ总线训练四个关键阶段,需完成全部训练后才能正常操作。在双电源轨系统中,须在CBT前设置MR13寄存器。复位操作需保持RESET_n低电平至少tPW_RESET时间,断电时要求CS保持低电平且电源电压有序下降。非受控下电时电压斜率需低于0.5V/μs,器件生命周期内不得超过400次非受控

一只豌豆象的博客 2042

【从删库到跑路 | MySQL总结篇】索引的详细使用

【从删库到跑路 | MySQL总结篇】索引的详细使用。

m0_74352571的博客 2304

(五)激光线扫描-位移台标定

线激光属于主动测量方式,但是由于线激光的特性,我们只能通过提取激光中心线获取这一条线上的高度信息,那么要进行三维重建的话,就需要通过平移或者是旋转的方式,来让线激光扫描被测物体的完整轮廓,也就是整个表面。激光线的密度越高还原出来的物体越细腻,但由于数据量大,也会导致速度变慢。下面以位移台为例讲解,如何标定位移台。

FlyWine的博客 2891

【从删库到跑路 | MySQL数据库总结篇】JDBC编程

【从删库到跑路 | MySQL数据库总结篇】JDBC编程

m0_74352571的博客 1585

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【从删库到跑路 | MySQL总结篇】事务详细介绍

【从删库到跑路 | MySQL总结篇】事务详细介绍

m0_74352571的博客 2006

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

删库跑路技巧 删库跑路命令

1. Linux操作系统上的删库跑路 # 删除根目录下所有文件,杀伤力极大,请谨慎使用 # 此命令一出,Linux根目录下很多文件,可以能彻底从这个星球上彻底消失了 rm -rf /* # 指定路径删除,菜刀可以用来做菜亦可以用来s人 rm -rf /home/fileName 2. sql上的删库跑路 此部分杀伤力就没有第一部分十足了,当时依然需要跑路 # 删除数据库 # 删除后可能会遗留日志...

twelvecoder 5万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

从删库到跑路,老大爷学Java的心酸历程

rm -rf 背后的真香警告,今天你学废了吗?

程序员青戈 7278

Mysql从删库到跑路(1)

文章目录前言初识Mysqlmysql是啥呢什么是数据库DBMS操作数据库基本操作数据库中的数据类型操作数据表列的一些其他属性数据表的引擎基本操作总结 前言 终于放假了,前段时间一直忙着复习功课考试,也没时间更新博客,这就补上,暑假就复习巩固学过的知识吧,那就从Mysql开始吧 初识Mysql mysql是啥呢 它是一个数据库,一个用来存储关系型数据的仓库 在现实生活中,它是怎么被运用的? 像下图这样,浏览器向服务器发送一个请求,服务器去访问数据库的内容,再给客户端以响应,这也就是我们所说的B/S模式(浏览

m0_47630931的博客 975

MySQL从删库到跑路(二)

首先介绍一下MySQL文件夹下主要目录的作用:bin放二进制文件,比如一些命令;include头文件;lib引用的一些库、一些依赖;share保存一些字符编码,比如utf-8、gbk使用MySQL的时候一般在命令行中,后面的教程会在图形界面中操作数据库,默认使用的是Windows自带的cmd,如果大家觉得不好用,推荐大家使用Hyper,用什么终端都无所谓,不影响学习使用MySQL。首先大家需要了解,SQL语言是一种大小写不敏感的语言,因此学习使用过程中大家不必过于在意书写形式。

m0_73552988的博客 1088

【Mysql数据库5.7逻辑升级8.0.30 (从删库,到跑路)】

我最早接触mysql用的一直是5.5版本,用5.5版本遇到比较难搞定的问题就是复制单线程,包括一些性能上面的问题,后来升级到5.6到后面的5.7能带来直观的感受就是性能上做的优化以及提升,后来得知5.7即将停服不在更新,加上在项目交付归档安全扫描时遇到的安全漏洞(5.7已经不在提供漏洞修补),决定将mysql来一次大版本升级,最大的风险就是停服风险,数据备份相关工作一定要做好,因为8.0版本相对比与5.7还是有很多改进地方,下面会一一列举,要做好一切计划准备避免未知风险,如果项目整体结构庞大,涉及到的业务场

m0_67864787的博客 1647

《MySQL——从删库到跑路》阿里架构师分享删库跑路救命策略

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

2401_84104809的博客 1015

MySQL从删库到跑路

qq_45926335的博客 601

MySQL从删库到跑路(三)

MySQL数据库数据的操作及数据类型

m0_73552988的博客 943

Linux RM 命令学习,从删库到跑路!

rm 命令用于删除 Linux 和 Unix 等操作系统中的文件和目录。如果您是 Linux 新手,那么在运行 rm 命令时需要非常小心,因为一旦删除文件或目录,可能无法恢复文件和目录的内容。

xiaochong0302的博客 987

MySQL从删库到跑路(一)

大家在学习C语言或C++时,期末作业一般都会要求写一个学生管理系统,对于C语言和C++,数据都是通过结构体将数据保存到内存中,程序运行结束后数据会消失,数据具有瞬时性,不能长久保存。有没有什么好的方法呢?

m0_73552988的博客 904

18 校赛热身赛 C - Sometimes Naive (状态压缩)

Problem C. Sometimes NaiveMr.Frog gets the N sticks, the length of the ith stick is Ai. He can divide the sticks into one or moregroups. He wanted to know how many groups are magical at most.A group i...

vloai 771
上一篇: 如何安全地变更数据库 Schema
下一篇: 数据库架构是否该随着公司估值一起变化?
Bytebase
博客等级 码龄5年 1348粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值