原因
shinki.moe这个域名注册了差不多4年了,之前网站一直使用的pm2+hexo+nginx的方式运行,当时对运维相关的内容不是非常关注,想的是写个博客,能渲染md格式的文件有个记录就行,就一直放着没管.中间有一段时间对分布式相关的东西特别感兴趣,所以读了点书写了点心得外加翻译了一些东西,为了方便就直接放掘金了.
最近工作相关的原因闲下来了,外加最近两年写了不少前端的代码,对vue也算熟悉了,于是想着看看能不能优化下hexo的运行方式,写个githubAction自动部署,两年多没相关文字输出了,重新开始写点东西.于是登录上了我的博客服务器,结果发现服务器硬盘被pm2的日志写爆了,最后靠着服务商的crt才把日志给清理了,清理完成之后去看了下hexo的文档,这才发现hexo的运行方式似乎是不支持编译成前端静态文件的,这明显是没法接受的,虽然说我这个服务器跑个node进程+pm2不是多大问题,但是如果要做自动化就得依赖脚本完成了,如无必要,勿增实体,于是我就开始寻找其他的博客框架.
前言
比较长一段时间没有写博客了,倒不是因为懒,主要现在工作主要内容CRUD居多,虽然现在接受的项目和 ElasticSearch
相关,但是感觉相关的内容在 ES 的手册都找的到,没必要当个复读机把这些问题都记录下来,所以博客这边还是写一点一般途径找不到的东西。这次分享的内容和一次后台页面查询优化相关,觉得可以讨论下,刚好最近也在和同学讨论 Mysql
相关的东西,于是记录下,权当分享了。这里顺便预告下,最近在看 《七周七并发编程》 与 《七周七理解多语言编程范型》 接下来的博客可能讨论这两本书相关的内容,顺便也推荐下这两本书,把这两本当做增长见识,理解一些语言特性来源很不错。
导言
很久没写博客了,主要觉得工作上值得写博客的地方不多,个人对于写博客的看法是:凡是网上能找到的东西更适合记忆,比如说 shell 命令、某些语言的官方库或者某项开源技术的文档等。博客更适合的是总结和复盘自己的经验,更适合原创用来深化记忆。下面开始复盘这次重构。
复盘
起因
这次重构起因是一个后台管理项目添加功能的需求,先介绍一下项目的大致情况:
-
表 A :数据量K级,主要保存一些单条数据内容,核心表,日增长大概几十条左右
-
表 B :数据量 100K 级,和表A是多对一关联,日增长千条左右。
-
表 C :数据量 100K 级,和表A也是多对一关联,日增长同表B,表C和表B关联字段不同
-
表 D :整个数据库的大 BOSS ,慢查询的根本原因所在,数据1000K级而且增长迅速,保存的是表 A 和表 B 的关联状态也就是保存的表 A 与表 B 关联状态的各种值。基本上所有条件查询都是从表D而来
大晚上的睡不着,看了下B站的go夜读52期,看见在讲httpRouter相关的内容,之前在写gin的时候看到有人说过gin的router就是基于HttpRouter演变过来的,于是看了下视频,发现还是挺受用的 于是写篇博文谈下感想(顺便吐槽下 写这篇文章的时候北京时间凌晨2点40左右 真的是名副其实的"夜读"了)
首先谈下起源,httpRouter算是go很经典的拓展之一了,go原生的http.HandleFunc
很难满足restefulAPI
的要求,当需要根据POST PATCH UPDATE GET
的URI
来获取不同的方法以及参数的时候,原生的handleFunc无法满足取路由变量以及针对不同类型的请求返回不同的值的需求。于是httpRouter诞生了。
httpRouter根据GET HEAD OPTIONS POST PUT PATCH DELETE
分别建立了基数树 大概解释下基数树的原理:基数树会根据文本来生成树结构,当只有一个文本来作为节点的时候,这个文本即是根节点,再添加节点会根据文本与根节点的文本重复度来生成子节点。这里借用wiki的一张图来说明