Amp

作为后端开发如何设计数据库系列文章(二)设计大数据量表结构

对着背影说爱祢 提交于 2020-05-09 15:59:32
上篇文章讲解了传统数据库的一些设计注意点。 本篇为第二篇,在大数据量的情况下,如何去提前设计这个表结构,来达到一个比较好的效果。对于团队,对于后续的维护和扩展都带来更大的便利。 自增id 自增id还是可以有,但是不是必须的了。但是建议还是每张表中有一个自增id。 为什么,还是那句话,做数据查询,迁移,排序的时候,有着天然的一些优势。 唯一标识 这个标识无论是token,还是其他例如订单的订单号或者其他唯一标识都行。 重点是唯一,不只是在单系统中唯一,而是需要在并发的情况,也能够保持唯一。 关于分布式id的生成方案,网上已经有很多了,这里就不重复了。谷歌搜索搜索,自己看下原理,跑跑demo,能够满足自己业务的最大并发情况下的唯一即可。 比如说你未来几年的最大并发也就是100,搞个能支持在几千并发下不会出现标识重复的实现方案即可,并发几万,几十万,真的需要吗? 后续如果真的能够达到几万并发,那说明什么?说明业务火爆了啊。难道还抽不出时间,抽不出人来做一个id生成方案的改造?这里有比较重要的一点,不要太过超前设计,没必要,也没那个时间。 创建时间&修改时间 创建时间和修改时间还是要有的,而且建议时间精确到毫秒级别,在上一篇,我没有说精确多少,那是因为并发不高,秒级完全够了。但是在大数据量的情况下,可能一秒有几十、几百、上千、上万的数据新增都是有可能的。那么秒级在这种情况下完全就不够看了

小红书无水印视频解析下载|小红书在线去水印|小红书视频解析API接口

99封情书 提交于 2020-05-09 14:05:56
Videoparse https://www.videoparse.cn/ 支持解析 抖音、快手、小红书、QQ看点、西瓜视频、今日头条、微博、微视、火山小视频、陌陌视频、映客视频、小咖秀、皮皮搞笑、开眼、全民小视频、全民K歌、最右、小影、美拍、皮皮虾等平台的短视频去水印解析。 小红书短视频在线解析下载工具支持解析任何抖音短视频,并且解析出来的视频没有水印。手机、平板、电脑上都可以用的辅助下载工具,轻松一键保存无水印抖音短视频到手机相册或电脑本地。 操作步骤: 1、打开小红书APP,点开某个视频,点击右下角分享按钮,在分享弹框中点击复制链接或通过分享到微信QQ等获取分享链接 2、将刚才复制的链接粘贴到下面的输入框 3、点击“立即解析”,就可以获取到无水印视频地址了 实现解析小红书短视频(支持全网主流短视频解析)代码,以PHP代码为例如下: <?php //www.videoparse.cn后台生成的appid $appId = ''; //www.videoparse.cn生成的appsecret $appSecret = ''; //需要解析的url $url = ''; $param = [ 'appid' => $appId, 'appsecret' => $appSecret, 'url' => $url, ]; //得到请求的地址:https://api-sv

linux学习的第四天

