db

package
v0.0.11-grpc-test Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 27, 2020 License: Apache-2.0 Imports: 12 Imported by: 0

README

sql.DB 连接池配置方法

sql.DB 本身就是维护一个数据库连接池,但因为默认配置,很容易被认为就仅仅是一个数据库连接

  • db.SetMaxIdleConns 该函数意为在连接池中保留的连接数,默认为0,也就是说数据库连接被放回连接池后,马上就会断开。 如发起连接请求,会再此创建。这也是为什么sql.DB会被认为仅仅是数据库连接的原因。
  • db.SetMaxOpenConns 最大连接数。当连接数被请求到最大数时,再有请求,则请求会被block(阻塞),直到有连接返回,被 重新分配给请求,才会被继续执行。设置该函数,是为了不让数据库出现too many connects的报错。该参数的默认值为0,表示无限制.
  • SetConnMaxLifetime 用来设置闲置连接的最大存活时间,即在数据库中,高峰回落,且超出Idle设置数时,超出该存活时间的连接 会被回收。如果设置为0或小于0,则代表永不过期。

在配置时,Max的设置要大于Idle的设置数

sql.Open 方法的使用

该方法用于创建一个数据库连接

  • db, err := sql.Open("driverName", "dataSourceStr")
  • driverName: 数据库驱动注册的名称
  • [username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]

mysql的配置

  • username:password@tcp(ip:3306)/dbname[?param1=value1&...&paramN=valueN]
  • charset=utf8 :设置数据库字符集
  • parseTime=true :程序是否自动解析时间字段,如果不设置,时间默认为字符串类型。如果设置为false, 在程序中,需要手动使用time.Parse函数来进行判断识别。所以通常设置为true
  • loc=Local :用来设置时区,mysql的时区默认为UTC+0,默认输出的时间就会与我们的时间不一致。 这里我们一般设置为Local,表示于操作系统的时区保持一致。这样才查询时才会输出争取的时间。

sql.DB 主要功能

  • db.Exec/ExecContext() 执行查询而不返回数据,通常执行CREATE/UPDATE/DELETE/INSERT等,执行结束会快速将连接返回给连接池, 但其ResultSet依然保留在引用中,当后面的程序逻辑处理的时候,连接会被重用。
  • db.Query/QueryContext() 执行查询并返回结果,用来执行查询,会将结果传到sql.Rows对象,当该对象被遍历结束或显示的被Close(), 那么连接就会被返回给连接池。
  • db.QueryRow/QueryRowContext() 执行查询并最多只返回1行数据
  • db.Prepare/PrepareContext() 创建一个预编译Statement对象,Statement对象可以并发的执行多个执行和查询。执行完毕之后,需要必须调用 Statement的Close()方法来释放连接到连接池。
  • db.Begin/BeginTx() 开启一个事务,返回的Tx事务对象会被绑定到单个连接。Begin方法在执行完毕之后,会将连接传递给sql.Tx对象。 当tx.Commit() 或 tx.Rollback() 方法被调用结束之后,就会释放连接到连接池。
  • db.Stats() 返回数据库统计信息,在调用该方法时,会从连接池拿取一个连接。

在sql.DB中,连接池被维护在一个切片中。 在sql.DB中,内置了异常连接的监测和处理。 在程序中,就不必再检查或者尝试处理连接失败的情况,在进行数据库操作的时候,如果连接有异常,或者已经过期了,sql.DB就会自动处理。 实际上,当从连接池取出的连接有异常的时候,sql.DB就会自动尝试重连两次。重连两次仍然无法连接的情况下,会自动的再创建一个新的连接,重试的次数 是被定义在sql包的常量,MaxDataConnRetry这个常量中。

dbx 数据库扩展工具库

基于sql.DB基础之上构建的高性能数据库工具,本身集成了sql.DB的所有功能,还增加了一些orm工具方法。

安装: go get -u gethub.com/tietang/dbx

特点和目标

  • 简单高效,最大限度的保留原生特性的基础
  • 高性能,支持orm的基础上,最大限度的减少性能损耗
  • 自动表名和字段名称映射,驼峰命名转换成下划线命名
  • 支持自定义表名和字段名称映射

Documentation

Index

Constants

View Source
const TX = "tx"

Variables

This section is empty.

Functions

func CreateConn

func CreateConn(connStr string) (db *sql.DB, err error)

func DbxDatabase

func DbxDatabase() *dbx.Database

func EngineGroup

func EngineGroup() *xorm.EngineGroup

func ExecuteContext

func ExecuteContext(ctx context.Context, fn func(*dbx.TxRunner) error) error

func Tx

func Tx(fn func(*dbx.TxRunner) error) error

事务执行帮助函数,简化代码

func TxContext

func TxContext(ctx context.Context, fn func(runner *dbx.TxRunner) error) error

事务执行帮助函数,简化代码,需要传入上下文

func WithValueContext

func WithValueContext(parent context.Context, runner *dbx.TxRunner) context.Context

将runner绑定到上下文,并创建一个新的WithValueContext

Types

type BaseDao

type BaseDao struct {
	TX *sql.Tx
}

提供一个基本Dao基础功能的支持

func (*BaseDao) SetTx

func (d *BaseDao) SetTx(tx *sql.Tx)

type DbxDatabaseStarter

type DbxDatabaseStarter struct {
	infra.BaseStarter
}

dbx数据库starter,并且设置为全局

func (*DbxDatabaseStarter) Setup

func (s *DbxDatabaseStarter) Setup(ctx infra.StarterContext)

数据库的实例化启动生命周期晚于配置文件加载,所以放到Setup中

func (*DbxDatabaseStarter) Stop added in v0.0.12

func (s *DbxDatabaseStarter) Stop(ctx infra.StarterContext)

type XormDatabaseStarter

type XormDatabaseStarter struct {
	infra.BaseStarter
}

xorm数据库starter,并且设置为全局

func (*XormDatabaseStarter) Setup

func (s *XormDatabaseStarter) Setup(ctx infra.StarterContext)

数据库的实例化启动生命周期晚于配置文件加载,所以放到Setup中

func (*XormDatabaseStarter) Stop added in v0.0.12

func (s *XormDatabaseStarter) Stop(ctx infra.StarterContext)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL