这是我参与「第五届青训营 」伴学笔记创作活动的第5天
Go和DB
scan的过程遇到错误或异常,导致rows忘记close,内存会泄露,服务卡死,数据库请求停住 数据库事务没有提交,或者rollback会导致相同的问题
rows.close()会发生错误,需要进行错误检查,defer了之后错误会丢失 rows.Err()跟数据无关的错误,会在这里返回
设计原理
对应用程序提供api操作接口
不同数据库只需要实现驱动的连接接口、操作接口
连接池:池化技术可以优化请求量特别大的性能,管理有限、昂贵、费时的资源,配置:最小/大连接数,阻塞队列
强制回收,监控等功能
连接类型:
直接连接:tcp连接
stmt:prepare statement,同样的sql会被转化为reference id,减少网络传输时间,减少数据库解析时间
gorm的关联表一些列操作
数据库约束删除:删除用户的时候,把相关联的记录也删除
Go性能优化
语言运行时优化: 通用性能问题:内存分配、编译器生成代码质量
两种最常见的GC技术
分配路径太长:
GAB走的长的分配路径,但是将多个小对象的分配合并为一个大对象的分配
导致内存延迟释放:GAB中有一个小对象存活,会导致GAB整片内存区域无法释放
小对象生命周期较短,copying GC的策略清理小对象