如果参数中没有参数, 则直接query.
如果sql中有参数, 且打开了InterpolateParams开关, 那么就客户端直接拼参数到SQL里, 不需要prepare直接query.
如果sql中有参数, 且没有打开InterpolateParams(默认设置), 且带参数, 就会走先prepare再发query参数两步.
github.com/go-sql-driver/mysql/connection.go:370 |
后续再补篇文章详细写写sql.Driver
如果参数中没有参数, 则直接query.
如果sql中有参数, 且打开了InterpolateParams开关, 那么就客户端直接拼参数到SQL里, 不需要prepare直接query.
如果sql中有参数, 且没有打开InterpolateParams(默认设置), 且带参数, 就会走先prepare再发query参数两步.
github.com/go-sql-driver/mysql/connection.go:370 |
后续再补篇文章详细写写sql.Driver
最近要实现接口监控, 准备用主流的时序数据库influxdb.
influxdb的库也 database, 概念和mysql一样
influxdb的表叫 MEASUREMENTS, 意义更贴切, 测量的复数形式.
influxdb的一行数据叫 point, 就像做物理实验的打点, 每个点有其值和属性
influxdb的字段分类为 tag 和 field, field就是值, tag是其属性. 拿接口来说, 字段有 service_name, instance_id, method, handler_name, method, request_url, response_code, content_length, response_size, duration. 显然, 前面7个字段是tag, 特点是一般不是数值变量, 可枚举的, 所以influxdb对tag加了索引. 后面3个是field, 是数值变量, 是范围变化的, 不需要加索引.
对于插入数据, influxdb同时提供了单条和批量插入的API. 开始不知道有批量方式, 来一条插一条, influxdb CPU巨高. 后面在官网文档找到了办法, 改用批量插入, 大大降低了CPU占用, 官方推荐是5k~1w条数据一批.
https://docs.influxdata.com/influxdb/v1.7/concepts/glossary/#batch
InfluxData recommends batch sizes of 5,000-10,000 points,
although different use cases may be better served by significantly smaller or larger batches.
influxdb同时提供了HTTP接口和UDP接口. UDP的好处在于减少了HTTP头部的开销, 性能更好
库
# 创建数据库 |
表
# 显示该数据库中的表 |
查看数据保留策略 retention polices
SHOW RETENTION POLICIES ON "testDB" |
创建新的Retention Policies并设置为默认值
# DURATION 保留多少天 |
# 创建一个连续查询, 每10秒计算一个接口响应耗时平均值到新表 |
grafana 是 influxdb 的良好伴侣, 写个query语句就能得到很炫酷的图形. 比如接口请求量图表按handler_name, response_code, time(10s) group by就得到了.