Redis主从、哨兵、Redis Cluster集群架构

Redis主从、哨兵、Redis Cluster集群架构

Redis主从架构

Redis主从架构.png

Redis主从架构搭建

  • 主从搭建的问题
    • 如果同步数据失败,查看log日志
    • 报错无法连接,检查是否端口未开放
    • 出现”Error reply to PING from master:...“日志,修改参数protected-mode no

Redis主从复制原理

Redis主从复制原理.png

  • 详细流程
    • 如果你为master配置了一个slave,不管这个slave是否是第一次连接上master,它都会发送一个psync指令给master请求复制数据
    • master收到psync指令之后,会在后台进行数据持久化通过bgsave生成最新的rdb文件
    • 持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中
    • 当持久化完毕之后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中
    • 然后master再将之前缓存在内存中的命令发送给slave
    • 当master与slave之间的连接由于某些原因而断开的时候,slave能够自动重连master
    • 如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把一份持久化的数据发送给多个并发连接的slave
  • 简概
    • 从节点每次都会向主节点发送psync同步指令,如果是首次连接,主节点会开启bgsave子线程进行全量数据复制并且生成rdb文件,并且在持久化期间会将从节点新的写命令缓存下来,当持久化结束后,主节点将rdb文件同步给从节点进行持久化,如果同步期间存在网络波动,从节点会进行重连,恢复连接后,主节点会将部分缺失的数据同步给从节点

数据部分复制(断点续传)

主从复制流程图.png

  • 当master和slave断开重连后,一般都会对整份数据进行复制。但从Redis 2.8之后,Redis开始改用支持部分数据复制的命令psync去master同步数据,slave和master能够在网络连接断开重连之后只进行部分数据复制(断点续传)
  • master会在其内存中创建一个复制数据用的缓存队列,缓存最近一段时间的数据,master和它所有的slave都维护了复制的数据下标offset和master的进程id,因此当网络连接断开后,slave会请求master继续进行未完成的复制,从所记录的数据下标开始。如果master进程id变化了,或者从节点数据下标offset太旧,已经不在master的缓存队列里了,那么将会进行一次全量数据的复杂

主从复制风暴

image.png

  • 如果有很多从节点,为了缓解主从复制风暴(多个节点同时复制主节点导致主节点压力过大),我们可以让部分从节点与从节点(与主节点同步)同步数据,也就是分层结构

Redis哨兵架构

Redis哨兵高可用架构.png

哨兵模式

  • 主从复制存在不能自动故障转移、达不到高可用的功能,哨兵模式解决了这些问题,通过哨兵机制可以自动切换主从节点,客户端连接Redis的时候,先连接哨兵,哨兵会告诉客户端Redis主节点的地址,然后客户端连接上Redis进行后续的操作,当主节点宕机的时候,哨兵监测到主节点宕机,会重新推选出过半选举后的从节点作为新的主节点,然后通过发布订阅模式通知其他从节点,让它们切换主机
  • 哨兵是特殊的Redis服务,不提供读写服务,主要是用来监控Redis实例节点

哨兵集群选举流程

  • 每个sentinel每秒钟向master节点进行ping,当master回复时间超过指定值会被标记为主观下线,如果master节点被标记为主观下线,那么正在监视这个master节点的所有sentinel都会ping去确认是否真的主观下线,当有足够数量的sentinel确认master节点主观下线,那么master会被标记为客观下线,反之解除标记

  • 每个发现master节点进入客观下线的sentinel都会要求其他sentinel将自己设置为局部leader选举是先到先得的,同时每个sentinel每次选举都会自增epoch,而每个纪元只会选择出一个sentinel作为局部leader,如果所有超过一半的sentinel选举某个sentinel作为局部leader,之后这个sentinel会进行故障转移,从存活的slave节点中选举出新的master节点,这个选举过程跟集群的master选举很类似的

  • 如果哨兵集群只有一个sentinel节点,Redis的主从节点也能正常运行以及选举master,如果master挂了,那唯一的sentinel节点就是局部leader

  • 注意情况

    • 哨兵集群虽然也是可以选举leader,但是哨兵架构配置复杂,只会提供一个master节点进行对外服务,还是不能解决线上并发问题,而且哨兵模式还会出现访问瞬断问题,基于以上情况,我们可以选择Redis集群架构,集群架构也能进行选举,而且是配置多主多从的,配置简单,性能上远远高于哨兵模式

