存储与数据库 | 青训营笔记

88 阅读2分钟

存储与数据库 | 青训营笔记

一、存储系统概述

1、定义

  • 存储系统就是提供了读写,控制类接口,能够安全有效的将数据持久化的软件

2、基本特点

  • 性能敏感
  • 代码既复杂又简单
  • 软件架构易受到硬件影响

二、数据库

1、分类

  • 关系型数据库
  • 非关系型数据库

2、事务能力

  • A(事务能的操作要么全做,要么不做)
  • C(事务执行前后,数据保持一致)
  • I(可以隔离多个并发任务,避免影响)
  • D(事务一旦提交,数据保持持久性)

3、Gorm

  • 全功能 ORM
  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • Create,Save,Update,Delete,Find 中钩子方法
  • 支持 PreloadJoins 的预加载
  • 事务,嵌套事务,Save Point,Rollback To Saved Point
  • Context、预编译模式、DryRun 模式
  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
  • 复合主键,索引,约束
  • Auto Migration
  • 自定义 Logger
  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

3.1引入

go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite 
``` |
|  

3.2 快速入门

package main

import (
  "gorm.io/gorm"
  "gorm.io/driver/sqlite"
)

type Product struct {
  gorm.Model
  Code  string
  Price uint
}

func main() {
  db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
  if err != nil {
    panic("failed to connect database")
  }

  // 迁移 schema
  db.AutoMigrate(&Product{})

  // Create
  db.Create(&Product{Code: "D42", Price: 100})

  // Read
  var product Product
  db.First(&product, 1) // 根据整型主键查找
  db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录

  // Update - 将 product 的 price 更新为 200
  db.Model(&product).Update("Price", 200)
  // Update - 更新多个字段
  db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段
  db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})

  // Delete - 删除 product
  db.Delete(&product, 1)
}

3.3模型定义

  • 通过结构体与数据库完成映射
type User struct {   ID           uint  
                    Name         string   
                    Email        *string   
                    Age          uint8   
                    Birthday     *time.Time                           MemberNumber sql.NullString   
                    ActivatedAt  sql.NullTime                         CreatedAt    time.Time   
                    UpdatedAt    time.Time } 
``` |
|