前言

golang可以轻易制造高并发,在某些场景很合适,比如爬虫的时候可以爬的更加高效。但是对应某些场景,如文件读写,数据库访问等IO为瓶颈的场合,就没有什么优势了。

前提基础

1、golang数据库访问

在golang中数据库访问使用”database/sql”包提供的接口,不同的数据库,比如pg、mysql只需要提供对应的驱动就可以了。注意”database/sql”包提供的接口只针对关系型数据库,nosql如redis和mongodb都是直接使用对应的客户端包,不实现”database/sql”包提供的接口。关于”database/sql”包,这里不做讲述,后续在基础回顾上巩固下。总体上就是提供了连接、事务处理、还有就是打开的时候注意打开的时候并没有连接,而是产生一个池,每次有交互的时候才产生一个连接(事务交互除外)。

2、数据库插入优化基础

1)插入无索引表会比插入有索引的表快,毕竟建立索引总是要增加一些额外操作

2)插入小表比插入大表快,业务一般插入速度是以条数计算,大表一条记录比较大,需要IO的时间比较长。

3)多个连接一起插入会比单连接快,因为mysql不是单线程。

4)日志缓存增大可以加快插入速度,因为减少了IO访问次数。

5)一次插入多条数据可以加快插入速度。

实践经验

ps:以小表做实验,都用一个环境,比较差异。

表结构:

create table lamp(

id bigint not null primary key,

state char(1),

coll