最新

一个案例彻底弄懂如何正确使用 mysql inndb 联合索引

周梦康 发表于 2018-11-18 2289 次浏览 标签 : Mysql 原创

有一个业务是查询最新审核的5条数据

SELECT `id`, `title`
FROM `th_content`
WHERE `audit_time` < '1541984478'
    AND `status` = 'ONLINE'
ORDER BY `audit_time` DESC, `id` DESC
LIMIT 5;

查看当时的监控情况 cpu 使用率是超过了100%,show processlist看到很多类似的查询都是create sort index
查看该表的索引有一个audit_time在左边的联合索引。

分析上面的sql执行的逻辑:

  • 从联合索引里找到所有小于该审核时间的主键id(因为该sql查询的是最新审核的,假如之前已经审核了100万条数据,则会在联合索引里取出对应的100条数据的主键id)
  • 回表,查出100万行记录,然后逐个扫描,筛选出status='ONLINE'的行记录
  • 最后对查询的结果进行排序(假如有50万行都是ONLINE,则继续对这50万行进行排序)

最后因为数据量很大,虽然只取5行,但是按照我们刚刚举的极端例子,实际查询了100行数据,而且最后还在进行了50行的内存排序。

所以是非常低效的。

PHP 源码探秘 - 在解析外部变量时的一个 BUG

周梦康 发表于 2018-11-17 498 次浏览 标签 : php 原创

在接收外部变量时,多个相同的外部变量,在nodejs中会被放在一个数组里面,而php中则是后者覆盖前者,如果需要传递数组变量,则在变量名后面添加上[]这个不兼容,ok,是语言的特性能接受

但是在php中在解析id[]_text的数据的时候都转换成id[]了,这点就有点坑了。

Mysql 大表分页查询优化(二)

周梦康 发表于 2018-11-14 382 次浏览 标签 : Mysql

开发同学按照传达的精神使用了上次说的大表翻页优化的方式在做翻页查询了。执行时间97秒。

select a2.id,a2.keyword,a2.url from (select id from table_name order by id asc limit 73575000, 5000) a1, table_name a2 where a1.id=a2.id
select count(*) from table_name;

执行查看表总数都执行了70292.60ms,总行数是118345950行。

对于这种表,做大表翻页优化,也已经无效了。那应该怎么弄呢?

我们先不去纠结历史原因,为什么没有分表。着眼解决当前的问题。
问下具体开发的同学,是在全表扫描这个表是否命中一些违禁词。这样就好办了。我们只需要“分段扫描就行了呀

Mysql 大表分页查询优化(一)

周梦康 发表于 2018-11-09 414 次浏览 标签 : Mysql

看到数据库报警,查看慢 sql 日志看到

select id, content from table_name where status = 1 order by id asc limit 1328000, 1000

执行了 90 秒,扫描了 1329172 行。

改写成

select a2.id, a2.content from (select id from table_name where status = 1 order by id asc limit 1328000, 1000) a1, table_name a2 where a1.id=a2.id;

总结

这种数据量很大的表,应该是先做一个子查询查出 id(只会在索引里面扫描),然后关联查询,这样扫描的行数是限定的。而不会扫描表前面所有的行。

一次 java.io.IOException: Connection reset by peer 故障排查

周梦康 发表于 2017-12-19 5648 次浏览 标签 : Java

我的弹幕服务,代码换了个环境运行,虽然服务可用,但是发现出现了如下情况,基本1秒输出来一次:

java.io.IOException: Connection reset by peer
  at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
  at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
...