Redis Cluster集群架构

哨兵模式的缺陷

  • 在Redis 3以前的版本要实现集群一般是借助哨兵SentInel工具来监控master节点的状态,如果master节点异常,就会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,并且单个主节点内存页不适合设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率
    • Sentinel模式的主从切换出现访问瞬断的问题,该怎么解决呢?
      • 集群架构已经包括了Sentinel模式

Redis Cluster集群模式

Redis高可用集群模式.png

  • Redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性
  • Redis集群不需要Sentinel哨兵,也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点,官方推荐不超过1k节点)
  • Redis集群的性能和高可用性均优于之前版本的哨兵模式,并且集群配置非常简单

Redis集群原理分析

  • Redis Cluster将所有数据划分为16384个slots(Redis集群没有使用一致性hash),每个节点负责其中一部分slots,slots的信息存储于每个节点中
    • 槽位定位算法
      • Redis集群默认会对key值使用CRC16算法进行hash得到一个整数值,然后用这个整数值对16384进行取模来得到具体槽位
      • HASH_SLOT = CRC16(key) mod 16384
  • Redis Cluster的客户端来连接集群时,它也会得到一份集群的slots配置信息并且将其缓存在客户端本地,这样当客户端要查找某个key的时候,可以直接定位到目标节点,同时因为slots的信息可能会存在客户端与服务器不一致的问题,还需要纠正机制来实现槽位信息的校验调整
    • 跳转重定位
      • 当客户端向一个错误的节点发出了指令,该节点会发现指令的key所在的槽位并不归自己管理,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端去连这个节点去获取数据
      • 客户端收到指令后除了跳转到正确的节点上去操作,还会同步更新纠正本地的槽位映射表缓存,后续所有key将使用新的槽位映射表

Redis集群节点间的通信机制

  • 集中式(如zookeeper)

    • 优点在于元数据的更新和读取,时效性非常好,一旦数据出现变更立即就会更新到集中式的存储中吗,其他节点读取的时候立即就能感知到
    • 不足在于所有的元数据的更新压力全部集中在一个地方,可能导致元数据的存储压力
    • 很多中间件都会借助zookeeper集中式存储数据
  • gossip协议(默认)

    • ping:节点之间互相发送ping交换元数据信息
    • pong:对ping和meet消息的返回,包含自己的状态和其他信息,也可以用于信息广播和更新
    • meet: 某个节点发送meet给新加入的节点,让新节点加入集群中,然后新节点就会开始与其他节点进行通信
    • fail:某个节点判断另一个节点fail之后,就发送fail给其他节点,通知其他节点,指定的节点宕机了
    • gossip.gif
  • gossip协议优缺点

    • 优点:元数据的更新比较分散,不是集中在一个地方,更新请求会陆陆续续,打到所有节点上去更新,有一定的延时,降低了压力
    • 缺点:元数据更新有延时可能导致集群的一些操作会有一些滞后
  • 网络抖动

    • 问题: 假如不同的机房网络不太好的情况下,突然节点之间访问延迟不了的情况(过几秒又连接上了),为了避免因为这种场景而导致Cluster频繁切换(数据的重新赋值)造成性能消耗,该如何解决?
      • Redis Cluster提供cluster-node-timeout,表示如果超过这个时间,则认定节点出现故障,需要切换