廉价感情. 提交于 2020-05-09 13:21:01
1、打包压缩\解压缩和搜索 tar命令。文件压缩或解压缩,压缩打包文件:tar czvf 文件名.tar.gz。解压缩文件:tar xzvf 文件名.tar.gz。压缩格式为tar.gz或tar.bz2,如果解压时不知道文件的压缩格式则使用xvf系统自动判断压缩格式。 grep命令。grep <关键词> <文件名>。用于在文本文件中搜索指定关键字符。find命令。find <路径> 按路径查找指定条件的文件。 2、重定向、管道符与环境变量 重定向。输出重定向,将原来要输出到屏幕的信息写入到一个文件中;>:清空写入到文件,命令 >文件名,清空写入到文件,且只保留最后一次的写入内容。>>:追加写入到文件,命令 >>文件名,保留原来命令执行过的输出信息,在追加写入到原信息后面。2> / 2>>:将错误信息输出到文件中,而不是输出到屏幕。&> / &>>:全部输出到文件,不管输出信息正常还是错误,都写入到文件。输入重定向,将文件内容导入到命令中差输出到屏幕,且不显示文件名称,< / <<: 3、管道符(任意门) 命令A | 命令B,将命令A原先要输出到屏幕的内容交由命令B进行二次处理,这个操作符称为管道符,可根据实际情况嵌套使用多个管道符。 4、通配符 *:星号,匹配空值或无限多的信息;?:问号,匹配单个字符,必须有一位且不含空值。[a-z]匹配小写,[A-Z]匹配大写,[0-9

浮点数精度计算

耗尽温柔 提交于 2020-05-09 09:58:06
var util = { padding0: function (p) { var z = '' while (p--) { z += '0' } return z }, /** * 解决小数精度问题 * @param {*数字} a * @param {*数字} b * @param {*符号} sign * fixedFloat(0.3, 0.2, '-') */ fixedFloat: function (a, b, sign) { function handle(x) { var y = String(x) var p = y.lastIndexOf('.') if (p === -1) { return [y, 0] } else { return [y.replace('.', ''), y.length - p - 1] } } // v 操作数1, w 操作数2, s 操作符, t 精度 function operate(v, w, s, t) { switch (s) { case '+': return (v + w) / t case '-': return (v - w) / t case '*': return (v * w) / (t * t) case '/': return (v / w) } } var c = handle(a) var d =

Detectron2源码阅读笔记-(二)Registry&build_*方法

人盡茶涼 提交于 2020-05-09 06:41:12
​ Trainer解析 我们继续 Detectron2代码阅读笔记-(一) 中的内容。 上图画出了 detectron2 文件夹中的三个子文件夹( tools,config,engine )之间的关系。那么剩下的文件夹又是如何起作用的呢? def main(args): cfg = setup(args) if args.eval_only: ... trainer = Trainer(cfg) trainer.resume_or_load(resume=args.resume) if cfg.TEST.AUG.ENABLED: trainer.register_hooks( [hooks.EvalHook(0, lambda: trainer.test_with_TTA(cfg, trainer.model))] ) return trainer.train() build_*方法 我们从 trainer = Trainer(cfg) 开始进一步了解。 Detectron2代码阅读笔记-(一) 中已经提到过一连串的Trainer的继承关系如下: tools.train_net.Trainer->detectron2.engine.default.DefaultTrainer->detectron2.engine.train_loop.SimpleTrainer-

linux&android PPP 相关知识

眉间皱痕 提交于 2020-05-09 06:36:07
Linux&Android PPP相关FAQ 目录 Linux&Android PPP相关FAQ.. 1 一、 文档说明... 3 二、 常见调试技术... 4 1. 查看PPP log信息... 4 2. 查看拨号IP. 4 3. 查看路由、配置路由... 4 4. Ping ip和网址... 4 5. 设置DNS. 5 三、 问题记录... 6 1. Linux下拨号失败... 6 2. Android下无法建立数据业务... 6 3. Linux和Android下有IP能ping地址不能ping域名... 6 4. Linux和Android下有IP能不能ping域名和地址... 7 5. 客户多网卡无法上网... 7 附录A:双网卡路由配置案例... 8 一、 文档说明 本文档主要是记录linux下PPP相关的易错点和典型客户支持记录。 客户在linux和Android下使用PPP进行数据业务一般会易遇到如下几类问题: 1) Linux下拨号失败 2) Android下无法建立数据业务 3) Linux和Android下有IP能ping地址不能ping域名 4) Linux和Android下有IP能不能ping域名和地址 5)客户多网卡无法上网 二、 常见调试技术 1. 查看PPP log信息 1)Linux下: tail -f /var/log/syslog 或 tail

BlueStore源码分析之事物状态机

放肆的年华 提交于 2020-05-08 22:35:49
前言 BlueStore可以理解为一个支持ACID的本地日志型文件系统。所有的读写都是以 Transaction 进行,又因为支持覆盖写,所以写流程设计的相对复杂一些,涉及到一系列的状态转换。我们着重分析一下状态机、延迟指标以及如何保证IO的顺序性和并发性。 目录 状态机 延迟分析 IO保序 线程队列 IO状态 最后YY 状态机 queue_transactions queue_transactions 是ObjectStore层的统一入口,KVStore、MemStore、FileStore、BlueStore都相应的实现了这个接口。 state_t state 变量记录了当前时刻事物处于哪个状态。在创建TransactionContext的时候会将 state 初始化为 STATE_PREPARE ,然后在 _txc_add_transaction 中会根据操作码类型(opcode)进行不同的处理。同时会获取PG对应的OpSequencer(每个PG有一个OpSequencer)用来保证PG上的IO串行执行,对于deferred-write会将其数据写入RocksDB(WAL)。 以下阶段就进入BlueStore状态机了,我们以写流程为导向分析状态机的每个状态。 STATE_PREPARE 从state_prepare开始已经进入事物的状态机了。这个阶段会调用 _txc_add

vue.js中created方法作用

