other
文章平均质量分 85
杂七杂八的一些知识记录
kksilu
爱技术 爱生活
展开
-
mysql——一条查询语句是如何执行的
文章目录概述一条SQL查询语句是如何执行的?连接管理解析与优化查询缓存(废弃)分析器:MySQL 要知道做什么优化器:MySQL 要知道该怎么做执行器:MySQL 开始执行语句存储引擎补充长连接问题思考题线程状态概述建立连接客户端发送一条查询给服务器。服务器先检查查询缓存, 如果命中了缓存, 则立刻返回存储在缓存中的结果。 否则进入正式的查询阶段。服务器端进行SQL分析、 预处理。由优化器生成对应的执行计划。MySQL根据优化器生成的执行计划, 调用存储引擎的API来执行查询。将结果返回给客原创 2021-07-28 22:14:54 · 254 阅读 · 1 评论 -
redis-过期键的三种删除策略
9-数据库5/100发布文章qq_40337086未选择任何文件文章目录数据库切换原理键和值用什么结构组织?(数据库键空间)1.2 读写键空间时的维护操作(过,不看)2、过期时间(生存时间)2.1设置过期时间2.2保存过期时间2.3 移除过期时间2.4 计算并返回剩余生存时间2.5 过期键的判定3过期键的删除策略(重要)3.1 定时删除3.2 惰性删除3.3 定期删除4、Redis的过期键删除策略4.1 惰性删除策略的实现4.2 定期删除策略的实现5 AOF、 RDB、复制功能 对过期键的处理6原创 2021-07-31 10:36:25 · 889 阅读 · 0 评论 -
对数据库索引的一些理解
文章目录索引核心知识总结面试为什么需要索引?什么是聚簇索引?什么是二级索引(辅助索引)?什么是联合索引说说MyISAM中的索引方案?为什么不用其他的数据结构作为索引,而是B+?索引核心知识总结每个索引都对应一棵B+树,B+树分为好多层,最下边一层是叶子节点,其余的是内节点。所有用户记录都存储在B+树的叶子节点,所有目录项记录都存储在内节点。InnoDB存储引擎会自动为主键(如果没有它会自动帮我们添加)建立聚簇索引,聚簇索引的叶子节点包含完整的用户记录。我们可以为自己感兴趣的列建立二级索原创 2021-08-28 14:45:40 · 206 阅读 · 0 评论 -
redis-Sentinel哨兵机制
文章目录Sentinel三大功能功能一:监控检测主观下线状态:down-after-milliseconds检查客观下线状态:少数服从多数功能二:选主,功能三:通知第一步:选举领头Sentinel第二步:选出新的主服务器第三步:修改从服务器的复制目标第四步:将旧的主服务器变为从服务器哨兵集群、哨兵与主从库、哨兵与客户端启动并初始化Sentinel流程获取主服务器信息:INFO获取从服务器信息:INFO向主服务器和从服务器发送信息:命令连接接收来自主服务器和从服务器的频道信息:订阅连接基于pub/sub机制的原创 2021-08-28 14:21:05 · 80 阅读 · 0 评论 -
mysql为什么会选错索引?
数据库为什么会选错索引?比如mysql判断是否走 c 字段索引时,系统会预测走 c 字段索引大概需要扫描多少行。如果预测到要扫描的行数很多,它可能就不走索引而直接扫描全表了。系统是怎么预测的呢?系统是通过索引的区分度来判断的,我们也把区分度称之为基数,即区分度越高,基数越大,一个索引上不同的值越多,意味着出现相同数值的索引越少,意味着利用索引查询的次数越少。所以,一个索引的基数越大,意味着走索引查询越有优势。即基数越大越好,性别由于基数太小就不适合建索引。msyql怎么知道这个索引的基数呢?原创 2022-07-05 17:08:53 · 301 阅读 · 1 评论 -
什么是redis?
文章目录两大维度,三大主线redis 问题 --> 主线 --> 技术点redis整体设计为什么Redis这么快?单线程IO多路复用+纯内存访问+高效的数据结构真正的单线程 ?为什么用单线程?为什么单线程能这么快?——IO多路复用单线程的性能问题两大维度,三大主线redis 问题 --> 主线 --> 技术点redis整体设计Redis是一个基于内存、可持久化的键值对的数据库,优点是速度快、性能强大、可持久化,支持丰富的数据类型以及支持数据备份;采用什么访问模式?原创 2021-10-02 12:37:19 · 3157 阅读 · 0 评论 -
mysql自增主键详解
文章目录什么是自增主键?自增主键的优点好处?自增值保存在哪儿?自增值修改机制自增主键 id不能保证连续的原因?原因一:唯一键冲突原因二:事务回滚原因三:自增锁的优化思考题什么是自增主键?当设置了主键自增时,主键的生成可以完全依赖数据库,无需人为干预,在新增数据的时候,我们只需要将主键设置为null,0或者不设置该字段,数据库就会为我们自动生成一个主键值。而且,自增主键是整数型,单调递增,对创建索引也十分友好,自增主键的优点好处?自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧原创 2021-07-05 20:44:39 · 4424 阅读 · 1 评论 -
索引-普通索引和唯一索引如何选择?
文章目录复习什么是普通索引和唯一索引?在不同的业务场景下,应该选择普通索引还是唯一索引?查询过程(二者效率差不多)change buffer更新过程(普通优于唯一)change buffer 的使用场景索引选择和实践复习什么是普通索引和唯一索引?普通索引:最基础的索引,没有任何的约束唯一索引:在普通索引的基础上,添加了数据唯一性的约束,即索引的值必须唯一,不能重复在不同的业务场景下,应该选择普通索引还是唯一索引?从这两种索引对查询语句和更新语句的性能影响来进行分析查询过程(二者效率差不多)假原创 2021-07-07 22:59:26 · 140 阅读 · 0 评论 -
redis-RDB和AOF对比总结
文章目录RDB和AOF对比RDBSAVE和BGSAVE快照时如何修改数据? bgsave + 写时复制技术AOFAOF持久化的三种实现三种方式的对比三种方式如何选择AOF 文件的载入与数据还原AOF文件重写:bgrewriteaof混合使用AOF和RDBAOF和RDB如何选择场景题RDB和AOF对比使用优先级默认使用RDB,但因为AOF文件的更新频率通常比RDB文件的更新频率高, 所以如果服务器开启了AOF持久化功能。那么服务器会优先使用AOF文件来还原数据(磁盘-》数据库)。存储格式原创 2021-07-31 21:52:58 · 396 阅读 · 0 评论 -
redis-主从
文章目录概述1、 旧版复制功能的实现2、新版复制功能的实现2.1 部分重同步的实现2.2 PSYNC命令的实现3 复制的完整实现4、心跳检测重点回顾概述在 Redis 中, 用户可以通过执行 SLAVEOF命令或者设置 slaveof 选项, 让一个服务器去复制( replicate )另一个服务器, 我们称呼被复制的服务器为主服务器( master ), 而对主服务器进行复制的服务器则被称为从服务器( slave )进行复制中的主从服务器双方的数据库将保存相同的数据, 概念上将这种现象称作“数据库状原创 2021-08-28 14:20:54 · 289 阅读 · 0 评论 -
varchar与char有什么区别?
文章目录字段varchar与char有什么区别?DECIMAL是如何保证精确的?属性主键主键和UNIQUE约束的区别null和空的区别字段varchar与char有什么区别?char是一种固定长度的类型,varchar则是一种可变长度的类型在 char(M)类型的数据列里,每个值都占用M个字符的存储空间,即使字符个数没有M个,MySQL也会在它的右边用空格字符补足.(其中M的取值范围是0~255。如果省略掉M的值,那它的默认值就是1)在varchar(M)类型的数据列里,最多存放M个字符,原创 2021-08-26 16:35:56 · 5560 阅读 · 0 评论 -
redis-Cluster集群模式
文章目录项目中遇到过什么问题?纵向扩展和横向扩展数据和实例之间如何对应呢?客户端如何定位数据?项目中遇到过什么问题?问题描述:要用Redis保存5000万个键值对,每个键值对大约是512B,大约25G,为了能快速部署并对外提供服务,我们选择一台32GB内存的云主机来部署Redis。因为32GB的内存能保存所有数据,而且还留有7GB,可以保证系统的正常运行。同时,我还采用RDB对数据做持久化,以确保Redis实例故障后,还能从RDB恢复数据。但是,在使用的过程中,我发现,Redis的响应有时会非常慢原创 2021-08-28 14:21:14 · 376 阅读 · 0 评论 -
联合索引&最左匹配原则&覆盖索引&索引下推
联合索引&最左匹配原则联合索引我们也可以同时以多个列的大小作为排序规则,也就是同时为多个列建立索引,比方说我们想让B+树按照c2和c3列的大小进行排序,这个包含两层含义:先把各个记录和页按照c2列进行排序。在记录的c2列相同的情况下,采用c3列进行排序为c2和c3列建立的索引的示意图如下:如图所示,我们需要注意一下几点:每条目录项记录都由c2、c3、页号这三个部分组成,各条记录先按照c2列的值进行排序,如果记录的c2列相同,则按照c3列的值进行排序。B+树叶子节点处原创 2021-07-07 22:59:52 · 865 阅读 · 0 评论 -
mysql-分库分表
文章目录核心概念分区表的原理分区表的类型什么情况下会出问题核心概念对用户来说, 分区表是一个独立的逻辑表, 但是底层由多个物理子表组成。 实现分区的代码实际上是对一组底层表的句柄对象(Handler Object)的封装。 对分区表的请求, 都会通过句柄对象转化成对存储引擎的接口调用。 所以分区对于SQL层来说是一个完全封装底层实现的黑盒子, 对应用是透明的, 但是从底层的文件系统来看就很容易发现, 每一 个分区表都有一个使用#分隔命名的表文件。语法:PARTITION BYMySQL在创建表时使用原创 2021-01-11 14:09:01 · 673 阅读 · 0 评论 -
MySQL-MVCC
文章目录事务ACID执行的五种状态事务并发执行会出现的问题四种隔离级别语法开启事务提交/手动中止事务自动提交隐式提交(了解)保存点事务事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败(出现异常),都将导致整个事务的回滚。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。ACID原子性(Atomicity):一个事务必须被视为一个不可分割的最小工作单元,原创 2021-01-11 14:06:40 · 559 阅读 · 0 评论 -
开发中使用mysql的注意点
文章目录MySQL调优总结数据类型方面的优化MySQL调优总结数据类型方面的优化首先是数据选型方面进行优化1、应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型使得表更小,一般表越小,查询越快。2、简单就好简单数据类型的操作通常需要更少的CPU周期。开发建议:应该 使用MySQL自带的类型(如date,time ,datetime) 而不是字符串来存储日期和时间,应该用整型存储IP地址。3、尽量避免NULL很多表都包含可为NULL的列, 即使应用程序井不需要保存NULL 也是如原创 2021-08-28 14:54:22 · 165 阅读 · 0 评论 -
对join的一些理解
2、连接查询-join我们之前一直使用student_info和student_score两个表来分别存储学生的基本信息和学生的成绩信息,其实合并成一张表也不是不可以,假设将两张表合并后的新表名称为student_merge,那它应该长这样:student_merge表有了这个合并后的表,我们就可以在一个查询语句中既查询到学生的基本信息,也查询到学生的成绩信息。但是别忘了一个学生可能会有很多门学科的成绩信息,也就是说每当我们想为一个学生增加一门学科的成绩信息时,我们必须把他的基本信息再抄一遍,这种原创 2021-07-01 22:54:43 · 466 阅读 · 0 评论 -
MySQL-Explain-type-表的访问方法
文章目录访问方法(access method)MySQL Server有一个称为查询优化器的模块,一条查询语句进行语法解析之后就会被交给查询优化器来进行优化,优化的结果就是生成一个所谓的执行计划,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是啥样的,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将查询结果返回给用户。不过查询优化这个主题有点儿大,在学会跑之前还得先学会走,所以本章先学习MySQL怎么执行单表查询为了故事的顺利发展,我们先得有个表:CREATE TA原创 2020-12-23 09:52:57 · 231 阅读 · 1 评论 -
Mysql-索引入门
文章目录前言没有索引的查找在一个页中的查找在很多页中查找索引MySQL中创建和删除索引的语句索引原理一个简单的索引方案InnoDB中的索引方案聚簇索引二级索引联合索引InnoDB的B+树索引的注意事项根页面万年不动窝内节点中目录项记录的唯一性一个页面最少存储2条记录MyISAM中的索引方案简单介绍前言我们知道InnoDB数据页的7个组成部分,知道了各个数据页之间可以组成一个双向链表,而每个数据页内的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过原创 2020-12-20 09:08:40 · 520 阅读 · 1 评论 -
mysql-Explain关键字
文章目录执行计划输出中各列详解tableIDselect_type一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。EXPLAIN语句帮助我们查看某个查询语句的具体执行计划.EXPLAIN可以用在SELECT、DELETE、INSERT、REPLACE以及UPDATE语句前边。不过我们这里对SELECT语句更感兴趣,所以后边只会以SELECT语句原创 2021-01-12 14:50:06 · 200 阅读 · 0 评论 -
mysql-redo-log 、bin-log、undo-log
文章目录MySQL Server 的四种类型日志MySQL Server 的四种类型日志MySQL Server 有四种类型的日志——Error Log、General Query Log、Binary Log 和 Slow Query Log。Error Log:错误日志,记录 mysqld 的一些错误。General Query Log:一般查询日志,记录 mysqld 正在做的事情,比如客户端的连接和断开、来自客户端每条 Sql Statement 记录信息;如果你想准确知道客户端到底原创 2021-07-21 10:40:01 · 199 阅读 · 0 评论 -
对select的一些总结和理解
文章目录基本查询简单搜索条件匹配列表中的元素匹配NULL值多个搜索条件的查询通配符-模糊查询sql注入问题转义通配符基本查询SELECT [ALL|DISTINCT] select_expr FROM -> WHERE -> GROUP BY [合计函数] -> HAVING -> ORDER BY -> LIMITa. select_expr -- 可以用 * 表示所有字段。 select * from tb; -- 可以使用表达式(计算原创 2020-12-21 12:06:56 · 476 阅读 · 0 评论 -
redis-单线程为什么还这么快?
文章目录单线程为什么用单线程?为什么单线程Redis还这么快?并非真正的单线程IO多路复用纯内存访问高效的数据结构那单线程有哪些性能问题呢?单线程为什么用单线程?多线程的缺点:并发访问控制一直是多线程开发中的一个难点问题,如果没有精细的设计,比如说,只是简单地采用一个粗粒度互斥锁,就会出现不理想的结果:即使增加了线程,大部分线程也在等待获取访问共享资源的互斥锁,并行变串行,系统吞吐率并没有随着线程的增加而增加。采用多线程开发一般会引入同步原语来保护共享资源的并发访问,这也会降低系统代码的易调试性原创 2021-07-31 09:56:32 · 268 阅读 · 0 评论 -
mysql-主从模式
文章目录什么是主从复制?主从复制的原理什么是主从复制?主从复制是指将主数据库的事务操作通过二进制日志binlog传到从数据库上,然后在从数据库上对这些日志进行重新执行,从而使从数据库和主数据库的数据保持一致。主从复制的原理MySql主库在事务提交时,会把数据变更作为事件记录在二进制日志Binlog中;主库推送二进制日志文件Binlog中的事件到从库的中继日志Relay Log中,之后从库根据中继日志重做数据变更操作,通过逻辑复制来达到主库和从库的数据一致性;MySql通过三个线程来完成主从库间的原创 2021-08-30 09:18:29 · 170 阅读 · 0 评论 -
数据库-事务
文章目录什么是事务?ACID执行的五种状态事务并发四种问题四种隔离级别MySQL 如何实现事务隔离的保存点不好的事务习惯分布式事务复习谈谈2PC & 3PC常见分布式事务解决方案总结什么是事务?事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。要么都做,要么都不做。ACID原子性(Atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的原创 2021-07-08 22:56:34 · 445 阅读 · 1 评论 -
关系型数据库 vs 非关系型数据库
文章目录结构化数据、非结构化数据与半结构化数据关系型数据库非关系型数据库NoSQL与关系型数据库对比KV型NoSql(代表:Redis)搜索型NoSql(代表:ElasticSearch)列式NoSql(代表:HBase)文档型NoSql(代表:MongoDB)总结结构化数据、非结构化数据与半结构化数据结构化数据:由二维表结构来逻辑表达和实现的数据,严格遵循数据格式与长度规范,也称作为行数据,特点为:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。非结构化数据:指的是数据结构原创 2022-08-24 23:10:52 · 898 阅读 · 0 评论 -
缓存—雪崩、击穿、穿透、缓存一致性
文章目录缓存的收益和成本缓存更新策略缓存粒度控制缓存穿透无底洞优化缓存雪崩缓存击穿-热点key失效重点回顾缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要。但是将缓存加入应用架构后也会带来一些问题,本章将针对这些问题介绍缓存使用技巧和设计方案,包含如下内容:· 缓存的收益和成本分析。· 缓存更新策略的选择和使用场景。· 缓存粒度控制方法。· 穿透问题优化。· 无底洞问题优化。· 雪崩问题优化。· 热点key重建优化。缓存的收益和成本好处:加速读写降原创 2021-07-30 17:42:52 · 307 阅读 · 0 评论 -
阿里数据库规范
文章目录阿里规约1、建表规约索引规约SQL语句ORM映射阿里规约1、建表规约数据库字段名的修改代价很大,设计字段需要慎重考虑。【强制】表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint ( 1 表示是,0 表示否)。说明:任何字段如果为非负数,必须是 unsigned。【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。正例:getter_admin,task_config,level3_name反原创 2021-10-14 13:08:27 · 793 阅读 · 0 评论 -
redis-数据结构总结
文章目录数据类型和数据结构对应键和值用什么结构组织?rehash渐进式rehash集合数据操作效率数据类型和数据结构对应List、Hash、Set和Sorted Set被称为集合类型,它们的特点是一个键对应了一个集合的数据。键和值用什么结构组织?Redis使用一个全局哈希表保存所有的键值对。why?为了实现从键到值的快速访问,O(1)这个查找过程主要依赖于哈希计算,和数据量的多少并没有直接关系。也就是说,不管哈希表里有10万个键还是100万个键,我们只需要一次计算就能找到相应的键。reh原创 2021-08-28 14:25:24 · 120 阅读 · 0 评论 -
对mysql中锁的一些理解
文章目录共享锁和独占锁锁定读的语句行锁和表锁Innodb的表锁Innodb的行锁1、`LOCK_REC_NOT_GAP`2、`LOCK_GAP`3、Next-Key Locks:4、Insert Intention Locks:5、隐式锁共享锁和独占锁在使用加锁的方式解决问题时,由于既要保证读-读情况不受影响,又要使写-写、读-写或写-读情况中的操作相互阻塞,所以设计MySQL的大叔给锁分了个类:共享锁:S锁。在事务要读取一条记录时,需要先获取该记录的S锁。独占锁:X锁。在事务要改动一条记录原创 2021-07-20 21:33:27 · 371 阅读 · 0 评论 -
mysql- count(*)、count(主键 id)、count(字段) 、 count(1) 对比
文章目录说说 count(*) 的实现方式自己计数方法用缓存系统保存计数在数据库保存计数count(*)、count(主键 id)、count(字段) 、 count(1) 对比说说 count(*) 的实现方式在不同的 存储引擎中,count(*) 有不同的实现方式。MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,时间复杂度O(1);InnoDB 引擎执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数,时原创 2021-07-07 23:18:20 · 198 阅读 · 0 评论 -
自动驾驶——为什么需要仿真?
想象一下当你发现了一个新的算法,但还不确认它是否有效,你是否会直接找一辆自动驾驶汽车,更新软件,并且进行测试呢?这样做可能并不安全,你必须把所有的场景测试一遍以保证它足够好,这可需要大量的时间。仿真的好处显而易见,它通过软件模拟来发现和复现问题,而不需要真实的环境和硬件,可以极大的节省成本和时间。随着现在深度学习的兴起,仿真在自动驾驶领域有了新的用武之地。自动驾驶平台通过仿真采集数据,可以把训练时间大大提高,远远超出路测的时间,加快模型迭代速度。先利用集群训练模型,然后再到实际的路测中去检验,采用数据驱动原创 2022-06-30 10:36:20 · 1087 阅读 · 0 评论 -
自动驾驶——软件和云服务介绍
无人驾驶软件分为车辆端和云端2个部分,其中车辆端运行操作系统和无人驾驶系统,云端提供无人驾驶所需要的各种服务。操作系统主要负责无人车硬件资源(包括传感器、系统总线、网络等)的管理以及计算资源的调度。对无人驾驶来说,操作系统的实时性非常重要,操作系统要保证任务能够在规定的时间内得到响应。无人驾驶系统实现了无人驾驶所需要的各种算法,包括定位、环境感知、路径规划和控制等,无人驾驶系统是无人驾驶软件的核心部分。最后云平台提供了无人驾驶所需要的各种基础服务,共同构成了整个无人驾驶软件。无人驾驶整体软件框图:从整体原创 2022-06-30 15:48:19 · 2513 阅读 · 0 评论 -
自动驾驶——仿真的几大挑战
静态场景的搭建说的直白一点就是生成地图,实际上生成地图包括2方面:单独的只生成一部分都会对自动驾驶仿真的地图生成造成很大的工作量,举个例子,假如你获取了一个仿真器中的虚拟城市,而没有这个城市的高精度地图,那么你必须标注并且制作这个城市的高精度地图,大部分还需要人工完成,而自动驾驶系统需要高精度地图才能运行,因此这种方式不太适合。还有一种就是根据真实的城市进行建模,这一部分的工作量主要体现在三维重建上,如何得到整个城市的模型,并且模型的真实程度都会影响到仿真的效果。稍微简单一点的方式就是通过导入高精度地图,生原创 2022-06-30 11:24:09 · 527 阅读 · 0 评论 -
分布式——一致性hash
文章目录一致性hash为什么需要一致性hash?实现原理虚拟节点一致性hash为什么需要一致性hash?普通的hash算法无法满足分布式应用在分布式的存储系统中,如果数据持续增多,原来的机器数量已经不能满足需求,就需要增加机器,这时就麻烦了,因为所有的数据都需要重新哈希值进行再次分配。这就相当于,缓存中的数据一下子都失效了,所有的数据请求都会穿透缓存,直接去请求数据库。这样就可能发生雪崩效应,压垮数据库。实现原理环形hash空间按照常用的hash算法来将对应的key哈希到一个具有2^32个原创 2022-07-10 22:35:19 · 324 阅读 · 0 评论 -
分布式事务解决方案
文章目录2pc正常流程异常处理第一阶段失败——回滚第二阶段失败——不断重试同步阻塞导致性能差协调者单点故障无法保证数据一致性(极端情况:协调者和个别参与者挂了)3PCCanCommit准备阶段PreCommit 预提交阶段DoCommit 提交阶段超时机制解决单点故障和同步阻塞预提交的作用2pc和3pc对比TCC 方案基于分布式消息的最终一致性方案总结2pc核心特点:2PC和3PC都是保证强一致性的2pc是同步阻塞的,参与者会锁定资源并阻塞等待协调者的命令,等不到命令就会一直持有资源不释放,影响其他原创 2022-05-28 22:55:20 · 547 阅读 · 0 评论 -
分布式互斥
文章目录分布式互斥霸道总裁:集中式算法民主协商:分布式算法轮值 CEO:令牌环算法总结分布式互斥在分布式系统里,排他性的资源访问方式叫作分布式互斥,而这种被互斥访问的共享资源就叫作临界资源。如何才能让分布式系统里的程序互斥地访问临界资源?霸道总裁:集中式算法我们引入一个协调者程序,每个程序在需要访问临界资源时,先给协调者发送一个请求。如果当前没有程序使用这个资源,协调者直接授权请求程序访问;否则,按照先来后到的顺序为请求程序“排一个号”。如果有程序使用完资源,则通知协调者,协调者从“排号”的原创 2022-08-01 13:04:34 · 291 阅读 · 0 评论 -
分布式-分布式选举算法
文章目录长者为大:Bully 算法民主投票:Raft 算法具有优先级的民主投票:ZAB 算法三个算法总结选举的作用就是选出一个主节点,由它来协调和管理其他节点,以保证集群有序运行和节点间数据的一致性。目前常见的分布式选举算法:基于序号选举的算法( Bully 算法)、多数派算法(Raft 算法、ZAB 算法)长者为大:Bully 算法Bully 算法是一种霸道的集群选主算法,因为它的选举原则是“长者”为大,即在所有活着的节点中,选取 ID 最大的节点作为主节点。在 Bully 算法中,节点的角原创 2022-08-01 13:14:18 · 1004 阅读 · 0 评论 -
分布式锁的三种实现方式
文章目录分布式锁基于数据库实现分布式锁基于缓存实现分布式锁基于 ZooKeeper 实现分布式锁三种方案对比分布式锁与普通锁不同的是,分布式锁是指分布式环境下,系统部署在多个机器中,实现多进程分布式互斥的一种锁。为了保证多个进程能看到锁,锁被存在公共存储(比如 缓存、数据库等三方存储中),以实现多个进程并发访问同一个临界资源,同一时刻只有一个进程可访问共享资源,确保数据的一致性。为了确保分布式锁的可用性,我们在设计时应考虑到以下几点:互斥性,即在分布式系统环境下,对于某一共享资源,需要保证在同一原创 2022-08-23 23:20:08 · 149 阅读 · 0 评论 -
分布式事务
文章目录总结谈谈2PC & 3PCTCC 方案事务状态表方案基于MQ的最终一致性事务方案最大努力通知分布式事务2pc正常流程异常处理第一阶段失败——回滚第二阶段失败——不断重试同步阻塞导致性能差协调者单点故障极端情况下无法保证数据一致性(极端情况:协调者和个别参与者挂了)3PC提交流程超时机制解决同步阻塞预提交TCC 方案基于分布式消息的最终一致性方案总结码海敖丙总结谈谈2PC & 3PC2PC(Two-phase commit protocol)两阶段提交。2PC 引入一个事务原创 2022-05-30 22:15:40 · 82 阅读 · 0 评论