Database sql设计模式与GORM实践 | 青训营笔记

264 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记

理解database、sql

  • 重要概念(参考:什么是数据库和SQL? - 知乎 (zhihu.com)):

    1. 为什么DBMS那么重要?因为文本文件或Excel的局限性:
      1. 无法多人共享数据
      2. 无法提供操作大量数据所需的格式
      3. 实现读写自动化需要编程能力
      4. 无法应对突发事故
    2. DBMS的种类
      1. 层次数据库(Hierarchical Database, HDB):最古老的数据库之一,它把数据通过层次结构(树形结构)的方式表现出来。
      2. 关系数据库(Relational Database, RDB):关系数据库是现在应用最广泛的数据库。
      3. 面向对象数据库(Object Oriented Database, OODB):把数据以及对数据的操作集合起来以对象为单位进行管理。
      4. XML数据库(XML Database, XMLDB):XML 数据库可以对 XML 形式的大量数据进行高速处理。
      5. 键值存储系统(Key-Value Store, KVS):这是一种单纯用来保存查询所使用的主键(Key)和值(Value)的组合的数据库。
  • 基本用法——Quick—start

  • 设计原理:

    应用程序——>操作接口——>database/sql——>连接/操作接口——>数据库

GORM简介

设计简洁、功能强大的GORM扩展包

  • 基本用法
  • 模型定义、惯例约定:ID/NAME/Email/Age/MemberNumber
  • GORM关联:关联操作(增删改查等等)

GORM设计原理

应用程序——>操作接口——>database/sql——>连接/操作接口——>数据库

  • Gorm finisher执行GORM statement
  • SQL是怎么生成的——扩展子句
  • SQL是怎么生成的——选择子句
  • GORM插件的工作:注册、移动、替代、获取、before
  • 多数据库、读写分离: 负载均衡策略
  • ConnPool: GORM——>写DB/读DB
    1. 缓存操作
    2. 预编译操作
    3. 数据安全起见:GORM——SQL>ConnPool——插件>数据库
  • 最开始的问题:链接Mysql
    1. Dialector:GORM生成
    2. Options接口

GORM最佳实践

  1. 数据序列化与SQL表达式:
    • gorm.Expr
    • struct定义GormValuer
    • 自定义查询SQL接口
  2. 批量数据操作——批量操作、查询:
    • 批量创建
    • 批量查询
  3. 批量数据加速操作:
    • 关闭默认事务
    • 默认批量导入会调用HOOKS方法
    • 使用Prepared Statement
  4. 代码复用、分库分表、sharding——sharding:
  5. 混沌工程、压力测试:检查系统状态能不能发现某一错误。
  6. logger、trace
  7. Gen代码生成/RAW-SQL
  8. 安全问题:
    • 安全:以参数传入数据
    • 危险:sql注入数据