当前位置: 首页 > news >正文

分布式事务:理论与实践

分布式事务:理论与实践

在现代分布式系统中,分布式事务是一种确保跨多个独立系统的一致性和完整性的方法。本文将介绍分布式事务的基本概念、实现方式、在Java中的具体实现以及在实际应用中的案例。

分布式事务的基本概念

分布式事务涉及多个独立的数据库或系统,在这些系统之间进行协调以确保数据的一致性。其目标是使得分布式系统中的多个操作要么全部成功,要么全部失败,从而保持系统的一致状态。

事务的ACID特性

在讨论分布式事务之前,首先需要了解事务的ACID特性:

  1. 原子性 (Atomicity):事务中的所有操作要么全部完成,要么全部不完成。
  2. 一致性 (Consistency):事务在完成时,必须使数据库从一个一致性状态转变为另一个一致性状态。
  3. 隔离性 (Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
  4. 持久性 (Durability):事务一旦完成,其对数据库的更改应永久保存下来,即使系统发生故障。

分布式事务的实现方式

实现分布式事务的方式有多种,以下是常见的几种:

二阶段提交协议(2PC)

二阶段提交协议(Two-Phase Commit Protocol, 2PC)是一种经典的分布式事务管理方法。它将事务提交分为两个阶段:准备阶段和提交阶段。

  1. 准备阶段:协调者向所有参与者发送准备请求,并等待参与者反馈。参与者在收到请求后,执行事务并记录日志,然后返回准备就绪或失败。
  2. 提交阶段:如果所有参与者都返回准备就绪,协调者向所有参与者发送提交请求;如果有任何参与者返回失败,协调者向所有参与者发送回滚请求。

三阶段提交协议(3PC)

三阶段提交协议(Three-Phase Commit Protocol, 3PC)是对2PC的改进,主要在准备和提交之间增加了一个准备提交阶段,以减少协调者和参与者在等待状态下的阻塞时间。

  1. 准备阶段:与2PC相同。
  2. 准备提交阶段:协调者在收到所有参与者的准备就绪响应后,向所有参与者发送准备提交请求,并等待参与者确认。
  3. 提交阶段:如果所有参与者都确认准备提交,协调者发送提交请求;否则发送回滚请求。

基于消息队列的分布式事务

在一些场景中,使用消息队列可以有效地实现分布式事务。通过消息队列,系统可以实现事件驱动架构,在确保消息可靠传递的基础上,实现分布式系统中的事务一致性。

  1. 事件发送:事务发起方在本地事务完成后,将事件发送到消息队列。
  2. 事件处理:消息队列将事件分发给各个订阅者,各订阅者在处理事件时执行相应的本地事务。
  3. 事件确认:订阅者在本地事务完成后,向消息队列发送确认消息。

Java中的2PC实现

在Java中,有几种框架和技术可以实现2PC协议,最常见的是通过Java事务API(JTA)、XA规范以及分布式事务管理器(如Atomikos和Narayana)来实现。

Java事务API(JTA)

JTA是Java EE中的一部分,提供了一组标准的API用于管理分布式事务。JTA包含两个主要接口:

  • UserTransaction:用于管理事务的生命周期(开始、提交、回滚)。
  • TransactionManager:用于管理资源(如数据库连接)的事务上下文。
示例代码
import javax.transaction.UserTransaction;
import javax.naming.InitialContext;public class DistributedTransactionExample {public static void main(String[] args) {UserTransaction utx = null;try {InitialContext ctx = new InitialContext();utx = (UserTransaction) ctx.lookup("java:comp/UserTransaction");utx.begin();// 执行分布式事务操作performDistributedOperations();utx.commit();} catch (Exception e) {if (utx != null) {try {utx.rollback();} catch (Exception rollbackEx) {rollbackEx.printStackTrace();}}e.printStackTrace();}}private static void performDistributedOperations() {// 执行跨多个数据库或系统的操作}
}

XA规范

XA是由X/Open组织提出的分布式事务处理标准。它定义了一套接口,允许全局事务管理器和本地资源管理器(如数据库)之间进行通信。Java通过JTA支持XA规范。

示例代码
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;public class XADistributedTransactionExample {public static void main(String[] args) throws Exception {// 获取数据库连接Connection conn1 = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "user", "password");Connection conn2 = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2", "user", "password");// 获取XAResourceXAResource xaRes1 = conn1.unwrap(XAResource.class);XAResource xaRes2 = conn2.unwrap(XAResource.class);// 创建XidXid xid1 = createXid(1);Xid xid2 = createXid(2);try {// 开始分布式事务xaRes1.start(xid1, XAResource.TMNOFLAGS);xaRes2.start(xid2, XAResource.TMNOFLAGS);// 执行SQL操作PreparedStatement ps1 = conn1.prepareStatement("INSERT INTO table1 (col1) VALUES (?)");ps1.setString(1, "value1");ps1.executeUpdate();PreparedStatement ps2 = conn2.prepareStatement("INSERT INTO table2 (col1) VALUES (?)");ps2.setString(1, "value2");ps2.executeUpdate();// 结束分布式事务xaRes1.end(xid1, XAResource.TMSUCCESS);xaRes2.end(xid2, XAResource.TMSUCCESS);// 准备提交int prp1 = xaRes1.prepare(xid1);int prp2 = xaRes2.prepare(xid2);// 提交if (prp1 == XAResource.XA_OK && prp2 == XAResource.XA_OK) {xaRes1.commit(xid1, false);xaRes2.commit(xid2, false);}} catch (Exception e) {// 回滚xaRes1.rollback(xid1);xaRes2.rollback(xid2);e.printStackTrace();}}private static Xid createXid(int id) {// 创建Xid实例的逻辑return new MyXid(id);}// Xid实现类static class MyXid implements Xid {private int id;MyXid(int id) {this.id = id;}public int getFormatId() {return id;}public byte[] getGlobalTransactionId() {return new byte[0];}public byte[] getBranchQualifier() {return new byte[0];}}
}

Atomikos

Atomikos是一个流行的Java分布式事务管理器,支持JTA规范,并提供对2PC的支持。它易于集成且性能良好。

示例代码
import com.atomikos.icatch.jta.UserTransactionManager;
import javax.transaction.UserTransaction;public class AtomikosExample {public static void main(String[] args) {UserTransactionManager utm = new UserTransactionManager();UserTransaction utx = utm.getUserTransaction();try {utx.begin();// 执行分布式事务操作performDistributedOperations();utx.commit();} catch (Exception e) {try {utx.rollback();} catch (Exception rollbackEx) {rollbackEx.printStackTrace();}e.printStackTrace();}}private static void performDistributedOperations() {// 执行跨多个数据库或系统的操作}
}

分布式事务的应用案例

电商平台中的订单处理

在电商平台中,订单处理通常涉及多个独立系统,例如订单系统、支付系统和库存系统。通过分布式事务,可以确保订单的各个操作在不同系统中一致完成,避免出现支付成功但库存未更新的情况。

银行转账系统

在银行转账系统中,转账操作需要同时更新多个账户的余额,通过分布式事务,可以确保转出账户和转入账户的余额更新一致,避免资金丢失或不一致的情况。

参考链接

  • 分布式事务:https://en.wikipedia.org/wiki/Distributed_transaction
  • 二阶段提交协议:https://en.wikipedia.org/wiki/Two-phase_commit_protocol
  • 三阶段提交协议:https://en.wikipedia.org/wiki/Three-phase_commit_protocol
  • 基于消息队列的事务:https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html
  • Java事务API(JTA):https://docs.oracle.com/javaee/7/tutorial/transactions.htm
  • Atomikos:https://www.atomikos.com/Documentation/HowToUse

在这里插入图片描述

相关文章:

分布式事务:理论与实践

分布式事务:理论与实践 在现代分布式系统中,分布式事务是一种确保跨多个独立系统的一致性和完整性的方法。本文将介绍分布式事务的基本概念、实现方式、在Java中的具体实现以及在实际应用中的案例。 分布式事务的基本概念 分布式事务涉及多个独立的数…...

5、双足机器人mpc动力学模型

为计算机器人的当前实际状态x,需要建立双足质心动力学模型。 速度模型由控制输入变量推导速度公式: x向速度νx :当前机器人x方向的前进速度,初始值由速度传感器实时测量得到。y向速度νy :机器人y方向的平移速度。z向速度νz :垂直方向的速度,对于双足机器人行走时为0:…...

虚拟机配置与windows之间文件夹共享samba服务:

虚拟机配置与windows之间文件夹共享samba服务: #输入安装命令: 第一步: 下载samba cd /etc/ sudo apt-get install samba第二步: 配置用户 sudo smbpasswd -a 虚拟机用户名第三步: 进入配置文件配置共享文件 sudo vim /etc/samba/smb.conf末尾输入以下内容: [s…...

探索音频创作的无限可能——Studio One 5 软件深度解析

Studio One 5 是一款功能强大且备受赞誉的音频制作软件,无论是专业音乐制作人还是业余爱好者,都能在其中找到满足自己需求的强大功能。 对于 Mac 和 Windows 用户来说,Studio One 5 提供了一个直观且友好的操作界面。其简洁明了的布局让用户…...

CSS Flex弹性布局

一、传统布局与flex布局 1、传统布局 2、flex布局 二、flex布局原理 1、布局原理 2、flex布局体验 三、flex布局父项常见属性 1、常见的父项属性 2、flex-direction设置主轴的方向 3、justify-content 设置主轴上的子元素排列方式 4、flex-wrap 设置子元素是否换行 …...

第十六章:基于开源大模型使用huggingface在deepspeed与accelerator下继承源码权重保存而实现resume与infer

文章目录 前言一、huggingface的_save_checkpoint函数不同阶段保存内容介绍1、_save_checkpoint函数2、save_model函数3、_save函数4、save_pretrained函数5、resume说明二、模型训练Resume相关内容重载1、Resume的一次性权重载入(deepspeed_load_checkpoint)2、Resume的optimi…...

ZooKeeper 入门:初学者指南

在分布式系统领域,协调和同步至关重要。Apache ZooKeeper 是一种分布式协调服务,是帮助管理和同步分布式环境中服务的基本组件。本指南旨在深入分析 ZooKeeper、其架构及其在现代分布式系统中的作用。我们还将探索一个示例来展示其实际影响。 ZooKeeper…...

【数据结构(邓俊辉)学习笔记】二叉搜索树04——AVL树

文章目录 1.重平衡1.1 AVL BBST1.2 平衡因子1.3 适度平衡1.4 接口1.5 失衡 复衡 2. 插入2.1 单旋2.2 双旋2.3 实现 3. 删除3.1 单旋3.2 双旋3.3 实现 4. (3 4)-重构4.1 "34"重构4.2 "34"实现4.3 rotateAt4.4 综合评价 1.重平衡 1…...

SpringMVC基础详解

文章目录 一、SpringMVC简介1、什么是MVC2、MVC架构模式与三层模型的区别3、什么是SpringMVC 二、HelloWorld程序1、pom文件2、springmvc.xml3、配置web.xml文件4、html文件5、执行Controller 三、RequestMapping注解1、value属性1.1、基础使用1.2、Ant风格(模糊匹配…...

SQL SERVER 设置端口

要在SQL Server中设置端口&#xff0c;可以通过SQL Server Configuration Manager来完成。以下是详细的步骤&#xff1a; 1. 打开SQL Server Configuration Manager 在Windows中&#xff0c;按 Win R 键打开运行窗口。输入 SQLServerManager<version>.msc 并按回车。例…...

华芯微特2024慕尼黑上海电子展预告

7月8日-7月10日&#xff0c;2024慕尼黑上海电子展在上海新国际博览中心举办。华芯微特展号:E4.4815&#xff0c;诚意邀请各位莅临参观。 公司介绍 华芯微特是一家由留美归国资深技术团队创立的中国芯片设计公司&#xff0c;是国家高新技术企业。2014年进军MCU产业&#xff0c;专…...

DETR End-to-End Object Detection with Transformers

End-to-End Object Detection with Transformers 论文链接&#xff1a;http://arxiv.org/abs/2005.12872 代码地址&#xff1a;https://github.com/facebookresearch/detr 一、摘要 提出了一种将目标检测视为直接集合预测问题的新方法。该方法简化了检测流程&#xff0c;有效…...

【后端面试题】【中间件】【NoSQL】ElasticSearch 节点角色、写入数据过程、Translog和索引与分片

中间件的常考方向&#xff1a; 中间件如何做到高可用和高性能的&#xff1f; 你在实践中怎么做的高可用和高性能的&#xff1f; Elasticsearch节点角色 Elasticsearch的节点可以分为很多种角色&#xff0c;并且一个节点可以扮演多种角色&#xff0c;下面列举几种主要的&…...

【TB作品】玩具电子琴,ATMEGA128单片机,Proteus仿真

题目 7 &#xff1a;玩具电子琴 基于单片机设计一能够发出中音八个音阶的音乐信号的电子琴&#xff0c;能够实现弹奏和音符显示功 能。 具有 8 个音阶按键&#xff0c;每按下一个按键时&#xff0c;所对应的 LED 点亮&#xff0c;音符进行显示。 具体要求如下&#xff1a; &…...

1974Springboot医院远程诊断管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot医院远程诊断管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库…...

SQL游标的应用场景及使用方法

SQL游标的应用场景及使用方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨SQL中游标的应用场景及使用方法。游标在SQL中是一种重要的数据…...

LLama-Factory使用教程

本文是github项目llama-factory的使用教程 注意&#xff0c;最新的llama-factory的github中训练模型中&#xff0c;涉及到本文中的操作全部使用了.yaml配置。 新的.yaml的方式很简洁但不太直观&#xff0c;本质上是一样的。新的readme中的.yaml文件等于下文中的bash指令 PS: …...

Java面试题:讨论在Java Web应用中实现安全的认证和授权机制,如使用Spring Security

在Java Web应用中&#xff0c;实现安全的认证和授权是至关重要的&#xff0c;Spring Security是一个强大的框架&#xff0c;可以简化这项工作。以下是详细讨论如何在Java Web应用中使用Spring Security实现安全的认证和授权机制。 Spring Security简介 Spring Security是一个…...

如何在Vue3项目中使用Pinia进行状态管理

**第一步&#xff1a;安装Pinia依赖** 要在Vue3项目中使用Pinia进行状态管理&#xff0c;首先需要安装Pinia依赖。可以使用以下npm命令进行安装&#xff1a; bash npm install pinia 或者如果你使用的是yarn&#xff0c;可以使用以下命令&#xff1a; bash yarn add pinia *…...

【初阶数据结构】深入解析队列:探索底层逻辑

&#x1f525;引言 本篇将深入解析队列:探索底层逻辑&#xff0c;理解底层是如何实现并了解该接口实现的优缺点&#xff0c;以便于我们在编写程序灵活地使用该数据结构。 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#…...

Go 语言环境搭建

本篇文章为Go语言环境搭建及下载编译器后配置Git终端方法。 目录 安装GO语言SDK Window环境安装 下载 安装测试 安装编辑器 下载编译器 设置git终端方法 总结 安装GO语言SDK Window环境安装 网站 Go下载 - Go语言中文网 - Golang中文社区 还有 All releases - The…...

javascript v8编译器的使用记录

我的机器是MacOS Mx系列。 一、v8源码下载构建 1.1 下载并更新depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH/path/to/depot_tools:$PATH 失败的话可能是网络问题&#xff0c;可以试一下是否能ping通&#xff0c;连…...

C语言--vs使用调试技巧

1.什么是bug? 1.产品说明书中规定要做的事情&#xff0c;而软件没有实现。 2.产品说明书中规定不要做的事情&#xff0c;而软件确实现了。 3.产品说明书中没有提到过的事情&#xff0c;而软件确实现了。 4.产品说明书中没有提到但是必须要做的事情&#xff0c;软件确没有实…...

Spring Boot中的国际化配置

Spring Boot中的国际化配置 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中实现国际化配置&#xff0c;使得应用能够轻松…...

WPF的IValueConverter用于校验和格式化TextBox的数字输入

在数据绑定&#xff08;Data Binding&#xff09;的上下文中&#xff0c;我们经常使用继承 IValueConverter 接口的类&#xff0c;用于在源值和目标值之间进行转换。该接口定义了两个方法&#xff1a;Convert 和 ConvertBack&#xff0c;这两个方法分别用于从源值到目标值的转换…...

SQL Server的守护神:Always On 高可用性详解

&#x1f6e1;️ SQL Server的守护神&#xff1a;Always On 高可用性详解 在企业级应用中&#xff0c;数据的可用性和业务连续性至关重要。SQL Server的Always On功能提供了一个高可用性解决方案&#xff0c;确保数据库服务的持续运行和快速故障恢复。本文将详细解释SQL Serve…...

Eureka入门

Eureka是一种服务发现工具&#xff0c;广泛应用于微服务架构中。它主要由Netflix开源&#xff0c;帮助服务在分布式系统中自动注册和发现。以下是Eureka的基本入门指南。 前提条件 在开始之前&#xff0c;确保你已经安装了以下软件&#xff1a; JDK 8或更高版本Maven或Gradl…...

高阶面试-netty部分

介绍下netty Netty 是一个基于 Java 的异步事件驱动的网络应用框架&#xff0c;提供了用于快速开发高性能、高可扩展性的协议服务器和客户端的工具 BIO、NIO、AIO 的区别是什么 BIO blocking io&#xff0c;同步阻塞IO&#xff0c;比较简单&#xff0c;为每个请求分配一个线…...

在 C++的跨平台开发中,如何处理不同操作系统和编译器之间的细微差异,以确保程序能够稳定且高效地运行?

在 C 的跨平台开发中&#xff0c;处理不同操作系统和编译器之间的细微差异是非常重要的。以下是一些处理差异的技巧&#xff1a; 使用条件编译&#xff1a;使用预处理指令&#xff0c;根据不同的操作系统和编译器来编写不同的代码。 #if defined(_WIN32)// Windows 特定代码 …...

独孤思维:脑子不好使,副业稳赚钱

01 副业&#xff0c;贴身级模仿。 比如独孤最近在测试dy虚拟资料项目。 跑了三个多月。 赚了点下小钱。 从最开始的自动生成视频&#xff0c;到后来的抽帧优化&#xff0c;再到先做的矩阵玩法。 一直都在迭代。 是独孤脑子好使吗&#xff1f; 恰恰相反。 正式因为独孤…...

【数据结构】(C语言):二叉搜索树

二叉搜索树&#xff1a; 树不是线性的&#xff0c;是层级结构。基本单位是节点&#xff0c;每个节点最多2个子节点。有序。每个节点&#xff0c;其左子节点都比它小&#xff0c;其右子节点都比它大。每个子树都是一个二叉搜索树。每个节点及其所有子节点形成子树。可以是空树。…...

泛微开发修炼之旅--23基于ecology自研的数据库分页组件(分页组件支持mysql、sqlserver、oracle、达梦等)

一、使用场景 ecology二开开发过程中&#xff0c;经常要使用到分页查询&#xff0c;随着信创项目的到来&#xff0c;各种国产数据库的出现&#xff0c;对于数据库分页查询兼容何种数据库&#xff0c;就迫在眉睫。 于是&#xff0c;我自己基于ecology开发了一个分页插件&#…...

《昇思25天学习打卡营第4天 | mindspore Transforms 数据变换常见用法》

1. 背景&#xff1a; 使用 mindspore 学习神经网络&#xff0c;打卡第四天&#xff1b; 2. 训练的内容&#xff1a; 使用 mindspore 的常见的数据变换 Transforms 的使用方法&#xff1b; 3. 常见的用法小节&#xff1a; 支持一系列常用的 Transforms 的操作 3.1 Vision …...

【Python时序预测系列】基于LSTM实现多输入多输出单步预测(案例+源码)

这是我的第312篇原创文章。 一、引言 单站点多变量输入多变量输出单步预测问题----基于LSTM实现。 多输入就是输入多个特征变量 多输出就是同时预测出多个标签的结果 单步就是利用过去N天预测未来1天的结果 二、实现过程 2.1 读取数据集 dfpd.read_csv("data.csv&qu…...

git客户端工具之Github,适用于windows和mac

对于我本人&#xff0c;我已经习惯了使用Github Desktop,不同的公司使用的代码管理平台不一样&#xff0c;就好奇Github Desktop是不是也适用于其他平台&#xff0c;结果是可以的。 一、克隆代码 File --> Clone repository… 选择第三种URL方式&#xff0c;输入url &…...

ai除安卓手机版APP软件一键操作自动渲染去擦消稀缺资源下载

安卓手机版&#xff1a;点击下载 苹果手机版&#xff1a;点击下载 电脑版&#xff08;支持Mac和Windows&#xff09;&#xff1a;点击下载 一款全新的AI除安卓手机版APP&#xff0c;一键操作&#xff0c;轻松实现自动渲染和去擦消效果&#xff0c;稀缺资源下载 1、一键操作&…...

Unity获取剪切板内容粘贴板图片文件文字

最近做了一个发送消息的unity项目&#xff0c;需要访问剪切板里面的图片文字文件等&#xff0c;翻遍了网上的东西&#xff0c;看了不是需要导入System.Windows.Forms&#xff08;关键导入了unity还不好用&#xff0c;只能用在纯c#项目中&#xff09;&#xff0c;所以我看了下py…...

利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API

谷歌在2024年4月发布了全新一代的多模态模型Gemini 1.5 Pro&#xff0c;Gemini 1.5 Pro不仅能够生成创意文本和代码&#xff0c;还能理解、总结上传的图片、视频和音频内容&#xff0c;并且支持高达100万tokens的上下文。在多个基准测试中表现优异&#xff0c;性能超越了ChatGP…...

极狐GitLab 17.0 重磅发布,100+ DevSecOps功能更新来啦~【一】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…...

python实现符文加、解密

在历史悠久的加密技术中&#xff0c;恺撒密码以其简单却有效的原理闻名。通过固定的字母位移&#xff0c;明文可以被转换成密文&#xff0c;而解密则是逆向操作。这种技术不仅适用于英文字母&#xff0c;还可以扩展到其他语言的字符体系&#xff0c;如日语的平假名或汉语的拼音…...

【解释】i.MX6ULL_IO_电气属性说明

【解释】i.MX6ULL_IO_电气属性说明 文章目录 1 Hyst1.1 迟滞&#xff08;Hysteresis&#xff09;是什么&#xff1f;1.2 GPIO的Hyst. Enable Field 参数1.3 应用场景 2 Pull / Keep Select Field2.1 PUE_0_Keeper — Keeper2.2 PUE_1_Pull — Pull2.3 选择Keeper还是Pull 3 Dr…...

02-《石莲》

石 莲 石莲&#xff08;学名&#xff1a;Sinocrassula indica A.Berger&#xff09;&#xff0c;别名因地卡&#xff0c;为二年生草本植物&#xff0c;全株无毛&#xff0c;具须根。花茎高15-60厘米&#xff0c;直立&#xff0c;常被微乳头状突起。茎生叶互生&#xff0c;宽倒披…...

MySQL之聚簇索引和非聚簇索引

1、什么是聚簇索引和非聚簇索引&#xff1f; 聚簇索引&#xff0c;通常也叫聚集索引。 非聚簇索引&#xff0c;指的是二级索引。 下面看一下它们的含义&#xff1a; 1.1、聚集索引选取规则 如果存在主键&#xff0c;主键索引就是聚集索引。如果不存在主键&#xff0c;将使…...

Web后端开发之前后端交互

http协议 http ● 超文本传输协议 &#xff08;HyperText Transfer Protocol&#xff09;服务器传输超文本到本地浏览器的传送协议 是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程。 HTTP是一个基于TCP/IP通信协议来传递数据. HTT…...

520. 检测大写字母 Easy

我们定义&#xff0c;在以下情况时&#xff0c;单词的大写用法是正确的&#xff1a; 全部字母都是大写&#xff0c;比如 "USA" 。 单词中所有字母都不是大写&#xff0c;比如 "leetcode" 。 如果单词不只含有一个字母&#xff0c;只有首字母大写&#xff0…...

vue的跳转传参

1、接收参数使用route,route包含路由信息&#xff0c;接收参数有两种方式,params和query path跳转只能使用query传参,name跳转都可以 params&#xff1a;获取来自动态路由的参数 query&#xff1a;获取来自search部分的参数 写法 path跳,query传 传参数 import { useRout…...

docker配置镜像源

1&#xff09;打开 docker配置文件 sudo nano /etc/docker/daemon.json 2&#xff09;添加 国内镜像源 {"registry-mirrors": ["https://akchsmlh.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc…...

MySQL高级-SQL优化-insert优化-批量插入-手动提交事务-主键顺序插入

文章目录 1、批量插入1.1、大批量插入数据1.2、启动Linux中的mysql服务1.3、客户端连接到mysql数据库&#xff0c;加上参数 --local-infile1.4、查询当前会话中 local_infile 系统变量的值。1.5、开启从本地文件加载数据到服务器的功能1.6、创建表 tb_user 结构1.7、上传文件到…...

认识100种电路之振荡电路

在电子电路领域&#xff0c;振荡是一项至关重要的功能。那么&#xff0c;为什么电路中需要振荡&#xff1f;其背后的原理是什么&#xff1f;让我们一同深入探究。 【为什么需要振荡电路】 简单来说&#xff0c;振荡电路的存在是为了产生周期性的信号。在众多电子设备中&#…...

SSH 无密登录配置流程

一、免密登录原理 非对称加密&#xff1a; 由于对称加密的存在弊端&#xff0c;就产生了非对称加密&#xff0c;非对称加密中有两个密钥&#xff1a;公钥和私钥。公钥由私钥产生&#xff0c;但却无法推算出私钥&#xff1b;公钥加密后的密文&#xff0c;只能通过对应的私钥来解…...

拼多多职位数据信息采集

数据信息采集 洛哥爬虫【视频】 爱写爬虫 我爱扣脚 https://careers.pinduoduo.com/jobs#/from DrissionPage import ChromiumPage, ChromiumOptions def fetch_pinduoduo_jobs():# 创建ChromiumOptions对象co ChromiumOptions()# 提供浏览器可执行文件的路径path rC:\Pro…...

统计信号处理基础 习题解答11-1

题目 观测到的数据具有PDF 在μ给定的条件下&#xff0c;是相互独立的。均值具有先验PDF&#xff1a; 求μ的 MMSE 和 MAP 估计量。另外&#xff0c;当和时将发生什么情况? 解答 和两者都是独立高斯分布&#xff0c;与例题10.1一致&#xff0c;直接套用&#xff08;10.11&am…...

Firewalld 防火墙基础

Firewalld 防火墙基础 一、Firewalld概述firewalld 简介firewalld 和 iptables 的关系firewalld 与 iptables service 的区别 二、Firewalld 网络区域区域介绍Firewalld数据处理流程 三、Firewalld 防火墙的配置方法firewall-config 图形工具“区域”选项卡“服务”选项卡改变防…...

Docker部署ETCD 3.5.14(保姆级图文教程)

系列文章目录 Docker部署Nginx 1.21.5&#xff08;保姆级图文教程&#xff09; Docker部署MySQL 8.3.0&#xff08;保姆级图文教程&#xff09; Docker部署ETCD 3.5.14&#xff08;保姆级图文教程&#xff09; 文章目录 一、环境二、拉取镜像2.1 查找 Docker Hub 上的 ETCD 镜像…...

Node.js_流Stream

Node.js 中的流&#xff08;Streams&#xff09;是一种处理读取和写入数据的抽象接口&#xff0c;它允许你以非阻塞的方式处理数据&#xff0c;这对于处理大文件或网络请求等 I/O 密集型任务非常有用。流主要分为四种类型&#xff1a;可读流&#xff08;Readable&#xff09;、…...

【Android 构建新工具】Bazel 构建Android项目

【Android 构建新工具】Bazel 构建Android项目 本文我们使用Bazel构建一个最简单的Android项目。Bazel提供了编译Android程序内置的方法,具体参考:Android Rules 1. 环境准备 Bazel只是编译工具,不是真正的编译器,所以还是需要Andorid开发的SD、NDK以及Android Studio,…...

15万级!2.0T+2.0T双擎+8AT,大5座SUV!

最近汽车圈热度大多聚集在比亚迪汽车,比亚迪汽车新发布了两款全新中级车型,并且定价极低,不少消费者对此非常关注。其实除了比亚迪汽车有新车上市以外,还有一系列的新车也陆续上市了,只不过关注的小伙伴不多。近期广汽传祺GS8的5座豪华版正式迎来上市,厂家指导价15.98万元…...

非量表题如何进行信效度分析

效度是指设计的题确实在测量某个东西&#xff0c;一般问卷中使用到。如果是量表类的数据&#xff0c;其一般是用因子分析这种方法去验证效度水平&#xff0c;其可通过因子分析探究各测量量表的内部结构情况&#xff0c;分析因子分析得到的内部结构与自己预期的内部结构进行对比…...

huggingface的self.state与self.control来源(TrainerState与TrainerControl)

文章目录 前言一、huggingface的trainer的self.state与self.control初始化调用二、TrainerState源码解读(self.state)1、huggingface中self.state初始化参数2、TrainerState类的Demo 三、TrainerControl源码解读(self.control)总结 前言 在 Hugging Face 中&#xff0c;self.s…...

100个 Unity小游戏系列五 -Unity 抽奖游戏专题三老虎机游戏

一、演示效果 二、知识点讲解 2.1 布局 public void CreateItems(SlotsData[] slotsData){isInited false;slotsPrizeList new List<SlotsData>();for (int i 0; i < slotsData.Length; i){var item slotsData[i];slotsPrizeList.Add(item);}float bottomY -it…...

ROS基础学习-话题通信机制研究

研究ROS通信机制 研究ROS通信机制 0.前言1.话题通信1.1 理论模型1.2 话题通讯的基本操作1.2.1 C++1.2.2 Python中使用自己的虚拟环境包1.2.2.1 参考11.2.2.2 参考21.2.2.3 /usr/bin/env:“python”:没有那个文件或目录1.2.3 Python1.2.2.1 发布方1.2.2.2 订阅方1.2.2.3 添加可执…...

科技引领未来:高速公路可视化

高速公路可视化监控系统利用实时视频、传感器数据和大数据分析&#xff0c;通过图扑 HT 可视化展示交通流量、车速、事故和路况信息。交通管理人员可以实时监控、快速响应突发事件&#xff0c;并优化交通信号和指挥方案。这一系统不仅提高了道路安全性和车辆通行效率&#xff0…...