配置文件

一个简单的数据库配置如下:

也可以将type数据库类型写到link配置项中,以上简化为:

  1. database:
  2. default:
  3. link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
  4. user:
  5. link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"

不同数据类型对应的link如下:

各数据库类型更详细的link参数信息请查看对应引擎官网,支持的数据库类型参考 章节。

完整配置

完整的config.yaml数据库配置项的数据格式形如下:

  1. database:
  2. 分组名称:
  3. host: "地址"
  4. port: "端口"
  5. user: "账号"
  6. pass: "密码"
  7. name: "数据库名称"
  8. type: "数据库类型(mysql/pgsql/mssql/sqlite/oracle)"
  9. link: "(可选)自定义数据库链接信息,当该字段被设置值时,以上链接字段(Host,Port,User,Pass,Name)将失效,但是type必须有值"
  10. role: "(可选)数据库主从角色(master/slave),不使用应用层的主从机制请均设置为master"
  11. debug: "(可选)开启调试模式"
  12. prefix: "(可选)表名前缀"
  13. dryRun: "(可选)ORM空跑(只读不写)"
  14. charset: "(可选)数据库编码(如: utf8/gbk/gb2312),一般设置为utf8"
  15. weight: "(可选)负载均衡权重,用于负载均衡控制,不使用应用层的负载均衡机制请置空"
  16. timezone: "(可选)时区配置,例如:local"
  17. maxIdle: "(可选)连接池最大闲置的连接数"
  18. maxOpen: "(可选)连接池最大打开的连接数"
  19. maxLifetime: "(可选)连接对象可重复使用的时间长度"
  20. createdAt: "(可选)自动创建时间字段名称"
  21. updatedAt: "(可选)自动更新时间字段名称"
  22. deletedAt: "(可选)软删除时间字段名称"
  23. timeMaintainDisabled: "(可选)是否完全关闭时间更新特性,true时CreatedAt/UpdatedAt/DeletedAt都将失效"

完整的数据库配置项示例(YAML):

gdb的配置支持集群模式,数据库配置中每一项分组配置均可以是多个节点,支持负载均衡权重策略,例如:

  1. default:
  2. role: "master"
  3. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
  4. role: "slave"
  5. user:
  6. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
  7. role: "master"
  8. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
  9. role: "slave"
  10. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
  11. role: "slave"

日志配置

gdb支持日志输出,内部使用的是glog.Logger对象实现日志管理,并且可以通过配置文件对日志对象进行配置。默认情况下gdb关闭了DEBUG日志输出,如果需要打开DEBUG信息需要将数据库的debug参数设置为true。以下是为一个配置文件示例:

  1. database:
  2. logger:
  3. path: "/var/log/gf-app/sql"
  4. level: "all"
  5. stdout: true
  6. default:
  7. link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user_center"
  8. debug: true

其中database.logger即为gdb的日志配置,当该配置不存在时,将会使用日志组件的默认配置,具体请参考 日志组件-配置管理 章节。

需要注意哦:由于ORM底层都是采用安全的预处理执行方式,提交到底层的SQL与参数其实是分开的,因此日志中记录的完整SQL仅作参考方便人工阅读,并不是真正提交到底层的SQL语句。

原生配置(高阶,可选)

以下为数据库底层管理配置介绍,如果您对数据库的底层配置管理比较感兴趣,可继续阅读后续章节。

gdb数据库管理模块的内部配置管理数据结构如下:

配置管理特点:

  1. 支持多节点数据库集群管理;
  2. 每个节点可以单独配置连接属性;
  3. 采用单例模式管理数据库实例化对象;
  4. 支持对数据库集群分组管理,按照分组名称获取实例化的数据库操作对象;
  5. 支持多种关系型数据库管理,可通过ConfigNode.Type属性进行配置;
  6. 支持Master-Slave读写分离,可通过ConfigNode.Role属性进行配置;
  7. 支持客户端的负载均衡管理,可通过ConfigNode.Weight属性进行配置,值越大,优先级越高;

特别说明,gdb的配置管理最大的特点是,(同一进程中)所有的数据库集群信息都使用同一个配置管理模块进行统一维护,不同业务的数据库集群配置使用不同的分组名称进行配置和获取。

配置方法

这是原生调用gdb模块来配置管理数据库。如果开发者想要自行控制数据库配置管理可以参考以下方法。若无需要可忽略该章节。

接口文档:

  1. // 添加一个数据库节点到指定的分组中
  2. func AddConfigNode(group string, node ConfigNode)<br />
  3. // 添加一个配置分组到数据库配置管理中(同名覆盖)
  4. func AddConfigGroup(group string, nodes ConfigGroup)
  5. func AddDefaultConfigNode(node ConfigNode)<br />
  6. // 添加一个配置分组到数据库配置管理中(默认分组为default,可修改)
  7. func AddDefaultConfigGroup(nodes ConfigGroup)
  8. // 设置默认的分组名称,获取默认数据库对象时将会自动读取该分组配置
  9. // 设置数据库配置为定义的配置信息,会将原有配置覆盖
  10. func SetConfig(c Config)

默认分组表示,如果获取数据库对象时不指定配置分组名称,那么gdb默认读取的配置分组。例如:gdb.NewByGroup()可获取一个默认分组的数据库对象。简单的做法,我们可以通过gdb包的SetConfig配置管理方法进行自定义的数据库全局配置,例如:

  1. gdb.SetConfig(gdb.Config {
  2. "default" : gdb.ConfigGroup {
  3. gdb.ConfigNode {
  4. Host : "192.168.1.100",
  5. Port : "3306",
  6. User : "root",
  7. Pass : "123456",
  8. Name : "test",
  9. Type : "mysql",
  10. Role : "master",
  11. Weight : 100,
  12. },
  13. gdb.ConfigNode {
  14. Host : "192.168.1.101",
  15. Port : "3306",
  16. User : "root",
  17. Pass : "123456",
  18. Name : "test",
  19. Type : "mysql",
  20. Role : "slave",
  21. Weight : 100,
  22. },
  23. },
  24. "user-center" : gdb.ConfigGroup {
  25. gdb.ConfigNode {
  26. Host : "192.168.1.110",
  27. Port : "3306",
  28. User : "root",
  29. Pass : "123456",
  30. Name : "test",
  31. Type : "mysql",
  32. Role : "master",
  33. Weight : 100,
  34. },
  35. })

随后,我们可以使用gdb.NewByGroup("数据库分组名称")来获取一个数据库操作对象。该对象用于后续的数据库一系列方法/链式操作。