Redis集群选举原理

  • 当slave发现自己的master变为FAIL状态时,便会尝试进行Failover,以期待成为新的master,由于挂掉的master可能会有多个slave,从而存在多个slave竞争成master节点的过程

    • slave发现自己的master变为FAIL
    • 将自己记录的集群currentEpoch加1,并广播FAILOVER_AUTH_REQUEST信息
    • 其他节点收到该信息(只有master响应),判断请求者的合法性,并发送FAILOVER_AUTH_ACK,对每一个epoch只发送一次ack
    • 尝试failover的slave收集master返回的FAILOVER_AUTH_ACK
    • slave收到超过半数master的ack后变为新master(这里解释了集群为什么至少需要三个主节点,如果只有两个,当其中一个节点挂了,只剩一个主节点是不能选举成功的)
    • slave广播pong消息通知其他集群节点
  • 问题: 如果重新选举时出现同一时刻多个slave发送请求给master节点进行选举,可能会出现选举失败,而且还可能会多次失败,如果避免此问题

    • 延迟每个节点发送重新选举的时间: DELAY = 500ms + random(0 ~ 500ms) + SLAVE_RANK * 1000ms
      • SLAVE_RANK
        • 表示slave已经从master复制数据的总量的rank,rank越小代表已经复制的数据越新(理论上持有最新数据的slave将会首先发起选举)

Redis集群脑裂数据丢失问题

  • Redis集群没有过半机制会有脑裂问题

  • 网络分区导致脑裂后出现多个主节点对外提供写服务,一旦网络恢复,会将其中一个主节点变成从节点,(因为从节点初始化或启动时会删除本地的所有数据,然后再从主节点同步数据)这时会有大量数据丢失

  • 解决方案: min-replicas-to-write 1 ,写数据成功的前提是最少同步的slave节点数,这种机制类似zookeeperzab机制,比如集群共三个,加上master就是2个节点,超过半数

    • 注意:脑裂问题的解决方案有个弊端,如果需要至少一个slave节点同步数据成功才算成功的话,就可能引发另一个问题,Redis本就是AP机制(可以看CAP机制),如果改变这样的机制,使其成为CP机制,一旦slave节点写入失败,就会造成Redis返回失败,就牺牲了可用性,这样就违背了Redis的初衷

      • CAP含义
        • C表示一致性,访问所有的节点得到的数据应该是一样的
        • A表示可用性,所有的节点都保持高可用性
        • P表示分区容错性,这里的分区是指网络意义上的分区,由于网络是不可靠的,所有节点之间很可能出现无法通讯的情况,在节点不能通信时,要保证系统可以继续正常服务
        • image.png
    • 分析: Redis和Zookeeper的脑裂问题以及解决方案都很类似,都是需要半数或半数以上数据同步成功才能避免脑裂问题

  • 集群是否只有在完整的情况才能对外提供服务

    • 当Redis的配置文件中cluster-require-full-coverage no时,表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群仍然可用,如果为yes则集群不可用。
  • 问题: Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数

    • 因为新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,其中一个挂了,是达不到选举新的master的条件的

    • 3个master节点和4个master节点的场景

    • 奇数master节点可以在满足选举该条件的基础上节省一个节点

      • 3个或者4个master节点如果挂了一个节点,是可以重新选举新的master节点
      • 3个或4个master节点如果挂了两个节点,就都无法选举出新的master节点了(无法满足半数以及以上)
    • 所以奇数的master节点更多的是从节省机器资源角度出发的

  • Redis集群对大批量操作命令的支持

    • Redis集群支持将key落到同一个slots中

    • 解决方案: 数据分片时,hash计算的只会是大括号里的值,确保不同的key落到同一个slots中

    • 例子

      • **mset {user1}:1:name linc {user1}:1:age 18 **
  • Redis集群架构下的数据倾斜问题如何解决

    • 使用本地缓存

    • 使用分片算法的特性,对key进行打散处理

    • big key形成集群数据倾斜,对big key进行拆分

