MySQL 事务机制
3 事务隔离3.1 隔离性和隔离级别
事务的特性(ACID)
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
3.2 SQL标准的事务隔离级别
读未提交:一个事务还没提交时,他做的能被其他事务所看见
读提交:一个事务提交之后,他做的修改才会被其他事务所看到
可重复读:一个事务在执行期间看到的数据总是跟在启动时看到的数据是一致的。未提交变更对其他事务也是不可见的
串行化:“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才可以继续执行。
示例:下边执行一个事务,如下的操作:
12mysql> create table T(c int) engine=InnoDB; insert into T(c) values(1);
若隔离级别是“读未提交”, 则V1的值就是2。这时候事务B虽然还没有提交,但是结果已经被A看到了。因此,V2、V3也都是2。
若隔离级别是“读提交”,则V1是1,V2的值是2。事务B的更新在提交后才能被A看到。所以, V3的值 ...
Redis 核心技术实践
2 实践篇2.11“万金油”的String,为什么不好用了?2.11.1 string类型如何保存数据的举一个示例,用10位数来表示图片ID和图片存储对象ID,例如,图片ID为1101000051,它在存储系统中对应的ID号是3301000051,在图片数量巨大的场景下。
如果保存1亿张图片,使用string类型,大约用6.4GB的内存。一个图片ID和图片存储对象ID的记录平均用了64字节。来分析一下。图片ID和图片存储对象ID都是10位数,我们可以用两个8字节的Long类型表示这两个ID。因为8字节的Long类型最大可以表示2的64次方的数值,所以肯定可以表示10位数。但是,为什么String类型却用了64字节呢?通过对string类型进行分析,在记录实际数据时,string类型还需要额外的内存空间记录数据长度、空间使用等信息,这些信息也叫做元数据。当实际保存的数据较小时,元数据的空间开销就显得比较大了。
String类型具体是怎么保存数据的呢?
当你保存64位有符号整数时,String类型会把它保存为一个8字节的Long类型整数,这种保存方式通常也叫作int编码方式。
当你保存的 ...
MySQL 锁机制
第06讲 全剧锁和表锁MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。
6.1 全局锁全局锁是对整个数据库实例加锁,命令如下:
1Flush tables with read lock (FTWRL)
当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。
全局锁的典型使用场景是做全库逻辑备份。也就是把整库每个表都select出来存成文本。
在讲事务隔离时,事务的可重复读隔离级别也可以实现在多个事务执行时实现一致性。官方自带的逻辑备份工具是mysqldump。当mysqldump使用参数–single-transaction的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。但是对于MyISAM这种不支持事务则无法使用,只能全局锁。所以,single-transaction方法只适用于所有的表使用事务引擎的库。如果有的表使用了不支持事务的引擎,那么备份就只能通过FTWRL方法。这往往是DBA要求业务开发人员使用InnoDB替代MyISAM的原因之一。 ...
DPDK 深入浅出
0 常见问题
DPDK里面你对负载均衡了解吗,能不能给我解释一下呢,有几种方法呢?1DPVS
DPDK的两种模式你知道多少呢,可以介绍一下吗?
pipeline模式和run
对于DPDK它和传统协议栈的对比好处在哪呢,怎么实现的呢,
PMD的流程、NUMA的机制、DPDK对于网卡的流处理机制等等;
PMD是用户态轮询机制的驱动,轮询收发数据包,相比中断性能更高,其次PMD虽然是用户态实现的设备驱动,但依赖内核提供策略,比如依赖UIO(内核的用户态驱动框架);或者VFIO
DPDK的UIO实现的流程是什么样的呢?对于DPDK的大页以及TLB等,你有多少了解?
1 DPDK简介1.1 初始DPDK以Linux为例,传统网络设备驱动包处理的动作可以概括如下:
数据包到达网卡设备。
网卡设备依据配置进行DMA操作。
网卡发送中断,唤醒处理器。
驱动软件填充读写缓冲区数据结构。
数据报文达到内核协议栈,进行高层处理。
如果最终应用在用户态,数据从内核搬移到用户态。
如果最终应用在内核态,在内核继续进行。
随着网络接口带宽从千兆向万兆迈进,原先每个报文就会触发一个中断,中断带来的开销 ...
基于Istio ingress对外提供服务
1 简介上一篇是在Service Mesh中两个应用之间互相访问,本片介绍下通过Istio Ingress把服务网络中的应用对外暴露,通过Ingress Gateway控制从外边访问服务网格中的应用。在Service Mesh中部署两个服务,一个httpserver应用,一个Nginx,通过在Ingress Gateway中配置路由控制,使用同一个域名,不同的URI访问两个应用服务。如下:
12curl -H "Host: simple.baihl.io" $INGRESS_IP/simple/httpservercurl -H "Host: simple.baihl.io" $INGRESS_IP/simple/nginx
$INGRESS_IP 为 Istio中Ingress Gateway对外的IP地址。
2 创建应用服务1234kubectl create ns simplekubectl create -f simple.yaml -n simplekubectl create -f nginx.yaml -n simplekubect ...
Istio 中的流量劫持机制
1 Istio流量劫持机制在Service Mesh架构中,Istio通过流量劫持机制,让Pod中的应用访问其他服务时都经过Istio代理,实现对流量的控制。基于Istio可以实现请求路由、服务发现和负载均衡、故障处理、故障注入和规则配置等功能。,因为所有Pod中的进出流量都经过Istio的数据面,所以也可以实现日志记录和追踪。如下是Istio的架构图:下边通过一个示例操作,看下Istio是怎么实现流量劫持的,流量被劫持后又是怎么转到目的地的。
2 环境介绍部署两个Pod,分别表示客户端和服务端,通过客户端发起请求,然后看请求整个链路的转发过程。
12345678# 创建一个namespacekubectl create ns sidecar# 注入sidecarkubectl label ns sidecar istio-injection=enabled# 部署nginx podkubectl apply -f nginx.yaml -n sidecar# 部署toolbox podkubectl apply -f toolbox.yaml -n sidecar
nginx.ya ...
MySQL 索引详解
第4讲 深入浅出索引常见索引模型索引的作用:提高数据查询效率下边介绍几种数据结构:
哈希表 存放 键-值 (key - value)对。
哈希思路:把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置
哈希冲突的处理办法:链表
哈希表适用场景:只有等值查询的场景,查询范围会很慢
有序数组按顺序存储。查询用二分法就可以快速查询,时间复杂度是:O(log(N))
有序数组查询效率高,更新效率低
有序数组的适用场景:静态存储引擎。
二叉搜索树每个节点的左儿子小于父节点,父节点又小于右儿子。查询时间复杂度O(log(N)),更新时间复杂度O(log(N))数据库存储大多不适用二叉树,因为树高过高,会适用N叉树
InnoDB中的索引模型:B+Tree(具体介绍看《数据结构与算法笔记》)
InnoDB的索引模型在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。又因为前面我们提到的,InnoDB使用了B+树索引模型,所以数据都是存储在B+树中的。每一个索引在InnoDB里面对应一棵B+树。假设,我 ...
Go--进阶篇
00 参考资料笔记资料:
https://www.yuque.com/xguan56/uwu3y5/gzbs7g
精选 Go 学习资料https://1024casts.com/topics/Lqno6VNP9b71ZYQ5rZBMd02KG3zQwx
优秀博客:https://lailin.xyz/post/go-training-01.html
实战代码:https://github.com/marmotedu/iam
01 并发编程02 Go的泛型2.1 语法核心:类型参数、类型约束与类型推断2.1.1 类型参数就像函数有值参数一样,泛型函数或泛型类型可以有类型参数。类型参数在声明时放在函数名或类型名后面的方括号 [] 中,通常用单个大写字母表示(如 T、K、V)。
12345678// 泛型函数声明func PrintSlice[T any](s []T) { /* ... */ } //类型参数 T,约束为 any (任意类型)// 泛型类型声明type Node[T any] struct { // Node 是一个泛型类型 Valu ...
负载均衡:高并发网关设计原理与实践
0 参考资料0.1 引用资料123456789101112131415161718192021222324252627282930313233343536373839[1] http://www.linuxvirtualserver.org/[2] https://github.com/alibaba/LVS[3] http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY[4] https://wearesocial.com/blog/2018/01/global-digital-report-2018?utm_content=buffer98aa2&utm_medium=social&utm_source =twitter.com&utm_campaign=buffer[5] http://www.cac.gov.cn/2018-08/20/c_1123296882.htm[6] https://tools.ietf.org/html/rfc5798[7] https://tools.iet ...
Langchain 详解与实战
0 参考资料0.1 网站
LangChain 中文网:https://www.langchain.asia/
LangChain Github:https://github.com/langchain-ai/langchain
LangChain API文档:https://python.langchain.com/docs/get_started
大语言模型实践:https://wangwei1237.github.io/LLM_in_Action/
0.2 课程
《LangChain 实战课》
0.3 开源项目
AutoGPT:https://github.com/Significant-Gravitas/AutoGPT
AgentBench:https://github.com/THUDM/AgentBench (测试 Agent 性能)
ChatALL:https://github.com/sunner/ChatALL (对多个大模型进行整合输出)
1 LangChain 安装和使用1.1 LangChain 安装123pip install langchain ...
