这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记
理解database、sql
-
重要概念(参考:什么是数据库和SQL? - 知乎 (zhihu.com)):
- 为什么DBMS那么重要?因为文本文件或Excel的局限性:
- 无法多人共享数据
- 无法提供操作大量数据所需的格式
- 实现读写自动化需要编程能力
- 无法应对突发事故
- DBMS的种类
- 层次数据库(Hierarchical Database, HDB):最古老的数据库之一,它把数据通过层次结构(树形结构)的方式表现出来。
- 关系数据库(Relational Database, RDB):关系数据库是现在应用最广泛的数据库。
- 面向对象数据库(Object Oriented Database, OODB):把数据以及对数据的操作集合起来以对象为单位进行管理。
- XML数据库(XML Database, XMLDB):XML 数据库可以对 XML 形式的大量数据进行高速处理。
- 键值存储系统(Key-Value Store, KVS):这是一种单纯用来保存查询所使用的主键(Key)和值(Value)的组合的数据库。
- 为什么DBMS那么重要?因为文本文件或Excel的局限性:
-
基本用法——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
- 缓存操作
- 预编译操作
- 数据安全起见:GORM——SQL>ConnPool——插件>数据库
- 最开始的问题:链接Mysql
- Dialector:GORM生成
- Options接口
GORM最佳实践
- 数据序列化与SQL表达式:
- gorm.Expr
- struct定义GormValuer
- 自定义查询SQL接口
- 批量数据操作——批量操作、查询:
- 批量创建
- 批量查询
- 批量数据加速操作:
- 关闭默认事务
- 默认批量导入会调用HOOKS方法
- 使用Prepared Statement
- 代码复用、分库分表、sharding——sharding:
- 混沌工程、压力测试:检查系统状态能不能发现某一错误。
- logger、trace
- Gen代码生成/RAW-SQL
- 安全问题:
- 安全:以参数传入数据
- 危险:sql注入数据