总结

  • 问题: Redis的主从复制原理

    • 从节点每次都会向主节点发送psync同步指令,如果是首次连接,主节点会开启bgsave子线程进行全量数据复制并且生成rdb文件,并且在持久化期间会将从节点新的写命令缓存下来,当持久化结束后,主节点将rdb文件同步给从节点进行持久化,如果同步期间存在网络波动,从节点会进行重连,恢复连接后,主节点会将部分缺失的数据同步给从节点

    • 问题: 主从复制会有什么问题

      • 主从复制会带来主从复制风暴问题
        • 如果有很多从节点,为了缓解主从复制风暴(多个节点同时复制主节点导致主节点压力过大),我们可以让部分从节点与从节点(与主节点同步)同步数据,也就是分层结构
  • 问题: 哨兵模式的缺陷

    • 哨兵模式不适合线上高并发场景,主从切换会导致访问瞬断,以及只是监控master节点,并不做转发,最终还是单节点master提供访问,性能并没有提升多少
    • 高可用集群模式不仅很好的弥补了哨兵模式的缺点,而且还具备了哨兵模式的选举机制,所以推荐在生产环境使用
  • 问题: Redis集群的数据是怎么存储的

    • Redis集群的所有数据被划分到16384个槽位中,并且每个节点管理一部分的槽位,而到客户端连接集群的时候会去缓存一份槽位信息方便定位到目标节点,但是缓存的槽位信息可能会存在数据不一致的问题,所以Redis集群提供了纠错机制,当客户端通过槽位信息去定位目标节点的时候发现异常,集群会帮忙纠错并且重定位到目标节点以及缓存一份新的槽位信息给客户端
    • 定位是通过CRC算法进行位运算的
  • 问题: ZK和Redis的通信机制

    • ZK是集中式存储数据的,时效性好,但是会有数据存储压力,Redis是gossip协议的,数据存储被分散开了,时效性稍微滞后
  • 问题: Redis集群选举原理

    • 当slave发现自己的master挂掉了,就会尝试进行故障转移,期待自己成为新的master,首先会将自己记录集群的epoch进行加1,并且广播通知给其他存活的master节点,让他们来判断请求者是否合法,如果合法,就只会给每一个epoch发送一次ack,尝试故障转移的slave收到超过一半的master节点的同意的ack信息,就会成为新的master,然后广播通知其他集群的节点自己成为新的master了
    • 注意: 建议设置3个以上的奇数master节点
      • 问题: Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数
        • 因为新master的选举需要大于半数的集群master节点同意才能选举成功,如果只有两个master节点,其中一个挂了,是达不到选举新的master的条件的
        • 例子
          • 3个master节点和4个master节点的场景
            • 奇数master节点可以在满足选举该条件的基础上节省一个节点
            • 3个或者4个master节点如果挂了一个节点,是可以重新选举新的master节点
            • 3个或4个master节点如果挂了两个节点,就都无法选举出新的master节点了(无法满足半数以及以上)
        • 所以奇数的master节点更多的是从节省机器资源角度出发的
      • 问题: 如果重新选举时出现同一时刻多个slave发送请求给master节点进行选举,可能会出现选举失败,而且还可能会多次失败,如果避免此问题
        • 集群选举并不一定是一次就能成功的,假如同一时刻有多个slave节点发送信息给maste节点,master节点可能会同时发送到所有slave节点,如果slave节点收到的结果都是各自持有一票,这样就会再次重新选举,我们可以通过参数设置slave发送信息给master的时间,避免让所有slave同一时刻发送信息
  • 问题: Redis集群的脑裂问题

    • Redis集群没有过半机制会有脑裂问题
    • 网络分区导致出现多个master节点,一旦网络恢复了,会将其中一个master变成slave,而变成从节点后会将从节点本地数据清空,同步master节点的rdb快照数据
    • 如果变成slave节点的,服务数据是最新的,而另外一个master节点不是最新的,这样直接从master同步数据,就会出现数据丢失问题
    • Redis也有解决脑裂问题的方案,但是是牺牲性能换来的,可以通过设置参数,让半数节点数据同步成功之后才能响应客户端,避免脑裂问题,但是性能却大大降低了,这个其实就违背了Redis的AP机制
    • Redis和ZK的脑裂问题以及解决方案都很类似,都是需要半数或半数以上数据同步成功才能避免脑裂问题
      • 问题: CAP理论
        • CAP理论是分布式领域⾮常重要的⼀个理论,很多分布式中间件在实现时都需要遵守这个理论
          • C表示⼀致性:指的的是分布式系统中的数据的⼀致性
          • A表示可⽤性:表示分布式系统是否正常可⽤
          • P表示分区容错性:表示分布式系统出现⽹络问题时的容错性
        • CAP理论是指在分布式系统中不能同时保证C和A,也就是说在分布式系统中要么保证CP,要么保证 AP,也就是⼀致性和可⽤性只能取其⼀,如果想要数据的⼀致性,那么就需要损失系统的可⽤性,如果需要系统⾼可⽤,那么就要损失系统的数据⼀致性,特指强⼀致性
        • CAP理论太过严格,在实际⽣产环境中更多的是使⽤BASE理论,BASE理论是指分布式系统不需要保证数据的强⼀致,只要做到最终⼀致,也不需要保证⼀直可⽤,保证基本可⽤即可
  • 问题: Redis集群架构下的数据倾斜问题如何解决

    • 使用本地缓存

    • 使用分片算法的特性,对key进行打散处理

    • big key形成集群数据倾斜,对big key进行拆分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