因为我有两个网卡,请求是从 eth0 进,从 eth1 出,我尝试使用tcpdump -i any 发现第三次握手输出的 askno 数据不对。(为什么会这样呢,还不知道,谁知道请告知下

关于提高视觉交互和前后端协同工作效率的一想法

周梦康 发表于 2017-12-10 1905 次浏览

初衷

通过一些明确的规范来提高云栖社区 UED、前端、后端的工作效率。

现状

视觉交互半规范化,不够系统,需要不断的完善

我从聊天记录来看,爱申是做了一些色值等方面的标准和规范,而且交付给了前端同学,前端同学在工作的时候能快速的工作。点赞。

但是没有全部明文列出,不够系统。打个比方,一般的封面图片 hover 需要出现一个放大效果的。由于我们每次外包同学都不一样,导致新外包介入时,就忘了这个效果。
使得5个页面上的有封面的地方都需要去加一个遮罩,然后做完以后,后端同学(我)再把对应的模板也都修改一遍。

这样类似的返工还有很多,比如字号,行间距,padding,margin 等,不仅每次需要 UED 的同学仔细审查,也会需要前端同学不断返工。

ACBA大阿里云事业群首届篮球联赛

周梦康 发表于 2017-12-02 1553 次浏览 标签 : 篮球

早上去没吃饭,帮忙做技术统计,学习新技能了。(汉字不是我写的,我写的没这么丑)下午替补出场,罚球100%命中率,投篮命中率50%,怒砍4分,大获全胜。好久不打球,打了20分钟左右,感觉不怎么累,对方防守强度不够。

感谢公司组织文化部的同学发起了本次比赛。公司的宣传海报都换成了篮球赛的,想必费用也不少吧,每队的球服费用,场地费用,报名人员的保险费用。记得刚来阿里云的时候,因为组织阿里云和追光动画打球,组织文化部的同学在自己周末的时间专程从杭州飞过来租场地,买水果等,忙到好晚。比赛的时候也全程陪同,给大家加油打气。那段时间虽然加班很多,但是那次的确给人一种家的感觉,虽然加班也不那么苦了。

temp4cj.png

为什么鸟哥说 int 再怎么随机也申请不到奇数地址

周梦康 发表于 2017-10-23 5475 次浏览 标签 : C C语言快速入门

鸟哥微博

DingTalk20171023172325.png

为什么要字节对齐

需要字节对齐的根本原因在于CPU访问数据的效率问题。因为CPU每次都是从以4字节(32位CPU)或是8字节(64位CPU)的整数倍的内存地址中读进数据的。(更深入的原因,谁告知下),如果不对齐的话,很有可能一个4字节int需要分两次读取。

数据类型自身的对齐值

按各数据类型自身大小进行对齐。变量的内存地址正好位于它长度的整数倍

PHP 源码探秘 - 为什么 trim 会导致乱码

周梦康 发表于 2017-10-18 3984 次浏览 标签 : php

以下代码:

$tag = "互联网产品、";
$text = rtrim($tag, "、");
print_r($text);

运行,我们可能以为会得到的结果是互联网产品,实际结果是互联网产�。为什么会这样呢?

原理

trim 函数文档

string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )

该函数不是多字节函数,也就是说,汉字这样的多字节字符,会拿其头或尾的单字节来和后面的$character_mask对应的char数组进行匹配,如果在后面的数组中,则删掉,继续匹配。比如:

echo ltrim("bcdf","abc"); // df

服务治理深入浅出(2)- 远程方法调用的实现

周梦康 发表于 2017-10-17 2746 次浏览

需求

在了解了前面我们关于服务治理出现的必要性之后。我们知道服务治理是建立在众多“服务”基础之上的,那么,第一步,打通这些服务是基础,也就是我们常说的 RPC 远程调用。要像调用本地方法一样调用远程服务器上的方法。

现在简单粗暴口语化的方式来介绍一个需求:

A 服务器上部署的项目中,有一个UserService里面有一个getUserInfo的方法。
B 服务器上想"直接"调用该方法,怎么办?

分析

我们以 PHP 为例来进行分析。
我们希望在 B 服务器上实现类似于 A 服务器上直接调用方式

$userService = new UserService();
$userService->getUserInfo($uid);

构建高性能的弹幕应用 - 小项目也能做性能提升

周梦康 发表于 2017-10-01 4331 次浏览

之前在直播的时候总有同学反映自己做的项目太小,没有优化的场景,那么可以看看我这篇博客,其实优化无处不在,心有多大舞台就有多大,实际没有那么多的流量,可以为那么大的量做准备。

直播是云栖社区的主要模块之一,弹幕服务是在直播频道上线之后,为了更多的互动,提出的。

我主要做了下面的一些迭代:

  • 使用 netty 构建弹幕应用
  • 授权服务与弹幕服务的分离
  • 专题页本地缓存
  • 使用 nginx lua 为 web 应用加速
  • 实时监控在线人数

博客升级啦

周梦康 发表于 2017-09-23 2511 次浏览

全站响应式支持

博客一直没有使用boostrap
一是,觉得我的博客太简单没必要弄那么多的css和js,二也能锻炼下自己简单的前端技能。
很多地方都是到处乱抄,不过也还算是比较满意。

博客编辑

去除了原来的百度编辑器,使用markdown编辑器。
markdown 编辑器使用的是 https://github.com/zhoumengkang/mditor 原作者的有点 bug,就是光标总是乱跳,修改了。
markdown 渲染在后端做的,使用 https://github.com/SegmentFault/HyperDown

搜索

之前博客不太多,搜索功能没用,现在有时候自己的博客都找不到了,所以还是加上搜索。
使用国产 http://www.xunsearch.com/doc/php/guide/start.installation