MVCC--多版本并发控制

MySQL 中实现可重复读(RR)的原理–MVCC

MVCC,多版本并发控制(Multi-Version Conncurrency Control)是mysql中基于乐观锁原理实现的隔离级别的方式。用于实现读已提交和可重复读取隔离级别。
对于MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间(事务ID),一个保存行的删除时间(回滚指针),当然存储的并不是实际的时间值,而是系统版本号(system version number).每开始一个新的事务,系统版本号都会自动递增,事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。

MVCC的核心就是 Undo log+ Read-view,“MV”就是通过 Undo log来保存数据的历史版本,实现多版本的管理,“CC”是通过 Read-view来实现管理,通过 Read-view原则来决定数据是否显示。同时针对不同的隔离级别, Read view的生成策略不同,也就实现了不同的隔离级别。

json.Marshal为什么会对[]byte类型进行base64编码处理?

在 Go 语言中,json.Marshal 函数将 Go 数据结构转换为 JSON。当它遇到 []byte 类型时,按照 JSON 规范进行 base64 编码处理。这种处理方式有几个原因:

  1. 二进制安全:JSON 格式是文本格式,设计用于轻松阅读和编写。而 []byte 通常包含二进制数据,这可能包括无法打印的字符或可能干扰 JSON 解析的控制字符。Base64 编码将二进制数据转换为纯文本形式,使其在 JSON 中安全传输。

  2. 兼容性:JSON 在许多编程环境和网络传输中广泛使用。Base64 编码确保 []byte 数据在这些不同环境中保持一致性和兼容性,因为所有系统都能处理文本。

  3. 保留数据完整性:Base64 编码是一种可逆编码,可以完美还原原始二进制数据。这意味着通过 JSON 传输的二进制数据可以在接收端准确无误地重建。

  4. 避免编码问题:直接将二进制数据嵌入 JSON 可能会引起编码问题。例如,如果二进制数据包含 JSON 字符串的结束引号或其他特殊字符,可能会破坏 JSON 的格式。Base64 编码消除了这种风险。

简而言之,json.Marshal[]byte 类型进行 Base64 编码是为了确保数据在 JSON 格式中的安全性、一致性和无误性。这允许 JSON 跨语言和平台安全可靠地传输复杂和多样化的数据类型。

一些Linux命令返回值的意义

nice,renice,ps -l,chrt,uptime


nice值是反应一个进程“优先级”状态的值,其取值范围是-20至19,共40个级别。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。可以通过nice命令来对一个将要执行的命令进行nice值设置

一条指令的执行过程

流水线是怎样提高性能的,会遇到什么问题,解决方法是什么。

(1)指令执行基本分为取指,译码,执行,访存,写回,根据寄存器的特性可以不断的将一个时序过程分解成若干个子过程。

(2)多条指令重叠进行操作,每个过程都能有效的与其他子进程同时进行。这样可以提高处理器处理效率,争取在一个时钟周期中完成一条指令

Go中最常用的数据验证库


项目地址: github.com/go-playground/validator/v10