S32 Design Studio PE工具配置TMR

配置步骤 配置内容 生成的配置结构体如下,在Generated_Code路径下的lpTmr.c文件和lpTmr.h文件。 /*! lpTmr1 configuration structure */ const lptmr_config_t lpTmr1_config0 {.workMode LPTMR_WORKMODE_PULSECOUNTER,.dmaRequest false,.interruptEnable tr…

C++力扣题目 1143--最长公共子序列 1035--不相交的线 53--最大子数组和

1143.最长公共子序列 力扣题目链接(opens new window) 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff0…

力扣用例题:2的幂

此题的解题方法在于根据用例调整代码 bool isPowerOfTwo(int n) {if(n1){return true;}if(n<0){return false;}while(n>2){if(n%21){return false;}nn/2; }if(n1){return false;}return true;}

Spring的另一大的特征:AOP

目录 AOP &#xff08;Aspect Oriented Programming&#xff09;AOP 入门案例&#xff08;注解版&#xff09;AOP 工作流程——代理AOP切入点表达式AOP 通知类型AOP通知获取数据获取切入点方法的参数获取切入点方法返回值获取切入点方法运行异常信息 百度网盘分享链接输入密码数…

FPGA 与 数字电路的关系 - 这篇文章 将 持续 更新 :)

先说几个逻辑&#xff1a;&#xff08;强调一下在这篇文章 输入路数 只有 1个或2个&#xff0c;输出只有1个&#xff0c;N个输入M个输出以后再说&#xff09; 看下面的几个图&#xff1a; 图一&#xff08; 忘了 这是 啥门&#xff0c;不是门吧 &#xff1a;&#xff09;也就…

2024-02-25 Unity 编辑器开发之编辑器拓展7 —— Inspector 窗口拓展

文章目录 1 SerializedObject 和 SerializedProperty2 自定义显示步骤3 数组、List 自定义显示3.1 基础方式3.2 自定义方式 4 自定义属性自定义显示4.1 基础方式4.2 自定义方式 5 字典自定义显示5.1 SerizlizeField5.2 ISerializationCallbackReceiver5.3 代码示例 1 Serialize…

【新三板年报文本分析】第一辑:python+selium模拟浏览器,批量实现上市公司年报链接

目录 序言函数模块介绍创建模拟浏览器对象只需要执行一次的部分需要批量执行的重复操作部分&#xff08;信息录入excel&#xff09;换页操作主函数 本地文件结构全部代码结果预览 如果直接需要结果的&#xff0c;可以直接见文末&#xff0c;获取资源。 序言 新三板年报链接&am…

emoji选择器

emoji表情 功能描述 这款聊天对话时选择表情的UI插件&#xff0c;是为了提升用户在聊天过程中的互动体验而设计的。它提供了一个直观且易于操作的界面&#xff0c;使用户能够快速地选择并插入各种表情符号&#xff0c;从而丰富他们的聊天内容&#xff0c;增加情感表达的多样性…

Unity3D 使用 Proto

一. 下载与安装 这里下载Google Protobuff下载 1. 源码用来编译CSharp 相关配置 2. win64 用于编译 proto 文件 二. 编译 1. 使用VS 打开 2. 点击最上面菜单栏 工具>NuGet 包管理器>管理解决方案的NuGet 管理包 版本一定要选择咱们一开始下载的对应版本否则不兼容&am…

