Recent Posts

PostgreSQL 按拼音排序 - convert to GBK/EUC_CN coding

7 minute read

背景 国内的应用,在文本排序上基本都是按照拼音来进行排序的。 在不同的字符集中,汉字的编码可能不一样,比如UTF8和GBK,其中GBK是按拼音的顺序进行编码的,而UTF8则不是。 所以如果你的数据库使用了UTF8编码,对中文字段进行排序时,可能得到的并不是按拼音排序的结果。 在PostgreSQL中,中文按...

用PostgreSQL描绘人生的高潮、尿点、低谷 - 窗口/帧 or 斜率/导数/曲率/微积分?

19 minute read

背景 人生就像一场戏,有高潮,有尿点,有低谷。如果用曲线来描述漫漫人生路的话,怎么找出高潮、尿点、低谷呢? 其实类似的场景还有很多,比如来自传感器(比如人身上可以探测的指标就有很多)的监控数据;服务器的监控数据;温度,湿度的变化数据;等等,都可以数字化,用曲线来表示。 找高潮、尿点、低谷有什么好的方法吗? ...

用PostgreSQL找回618秒逝去的青春 - 递归收敛优化

4 minute read

背景 有一个这样的场景,一张小表A,里面存储了一些ID,大约几百个。 (比如说巡逻车辆ID,环卫车辆的ID,公交车,微公交的ID)。 另外有一张日志表B,每条记录中的ID是来自前面那张小表的,但不是每个ID都出现在这张日志表中,比如说一天可能只有几十个ID会出现在这个日志表的当天的数据中。 (比如车辆的行车...

PostgreSQL 源码性能诊断(perf profiling)指南 - 珍藏级

13 minute read

背景 数据库的性能优化是一个非常经典的话题,数据库的优化手段以及优化的角度也各不相同。 例如,可以从OS内核、网络、块设备、编译器、文件系统、SQL、数据库参数、业务逻辑、源码等各个方面去进行优化。 但是如果在优化前了解瓶颈在什么地方,可以向打鼹鼠一样,先打大的,起到事半功倍的效果。 本文将针对Linux平...

时序数据合并场景加速分析和实现 - 复合索引,窗口分组查询加速,变态递归加速

5 minute read

背景 在很多场景中,都会有数据合并的需求。 例如记录了表的变更明细(insert,update,delete),需要合并明细,从明细中快速取到每个PK的最新值。 又比如有很多传感器,不断的在上报数据,要快速的取出每个传感器的最新状态。 对于这种需求,可以使用窗口查询,但是如何加速,如何快速的取出批量数据呢?...

Linux 性能诊断 perf使用指南

37 minute read

背景 Linux在服务端已占据非常大的比例,很多业务很多服务都跑在Linux上面。 软件运行在Linux下,软件本身、以及Linux系统的性能诊断也成为热门的话题。 例如,你要如何回答这些问题 Why is the kernel on-CPU so much? What code-paths? W...

PostgreSQL 在视频、图片去重,图像搜索业务中的应用

1 minute read

背景 图像处理的业务场景比较多,例如 图像搜索、视频去重、人脸识别、美图、图片去重 等。 比如,视频去重,一些用户上传了较多的视频,同一部电影可能有不同的版本,分辨率不一样,音轨不一样,压缩比不一样。这种情况会导致服务端重复存储大量的视频。 又比如甄别黄色视频或黄色图片,鉴黄师的职业要消失了。 有什么方法可...