徘徊边缘 提交于 2020-05-08 21:15:03
这是它的一个生命周期 钩子函数 ,就是一个vue实例被生成后调用这个函数。一个vue实例被生成后还要绑定到某个 html元素 上,之后还要进行编译,然后再插入到document中。每一个阶段都会有一个 钩子函数 ,方便开发者在不同阶段处理不同逻辑。 一般可以在created函数中调用ajax获取页面 初始化 所需的数据。 实例生命周期 每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如,实例需要配置数据观测(data observer)、编译模版、挂载实例到 DOM ,然后在数据变化时更新 DOM 。在这个过程中,实例也会调用一些 生命周期钩子 ,这就给我们提供了执行自定义逻辑的机会。例如, created 这个钩子在实例被创建之后被调用: var vm = new Vue({ data: { a: 1 }, created: function ( ) { // `this` 指向 vm 实例 console.log( 'a is: ' + this.a) } }) // -> "a is: 1" 也有一些其它的钩子,在实例生命周期的不同阶段调用,如 mounted 、 updated 、 destroyed 。钩子的 this 指向调用它的 Vue 实例。一些用户可能会问 Vue.js 是否有“控制器”的概念?答案是,没有。组件的自定义逻辑可以分布在这些钩子中。

从架构师到 CTO, 你还有多远的路要走?

痴心易碎 提交于 2020-05-08 18:51:54
作者简介:李智慧,前阿里巴巴技术专家。本文选自:拉勾教育专栏 《架构师的36项修炼》 就程序员而言,日后的职业发展可以走3个方向:专攻技术深度、转团队管理、晋升架构师。 成为一名优秀的架构师,是大多数技术人的追求。但资深架构师的出现几率仅约为0.3%,如果想在3-5年后稳坐金字塔尖,必须有扎实的代码功底和项目积累,也要意识地培养技术广度和架构思维能力。多学习牛人经验也可获益良多。 我是李智慧,我从事架构已有20多年。屏幕前的你,既然选择了架构,就要踏实学好每一块知识。今天我们来讲分布式消息队列MQ。在本篇幅中,我会主要介绍同步架构和异步架构的区别。 本文选自:拉勾教育专栏《架构师的36项修炼》 01 同步调用 所谓的 同步调用 ,就是说 从请求的发起一直到最终的处理完成期间 , 请求的调用方一直在同步阻塞等待调用的处理完成 。 我们看一下图片中的例子,在这个例子中客户端代码ClientCode,需要执行发送邮件sendEmail这样一个操作,它会调用EmailService进行发送。 而EmailService会调用SmtpEmailAdapter这样一个类来进行处理,而这个类会调用远程的一个服务,通过SMTP和TCP协议把请求发送给它。 而远程服务器收到消息以后会对消息进行一系列的操作,然后将邮件发送出去,再进行返回。 Adapter收到返回后,再返回给EmailService

累死累活做业务,绩效还不怎么样,我只能帮你到这了……

主宰稳场 提交于 2020-05-08 14:56:41
前言 作为一个业务前端,完成业务需求的同时,还要处理各种线上问题,加班辛苦忙碌了一年,还要被老板说“思考是不够的”、“没有业务 sence”,出去面试,被问项目,也说不出什么有亮点或者有挑战的东西,想做点牛逼的东西,也没有发现什么有价值的方向,好不容易找到一些方向,还要被老板一顿质问,业务价值是什么?ROI 怎样?最终可能就只是做了一点性能优化工作,抽离了一些可复用的组件……不禁让人感叹,业务难、前端难、做业务的前端更难! 如果你也有这样的感受和困境,我想告诉你,这真的是太正常了,在阿里内部的技术论坛就有多篇关于这个问题的思考,我根据根据自己理解和调研,同时参考了多位不同前端领域专家的总结,整理成这篇文章,希望能对大家有所帮助。 1. 业务前端的困境 1.1 业务前端“好忙” 业务前端,顾名思义,做业务的前端,直接与业务的 PD、运营接触,对产品的用户直接负责。在实际的工作中,业务前端经常忙于业务的各种会议、项目和答疑,即便一条业务线上有多个前端同学支持,面对成山的需求,可能依然感到吃力,这其中的原因可能有: 用户侧产品往往需要快速上线,大部分需求都需要倒排工期,开发时间尤其紧张 对业务不熟悉,在项目需求已确定的时候才去参加视觉评审,没有办法判断需求背后的业务逻辑跟业务大节奏是否匹配、需求本身是否能够达成业务目标、有没有更好的实现方式,只能接下需求,然后排期 维护成本高