高可用MySQL架构
There are one hundred ways to fix a problem. However, the ultimate solution is, don’t give it any chance to happen. (纠正一个错误的方法有很多,而解决一个错误的终极方法 就是不给它任何发生的机会。)知之为知之,不知为不知,是知也。也许是天赋不足、也许是智商捉急,更可能是懒惰和拖延作祟。但是既然开始了,就不愿意停下来。我本微末凡尘,却也心向天空。—— 我吃西红柿·《莽荒纪》我在起点与终点之间两全其美,却无法禅定于一夜琴声。直至悠悠的琴声被暗香淹没,我才刚刚赶到岸边,片刻之间,已被一缕清风绣在水面。...
MySQL查询优化和数据库监控
如何确定查询处理的各个阶段所消耗的时间使用profile1234567mysql> set profiling=1; -- 启用profile,这是一个session级别的配置mysql> select count(*) from film; -- 执行任意SQLmysql> show profiles; -- 查看profile,可以看到query id,duration和具体的sqlmysql> show profile for query 5; -- 查看某个query id的各个阶段的消耗时间mysql> show profile cpu for query 5; -- 查看CPU信息-- 以上的查询中我们可以看到都有一个警告信息mysql> show warnings; -- 查看警告信息,发现警告信息是show profile已经被废弃了,官方建议使用Performance Schema 使用performance_schema...
MySQL索引优化
...
搭建高可用MySQL架构
DBMS的瓶颈在于IO而非CPU。 慎用数据库的一些特性,例如外键(业务量爆炸的时候分库分表将是一个灾难)。虽然不建议使用物理外键,但是相关联的列上一定要建立索引。 在双十一的场景中取消掉计划任务(例如定时备份)。 在大促中什么影响了数据库性能超高的QPS和TPSQPS(Query Per Second)风险:效率低下的SQL。数据库中的性能问题80%就是由慢查询造成的。也就是大多数的数据库问题可以通过对SQL进行优化来解决。 TPS(Transition Per...
编程珠玑
位图排序 输入:一个包含n个正整数的文件,其中每个正整数都小于n,在这里n = 10^7,其中n个整数都是不可重复的。 输出:以升序排列的整数列表 约束:最多1MB内存,无限内存,时间最多几分钟,10s就可认为不需要优化了。 思考:一个整数占用4字节,10^7的整数占用的内存是4*10^7.一次性读取到内存中显然是不可能的。所以我们可以使用10^7/2^20 = 39趟归并排序,也就需要40次的IO操作,IO无疑是瓶颈。 我们可以使用10位长的字符串表示一个所有元素小于10的非负整数集合(集合3大特性),如:{1,2,3,5,8}可表示为: 10111010010 # 如果对应的位是1表示处于该集合 以上的方法非常巧妙,本来需要4个字节表示的数,仅仅通过一个位就实现了,空间瞬间剩下的几十倍,有不有? 这样就可以使用10^7个位表示10^7个整数,占用空间为10^7/2^20 =...
纳兰容若词传
西方人通过精密仪器测量出人死后体重会减少21g,于是认为这21g是灵魂的重量。 拼来的才是人生,等来的只能是命运。 洋葱,萝卜和西红柿,不相信世界上有南瓜这种东西。他们认为那是一种空想,南瓜不说话,默默地生长着。 得不到人们认同的想法不能称之为想法,不为人知的结果也毫无价值。因为这些都不能对他人产生影响。 思考要单纯直接,实现要严密细致。
MySQL初探
信息的价值会随时间锐减,尤其在事故处理过程中。 外键约束 父表和子表(有外键的表称为子表)必须使用相同的存储引擎,且存储引擎必须为InnoDB.外键列和被参照列的数据类型要相同,外键约束将自动创建索引。 查看建表语句可以使用SHOW CREATE TABLE t_users; 查看索引SHOW INDEXES FROM t_users\G; 在实际的开发中我们很少使用物理的外键约束,因为只有InnoDB这种引擎支持。所谓逻辑上的外键约束是在定义表的时候按照某种结构进行定义而不去使用foreign key这个关键字。业务爆炸的时候DB外键的约束可能对分库分表不友好。 mysql中的索引默认是BTree索引。 参见外键约束 表结构的修改参见修改表 无限分类的表的设计例如:天猫的商品:图书下面有小说、文学,在文学下面有四大名著、戏曲等。无限分类的表一般采用如下形式: 12345CREATE TABLE tdb_goods_types( type_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, type_name...
D2前端
使用node构建海量页面渲染服务手机天猫的所有页面都是,大约在3年前天猫的大量页面是基于php渲染的,数据模板打包后推送到CDN,每次请求都渲染页面。用户请求CDN上的资源。但是这样的方式存在以下的弊端: 大量文件在网络情况不一的CDN节点上同步非常困难 每次请求渲染导致大量的机器资源浪费 php太灵活,多业务共享难以升级,性能低 node.js具有以下的优势: js模板可以前后端共享 轻量级、高性能 2014年的天猫双十一从php迁移到了node koajs中的基于装饰器的中间件 123456789function* responseTime(next){ // 所有后续中间件之前执行 const start = Date.now() yield next; // 所有后续中间件之后执行 const used = Date.now() - start // 将响应时间设置到http header this.set('X-Response-Time',`${used} ms`) ...
sass与compass实战
Sass,Compass与CSS3者的关系 曾经有一位古人说过:“如果你有一把锤子,那么所有的东西都会看起来像钉子。”;还有一位今人说过:“如果你有一颗钉子,那么你就会满大街找锤子。”。无论锤子亦或是钉子都是工具,而Compass和SASS恰恰扮演的就是锤子和钉子的角色,CSS则对应使用锤子和钉子最后完成的作品。——慕课网讲师·刘炬光 人们走进喧闹中去,是为了忘记孤寂。 人生不止眼前的苟且,还有诗和远方。——高晓松 compass初窥安装好sass和compass后创建compass项目compass create compass-in-action(更多命令可以使用compass --help查看) 接下来我们在项目根目录下可以使用compass watch命令监听sass文件的变化 compass核心模块概述我们只要执行了@import...
swift学习
如果学习的硬件和软件资源已经具备,那么接下来的事情就是保持一颗永远向上的心,如果学习累了,遇到困难了,遇到挫折了,那么就想想那些精美的、绝妙的app,想想这些app将来也会出自你的手中,相信每一位同学都可以成为IOS开发大师的。 ————慕课网讲师·刘宇波 学习swift最简单的方法是使用Xcode的playground。 基本类型常量和变量常量letswift特意将常量的优先级提高到和变量相同实际上是在鼓励我们使用常量,思考程序什么时候使用常量。这样程序可以进行更好的优化。 变量var12var a = 2,b = 3,c = "hello swift",d = 3.2// a = "abc" cannot assign a value of type 'String' to a value of type...