mysql 踩坑记录

数字、字符串 如果mysql 里面 有数字字符串 的字段(并且该字段是索引),客户端不要直接传数字,一定要加引号 这个也就是为什么orm库喜欢在格式化时候,默认加上` 索引 索引的问题非常多,通常出现的慢查询都是由于查询语句命中索引不正确导致的 甚至表中的数据量都会影响mysql命中索引的规则 组合索引 组合索引是最左建立多个索引 in会命中索引,not in 会导致索引失效 排序最好主要范围语句会导致组合索引后续的索引失效(主要是 > < 等) 索引最终还是会回归到主键上, »

旧服务优化思路

高可用 讲互联网的技术,不能不说高可用; 从某些书上面写的,主要通过“冗余+自动故障转”来实现的; 对于以下分层,每一层上面都使用上面两种方式: (1)【客户端层】到【反向代理层】 (2)【反向代理层】到【站点层】 (3)【站点层】到【服务层】 (4)【服务层】到【缓存层】 »

broken pipe

代码 // client.go package main import ( "fmt" "net" ) func main() { localAddress, _ := net.ResolveTCPAddr("tcp4", "127.0.0.1:8080") //定义一个本机IP和端口。 var tcpCon, err = net.DialTCP("tcp" »

dlv 源码阅读

一. 目录介绍 1._fixtures 这个文件夹下面主要放一些用于测试的应用程序源码 2.assets 存放了4个代表delve的图标 3.cmd 这个是server/client的命令行入口 主要从commands.go这个文件体现,主要使用spf13/cobra来做命令行工具(相信喜欢使用vim的人都应该听过spf13) 主要命令有debug、trace、attach等,但是这些命令核心都是在使用gobuild、execute,所以基本看这两个函数即可 gobuild 主要是对需要调试源码的进行编译 execute »

记一次openrestry问题

背景 团队所做的微服务,统一签名校验是在openrestry(nginx)的lua脚本计算的 突然有人报告了一个bug,当post请求body大于10k的时候,签名就会失效 原因 在读取body参数时候,使用ngx.req.get_body_data This function returns nil if 1. the request body has not »

snowflake

分布式Id snowflake 是一种分布式id唯一算法,相比较uuid算法生成方式,snowflake生成的是一个int64大整型,并且是大致递增 我发现网上对于该算法的描述,在位数偏移上是由差异的,但是整体思路是一致的 这里的10-bit workerId在有的源码里面是分成两个 workerId 、data的5-bit大小 可以大致算一下,1毫秒1单点能生成2 ^ 12 = 4096个id,总共能部署 2 ^ 10 = 1024 个节点,也就是1毫秒最大能生成400多万个id 我按照算法思路写了如下代码 package main »