基础知识个人小记6 | 青训营

50 阅读2分钟
1.存储系统代码,既简单又复杂
  缓存很重要,贯穿整个存储体系
  拷贝很昂贵,尽量减少
  硬件设备五花八门,要有抽象统一的接入层

2.关系(relation):反应了事物之间的关系
  关系代数:对关系运算的抽象查询语言
  sql:一种dsl,即方便人类阅读的关系代数表达形式
  关系型数据库:是存储系统,但包含结构化数据友好,支持事物,支持复杂查询语言
  非关系型数据库:也是存储系统单一般不要求严格的结构化,包含半结构化数据友好,可能支持事物,可能支持复杂查询语言
  
3.单机数据库
  事物在单机内执行,也可以通过网络交互实现分布式事务
    
4.什么时候会用到分布式数据库:
	
            容量问题:单点容量有限,受到硬件限制。解决方法:存储结点池化,动态扩缩容
	弹性问题:
	性价比问题:
  从单写到多写,从磁盘弹性到内存弹性,分布式事务优化
package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"time"
)

func main() {
	// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
	//dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
	//db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	db, err := gorm.Open(mysql.New(mysql.Config{
		DSN:                       "root:123456@tcp(192.168.168.101:3306)/gorm?charset=utf8&parseTime=True&loc=Local", // DSN data source name
		DefaultStringSize:         256,                                                                                // string 类型字段的默认长度
		DisableDatetimePrecision:  true,                                                                               // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
		DontSupportRenameIndex:    true,                                                                               // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
		DontSupportRenameColumn:   true,                                                                               // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
		SkipInitializeWithVersion: false,                                                                              // 根据当前 MySQL 版本自动配置
	}), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}
	// ----------------------------数据库连接池----------------------------
	sqlDB, err := db.DB()
	// SetMaxIdleConns 设置空闲连接池中连接的最大数量
	sqlDB.SetMaxIdleConns(10)
	// SetMaxOpenConns 设置打开数据库连接的最大数量。
	sqlDB.SetMaxOpenConns(100)
	// SetConnMaxLifetime 设置了连接可复用的最大时间。
	sqlDB.SetConnMaxLifetime(time.Hour)
	fmt.Println("success to link mysql")
	select {}
}