标记 标记说明
required 必填 Field或Struct validate:”required”
omitempty 空时忽略 Field或Struct validate:”omitempty”
len 长度 Field validate:”len=0”
eq 等于 Field validate:”eq=0”
gt 大于 Field validate:”gt=0”
gte 大于等于 Field validate:”gte=0”
lt 小于 Field validate:”lt=0”
lte 小于等于 Field validate:”lte=0”
eqfield 同一结构体字段相等 Field validate:”eqfield=Field2”
nefield 同一结构体字段不相等 Field validate:”nefield=Field2”
gtfield 大于同一结构体字段 Field validate:”gtfield=Field2”
gtefield 大于等于同一结构体字段 Field validate:”gtefield=Field2”
ltfield 小于同一结构体字段 Field validate:”ltfield=Field2”
ltefield 小于等于同一结构体字段 Field validate:”ltefield=Field2”
eqcsfield 跨不同结构体字段相等 Struct1.Field validate:”eqcsfield=Struct2.Field2”
necsfield 跨不同结构体字段不相等 Struct1.Field validate:”necsfield=Struct2.Field2”
gtcsfield 大于跨不同结构体字段 Struct1.Field validate:”gtcsfield=Struct2.Field2”
gtecsfield 大于等于跨不同结构体字段 Struct1.Field validate:”gtecsfield=Struct2.Field2”
ltcsfield 小于跨不同结构体字段 Struct1.Field validate:”ltcsfield=Struct2.Field2”
ltecsfield 小于等于跨不同结构体字段 Struct1.Field validate:”ltecsfield=Struct2.Field2”
min 最大值 Field validate:”min=1”
max 最小值 Field validate:”max=2”
structonly 仅验证结构体,不验证任何结构体字段 Struct validate:”structonly”
nostructlevel 不运行任何结构级别的验证 Struct validate:”nostructlevel”
dive 向下延伸验证,多层向下需要多个dive标记 [][]string validate:”gt=0,dive,len=1,dive,required”
dive Keys & EndKeys 与dive同时使用,用于对map对象的键的和值的验证,keys为键,endkeys为值 map[string]string validate:”gt=0,dive,keys,eq=1|eq=2,endkeys,required”
required_with 其他字段其中一个不为空且当前字段不为空 Field validate:”required_with=Field1 Field2”
required_with_all 其他所有字段不为空且当前字段不为空 Field validate:”required_with_all=Field1 Field2”
required_without 其他字段其中一个为空且当前字段不为空 Field `validate:”required_without=Field1 Field2”
required_without_all 其他所有字段为空且当前字段不为空 Field validate:”required_without_all=Field1 Field2”
isdefault 是默认值 Field validate:”isdefault=0”
oneof 其中之一 Field validate:”oneof=5 7 9”
containsfield 字段包含另一个字段 Field validate:”containsfield=Field2”
excludesfield 字段不包含另一个字段 Field validate:”excludesfield=Field2”
unique 是否唯一,通常用于切片或结构体 Field validate:”unique”
alphanum 字符串值是否只包含 ASCII 字母数字字符 Field validate:”alphanum”
alphaunicode 字符串值是否只包含 unicode 字符 Field validate:”alphaunicode”
alphanumunicode 字符串值是否只包含 unicode 字母数字字符 Field validate:”alphanumunicode”
numeric 字符串值是否包含基本的数值 Field validate:”numeric”
hexadecimal 字符串值是否包含有效的十六进制 Field validate:”hexadecimal”
hexcolor 字符串值是否包含有效的十六进制颜色 Field validate:”hexcolor”
lowercase 符串值是否只包含小写字符 Field validate:”lowercase”
uppercase 符串值是否只包含大写字符 Field validate:”uppercase”
email 字符串值包含一个有效的电子邮件 Field validate:”email”
json 字符串值是否为有效的 JSON Field validate:”json”
file 符串值是否包含有效的文件路径,以及该文件是否存在于计算机上 Field validate:”file”
url 符串值是否包含有效的 url Field validate:”url”
uri 符串值是否包含有效的 uri Field validate:”uri”
base64 字符串值是否包含有效的 base64值 Field validate:”base64”
contains 字符串值包含子字符串值 Field validate:”contains=@”
containsany 字符串值包含子字符串值中的任何字符 Field validate:”containsany=abc”
containsrune 字符串值包含提供的特殊符号值 Field validate:”containsrune=☢”
excludes 字符串值不包含子字符串值 Field validate:”excludes=@”
excludesall 字符串值不包含任何子字符串值 Field validate:”excludesall=abc”
excludesrune 字符串值不包含提供的特殊符号值 Field validate:”containsrune=☢”
startswith 字符串以提供的字符串值开始 Field validate:”startswith=abc”
endswith 字符串以提供的字符串值结束 Field validate:”endswith=abc”
ip 字符串值是否包含有效的 IP 地址 Field validate:”ip”
ipv4 字符串值是否包含有效的 ipv4地址 Field validate:”ipv4”
datetime 字符串值是否包含有效的 日期 Field validate:”datetime”