C语言第三十一弹---自定义类型:结构体(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、结构体内存对齐 1.1、为什么存在内存对齐? 1.2、修改默认对齐数 2、结构体传参 3、结构体实现位段 3.1、什么是位段 3.2、位段的内存分配 3.3、…

幻兽帕鲁服务器多少钱?有买过的吗?

幻兽帕鲁服务器多少钱&#xff1f;太卷了&#xff0c;降价到24元1个月&#xff0c;阿里云4核16G10M游戏服务器26元1个月、149元半年&#xff0c;腾讯云4核16G游戏服务器32元、312元一年&#xff0c;华为云26元&#xff0c;京东云主机也是26元起。云服务器吧yunfuwuqiba.com给大…

VUE3环境搭建开发准备

VUE3 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vu…

【Prometheus】概念和工作原理介绍

目录 一、概述 1.1 prometheus简介 1.2 prometheus特点 1.3 prometheus架构图 1.4 prometheus组件介绍 1、Prometheus Server 2、Client Library 3、pushgateway 4、Exporters 5、Service Discovery 6、Alertmanager 7、grafana 1.5 Prometheus 数据流向 1.6 Pro…

100天精通Python(实用脚本篇)——第117天:基于selenium实现反反爬策略之代码输入账号信息登录网站

文章目录 专栏导读1. 前言2. 实现步骤3. 基础补充4. 代码实战4.1 创建连接4.2 添加请求头伪装浏览器4.3 隐藏浏览器指纹4.4 最大化窗口4.5 启动网页4.6 点击密码登录4.7 输入账号密码4.8 点击登录按钮4.9 完整代码4.10 GIF动图展示 五、总结 专栏导读 &#x1f525;&#x1f5…

IDEA安装配置以及安装配置Maven

IEDA官方下载地址&#xff0c;有专业版&#xff08;收费&#xff0c;破解&#xff09;&#xff0c;社区版&#xff08;免费&#xff09; 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 安装配置Maven 1.解压apache-maven-3.6.3-bin.zip&#xff0c;安装maven到D盘softwar…

台湾旺泓-WH4530A三合一光距感 接近传感芯片

WH4530A是一款集成了环境光传感器&#xff08;PS&#xff09;接近传感器&#xff08;ALS&#xff09;和红外LED灯三合一为一体的光距感传感芯片&#xff0c;可以测距从0到100厘米以内范围&#xff1b;并采用I2C接口具有超高的灵敏度和精准的测距检测范围。 该WH4530A​​​​​…

真香!NineData SQL开发全面适配 GaiaDB

2 月&#xff0c;新年伊始&#xff0c;NineData 重磅发布&#xff0c;提供了对百度云原生关系型数据库 GaiaDB 的支持。 这一次的发布不仅仅是简单的数据源支持&#xff0c;而是覆盖了整个 SQL 开发能力的重要发布&#xff0c;意味着您已经可以完整地使用 NineData SQL 开发的…

MySQL 事务原理分析

事务 前提&#xff1a;并发连接访问。定义&#xff1a;事务是用户定义的一系列操作&#xff0c;这些操作要么都做&#xff0c;要么都不做&#xff0c;是一个不可分割的单位。目的&#xff1a;事务将数据库从一种一致性状态转换为另一种一致性状态&#xff0c;保证系统始终处于…

半导体物理基础-笔记(续)

源内容参考&#xff1a;https://www.bilibili.com/video/BV11U4y1k7zn/?spm_id_from333.337.search-card.all.click&vd_source61654d4a6e8d7941436149dd99026962 掺杂半导体的费米能级与温度及杂质浓度的关系图 在温度一定的条件下&#xff0c;施主杂质浓度越高&#xff0…

Oracle EBS GL 外币折算逻辑

背景 由于公司财务在10月份期间某汇率维护错误,导致帐套折算以后并合传送至合并帐套生成合并日记帐凭证的借贷金额特别大,但是财务核对的科目余额有没有问题,始终觉得合并日记帐生成会计分发有问题,需要我们给出外币折算逻辑。 基础设置 汇率 Path: GL->设置->币种-&…