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 {}
}