如何选择合适的主键id?
目录标题
- MySQL主键一定是自增的吗?
- 自增id、uuid、雪花算法 谁更合适?
- 详细聊聊 UUID
- 详细聊聊 雪花算法
在数据库设计中,选择合适的主键对于数据表的性能和数据完整性都非常重要。接下来,让我们探讨一下自增id、uuid和雪花算法,以便更好地理解哪种适合作为主键。
MySQL主键一定是自增的吗?
常见的一个误解是认为MySQL的主键一定是自增的,但实际上,主键并非必须是自增的。主键可以根据需求自行选择,可以选取任何数据类型作为主键!通常单独创建一个自增字段作为主键的好处包括自增id是数字,比UUID占用的位数少,节省存储空间。由于id是递增的,在B+Tree索引中查询效率高。在分页时,通过id解决深度分页问题。然而,使用自增主键也存在问题在分库分表时,无法依赖单表的自增主键作为主键,可能导致重复和冲突。由于id是自增的,系统可能存在一定安全风险,规律性可能为潜在攻击者提供线索。
深度分页问题是指在进行分页查询时,随着页码(偏移量)的增加,数据库需要跳过大量记录,导致查询性能急剧下降。主要原因是偏移量过大导致的索引失效和资源消耗增加。使用自增ID,可以采用键值分页(Keyset Pagination)的方法,避免使用OFFSET,从而提高查询性能。具体做法是:
- 在第一次查询时,获取当前页的最后一条记录的ID。
- 在下一次查询时,使用这个ID作为起点,继续查询下一页的数据。
自增id、uuid、雪花算法 谁更合适?
我觉得吧没有好不好,只有需求场景适合不适合。三者都有各自的优缺点,和适合的场景。
自增id,在MySQL中可以通过设置 AUTO_INCREMENT 属性实现id的自增长。
- 优点
- 自增id是数字,占用的位数比uuid小多了,所以在存储空间上也节省很多;
- id是递增的,因此在B+Tree索引时,查询效率较高。在分页的时候,也可以通过id解决深度分页问题。
- 缺点
- 当我们做分库分表的时候,就没办法依赖一张表的自增主键来作为主键id了,这样就会发生重复导致冲突的问题;
- 因为id是自增的,那么就可以预测到,给系统带来了一定的安全风险。
UUID,是一个 128 位长的唯一标识符,通常以字符串形式表示。它可以使用不同的算法生成,比如基于时间戳的UUID(版本1)和 随机数生成的UUID(版本4)等。
- 优点
- 无论使用不同的算法生成,几乎都可以保证在全球范围内唯一,避免了多台机器之间主键冲突的问题,适用于分布式系统后中;
- 采用随机数生成的UUID很难被猜测出来,对于需要保密性的应用场景较为合适。
- 缺点
- UUID通常以128位的字符串形式存储,占用的存储空间比较大;
- 因为UUID不是自增的,所以在做范围查询的时候是不支持的;
- 再就是查询效率低下:
- 比如说:在UUID列上创建索引,因为它很长,索引的也会变得非常大。大的索引会占用更多的磁盘空间,导致缓存命中率下降,进而增加了磁盘I/O的需求。另外,大的索引还会导致查询时内存开销增加;
- 另外,因为UUID不自增的,新插入的值可能会插入到叶子节点的中间位置。这可能导致B+树平衡操作频繁进行,从而增加了写入的开销。树的平衡操作涉及到数据的重新排序和移动,这还会影响到查询的性能。
雪花算法,是Twitter研发的一种分布式ID生成算法,它可以生成全局唯一且递增的id。算法的核心思想是将一个64位的id划分为多个部分,分别对应着符号位、时间戳、数据中心标识、机器标识、序列化。
- 优点
- 全局唯一:雪花算法生成的ID是64位的整数,可以保证在全球范围内唯一,适用于分布式系统;
- 有序性:生成的ID是递增的,这对于数据库中的索引和查询优化非常有利;
- 高性能:生成ID的速度非常快,每秒可以生成数十万个ID,适合高并发场景;
- 低存储成本:64位的整数相比128位的UUID占用更少的存储空间;
- 可追溯性:ID中包含了时间戳信息,可以通过ID反推出生成时间,便于日志记录和问题排查。
- 缺点
- 时间回拨问题:如果服务器的时间被回拨,可能会导致生成的ID重复。可以通过配置NTP同步时间来缓解这个问题;
- 依赖系统时间:生成ID依赖于系统时间,如果系统时间不准确,可能会影响ID的生成;
- 单点故障:默认情况下,雪花算法的ID生成器是单点的,如果ID生成器出现故障,可能会影响整个系统的可用性。可以通过集群部署来解决这个问题;
- ID泄露:由于生成的ID是有序的,可能会暴露一些系统内部的信息,例如生成ID的时间和机器编号。对于需要高度保密的应用场景,这可能是一个安全风险。
总的来说
- 自增ID:适用于单个数据库实例或单表的情况,适用于低并发、简单应用;
- UUID:适用于需要全局唯一且对安全性要求较高的分布式系统,如金融交易系统中的订单号;
- 雪花算法:适用于需要全局唯一且对性能和存储有较高要求的分布式系统,尤其是高并发场景。如:大型电商平台中的订单号、社交网络中的用户ID。
详细聊聊 UUID
UUID 中文意思就是“全局唯一标识符”,它的目标是在同一时空中的所有机器都是唯一的。UUID 是一种128位的数字,通常为32个十六进制数字,分为五组表示。
- 优点:UUID的性能比较高,不依赖网络,本地就可以生成,使用起来也比较简单;
- 缺点:长度过长、没有任何含义;
- 不自增有好处有坏处,
- 好处是没有可溯性,适用于安全性要求较高的应用;
- 坏处是新插入的值可能会插入到叶子节点的中间位置。这可能导致B+树平衡操作频繁进行,从而增加了写入的开销。树的平衡操作涉及到数据的重新排序和移动,这还会影响到查询的性能。
标准的UUID:43c20451-f3d5-4829-99aa-4ceca2a32d6d(8-4-4-4-12)。
UUID 在具体实现上有多个版本,java中的java.util.UUID生成的UUID是V3和V4。以下是各个版本的实现:
v1. 基于时间戳的UUID
基于时间戳、随机数、MAC地址,适用于需要时间顺序的场景。
由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,使用MAC地址会带来安全性问题。(mac地址就是网卡上的唯一标识,通过获取到一个MAC地址生成的大量UUID,可以被反向解析出MAC地址,进而获取设备的物理位置或用户身份信息,遭受网络攻击。)
v2. DCE 安全版本
基于时间戳、MAC地址和POSIX UID/GID,较少使用。
相较于v1基于时间戳UUID算法相同,但是会把时间戳的前4位换为POSIX的UID或GID。这个版本的UUID在实际上较少用到。
v3. 基于命名空间的UUID
基于命名空间和名称的MD5哈希,适用于需要根据特定名称生成唯一标识的场景。格式:md5(namespace + name)
名称和命名空间的组合确保了生成的UUID的唯一性。
v4. 基于随机数的UUID
完全基于随机数,最常用的版本,适用于需要高度保密性的场景。
生成的UUID是完全随机的,适用于需要高度保密性的场景。但是因为是基于随机数的,所以并不适合数据量特别大的场景。
v5. 基于名称空间的UUID
基于命名空间和名称的SHA-1哈希,适用于需要更高安全性的场景。格式:sha1(namespace + name)
与v3类似,只是散列值计算使用SHA-1哈希算法,生成的UUID更加安全。
详细聊聊 雪花算法
雪花算法(Snowflake Algorithm)是由Twitter开发的一种分布式ID生成算法,旨在生成全局唯一且递增的ID。该算法通过将64位的ID划分为多个部分来实现这一目标,每个部分都有特定的含义和作用。
雪花算法的结构大致如下:
- 符号位(1位):固定为0,表示这是一个正数。
- 时间戳(41位):表示毫秒级的时间戳,从某个起始时间(例如2022-01-01 00:00:00)开始计算。41位的时间戳可以表示大约69年的时间范围。
- 数据中心标识(10位):用于标识不同的数据中心,最多可以有1024个数据中心。
- 机器标识(10位):用于标识同一数据中心内的不同机器,最多可以有1024台机器。
- 序列号(12位):用于在同一毫秒内生成多个ID时,确保ID的唯一性。最多可以有4096个序列号。
基于以上结构,雪花算法在唯一性保证方面就有很多优势:
● 首先,时间戳基于最高位,保证新生成的id比旧的id大;
● 其次,引入了数据中心标识和机器标识,该标识都可以手动配置,帮助业务来保证不同的数据中心和机器能生存不同的id;
● 还有就是引入了序列号,用来解决同一毫秒内多次生成ID的问题(每次生成id时序列号都会自增,因此不同id在序列号上有区别);
所以,基于时间戳+数据中心标识+机器标识+序列号,保证了不同进程中主键的不重复,在相同进程中主键的有序性。
但是在实际使用中会存在时钟回拨问题,即 雪花算法使用时间戳作为生成id的一部分,如果系统时钟回拨(即时间倒退),可能会导致生成的id不递增。 为了处理这种情况,雪花算法通常会抛出异常或等待时钟恢复到正常状态;
- 美团leaf引入了zookeeper来解决时钟回拨问题,其大致思路为“每个Leaf运行时定时向 zk 上报时间戳,每次 leaf 服务启动后,先校验本地时间与上次发 id 的时间,再校验与 zk 上所有节点的平均时间戳。如果任何一个阶段有异常,那么就会启动失败报警”
- 百度的UidGenerator中有两种UidGenerator,
- 其中DefautlUidGenerator使用了System.currentTimeMillis()获取时间与上一次时间比较,当发生时钟回拨时,抛出异常。
- 而CachedUidGenerator使用是放弃了对机器的时间戳的强依赖,而是改用AtomicLong的incrementAndGet()来获取下一次时间,从而脱离了对服务器时间的依赖。
相关文章:
如何选择合适的主键id?
目录标题 MySQL主键一定是自增的吗?自增id、uuid、雪花算法 谁更合适?详细聊聊 UUID详细聊聊 雪花算法 在数据库设计中,选择合适的主键对于数据表的性能和数据完整性都非常重要。接下来,让我们探讨一下自增id、uuid和雪花算法&…...
OpenMP出现Stack Overflow及其疑问
今天对着《OpenMP核心技术指南》练习OpenMP,其中一个案例: #include <stdio.h> #include <math.h> #include <omp.h>#define ITER 100000000void main() {int i;double A[ITER];for (i 0; i < ITER; i)A[i] 2.0 * i;#pragma omp parallel{/…...
vscode查找函数调用
在 VS Code 中,要查找 C 语言函数的调用列表,有以下几种方法可以使用,具体取决于项目的规模和你的需求: 方法 1: 使用全局查找功能 步骤: 打开全局查找: 按 CtrlShiftF (Windows/Linux) 或 CmdShiftF (Ma…...
网络安全-网络安全审计
网络安全审计是为了确保网络系统的安全性和完整性,防范潜在的网络攻击和数据泄露风险。 审计步骤: 1.确定审计目标:明确审计的目的和范围,例如审计网络设备、服务器、应用程序或数据库等。 2.收集信息:收集审计范围…...
刷LeetCode hot100--1.哈希表
哈希表--查找一个元素在不在数组/map/set中 目前用到的数据结构: std::unordered_set哈希表无序否否O(1)O(1) std::unordered_map哈希表key无序key不可重复key不可修改O(1)O(1) 1. 两数之和 - 力扣(LeetCode) 30min 几个问题 1.原来想…...
鸿蒙生态崛起的机遇有什么
鸿蒙生态系统的崛起为各个领域带来了多个机遇,主要体现在以下几个方面: 智能设备的互联互通:鸿蒙系统旨在实现不同设备之间的无缝连接,为物联网(IoT)设备的发展提供了良好的基础。这将推动智能家居、智慧城…...
写入json和读取json文件
/// <summary> ///写入文件 /// </summary> /// <param name"Stns"></param> /// <returns></returns> public ActionResult WriteJsonFile(string Stns) { strin…...
【Java基础入门篇】前言
Java基础入门篇 本系列内容主要针对Java基础知识,总共包含四大部分内容: 变量、数据类型和运算符控制语句和递归算法面向对象和JVM底层分析数组和排序 学习需要具备: IDEA编译器 JDK1.8版本 写在前面 在Java入门的最开始,我们需…...
LangChain——管道提示词 缓存
管道提示词 管道提示词可以将多个提示组合在一起。当我们想要使用部分提示时,这会很有用。这里可以通过PipelinePrompt来完成。 PipelinePrompt由两部分组成: 最终提示:返回的最终提示;管道提示:元组列表,…...
LangGPT社区创始人云中江树:用热爱与坚持点燃实战营课堂
书生大模型实战营第 4 期正在火热进行中,在这里,我们见证了众多同学的成长与进步。今天,让我们一起走进第 4 期导师、结构化提示词 LangGPT 社区创始人云中江树的故事。他的故事不仅是对知识改变命运的生动诠释,更是一段关于热爱与…...
Admin.NET框架使用宝塔面板部署步骤
文章目录 Admin.NET框架使用宝塔面板部署步骤🎁框架介绍部署步骤1.Centos7 部署宝塔面板2.部署Admin.NET后端3.部署前端Web4.访问前端页面 Admin.NET框架使用宝塔面板部署步骤 🎁框架介绍 Admin.NET 是基于 .NET6 (Furion/SqlSugar) 实现的通用权限开发…...
18:(标准库)DMA二:DMA+串口收发数据
DMA串口收发数据 1、DMA串口发送数据2、DMA中断串口接收定长数据包3、串口空闲中断DMA接收不定长数据包4、串口空闲中断DMA接收不定长数据包DMA发送数据包 1、DMA串口发送数据 当串口的波特率大于115200时,可以通过DMA1进行数据搬运,以防止数据的丢失。如…...
Unity 导出 xcode 工程 并给 Info.plist 文件添加字段
Unity 导出 xcode 工程 并给 Info.plist 文件添加字段 在 Editor 文件夹下新建 xxx.cs 脚本 实现静态方法 [PostProcessBuild]public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject){// Unity 导出 Xcode 工程自动调用这个方法 }例子 一 us…...
打造高质量技术文档的关键要素(结合MATLAB)
在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它不仅是知识传承的载体,也是团队协作的桥梁,更是产品成功的幕后英雄。打造出色的技术文档并非易事,以下将从多个方向探讨如何做到这一点。 文章目录 方向一:…...
C语言-数组
数组的创建 数组结构式 数组类型 数组名称 数组大小 内容 列如 char Arr[3]{1,2,3} int Arr[3]{1,2,3} 注意:在C99之前,【】中需要一个常量才可以 数组的初始化 初始化就是给它赋值,初始化分为完全初始化和非完全初始化 完全初始化…...
hhdb数据库介绍(10-19)
监控 智能物理拓扑 物理拓扑图主要以服务器为视角展示集群组件与服务器的所属关系,同时可查看服务器资源的使用情况以及各集群组件服务运行状态。使用前需保证为集群服务器配置了可用的SSH连接信息,否则只能查看当前服务器与集群组件的所属关系&#x…...
AI开发:生成式对抗网络入门 模型训练和图像生成 -Python 机器学习
阶段1:GAN是个啥? 生成式对抗网络(Generative Adversarial Networks, GAN),名字听着就有点“对抗”的意思,没错!它其实是两个神经网络互相斗智斗勇的游戏: 生成器(Gene…...
68 mysql 的 临键锁
前言 我们这里来说的就是 我们在 mysql 这边常见的 一种锁, 行临键锁 虽然 在平时我们用到的不是很多, 我们这里 主要是 讲一下 它的主要的触发的场景 行临键锁 等价于 行锁 间隙锁, 行间隙锁是一个 左开右开的区间, 行临键锁 是一个左开右闭的区间 但是 它 和 行锁的差异…...
(十一)Python3 接口自动化测试,Pytest-Allure报告的使用
(十一)Python3 接口自动化测试,Pytest-Allure报告的使用 1、安装和使用 1、安装pytest和allure-pytest插件: pip install pytest allure-pytest 2、在你的pytest测试用例中使用allure装饰器或者上下文管理器来生成报告。 例如,你可以使用@allure.feature装饰器来标记特性…...
【Rust 学习笔记】Rust 基础数据类型介绍(一)
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 博客内容主要围绕: 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 Rust 基础数据类型介绍(一)一、固定宽…...
深入理解Oracle DB的锁和闩
1. 引言 本文深入介绍Oracle DB的锁和闩。 2. Oracle DB 锁的基本概念 2.1 定义与作用 锁是 Oracle 数据库用于控制并发访问的一种机制。它用于防止多个事务同时对同一数据进行不一致的操作,确保数据的完整性和一致性。例如,当一个事务正在更新一行数…...
mcu上一种利用伪随机数防止mac地址冲突的方法
一 前言 前段时间开发的一个带tcp功能的项目,出现了mac地址冲突的问题,领导让随机生成一个mac地址,因此研究了下随机数。 二 预研 1.硬随机数 硬随机数又叫真随机数,英文名称”true random number generator“,即通过硬件随机数…...
C# 索引器(Indexer)
文章目录 前言一、索引器的语法规则二、索引器的用途及与属性的对比三、索引器的重载 前言 在 C# 编程中,索引器(Indexer)是一项极具特色且实用的语言特性,它赋予了对象一种独特的访问方式,使得对象能够如同数组一般&a…...
【大数据学习 | Spark-SQL】定义UDF和DUAF,UDTF函数
1. UDF函数(用户自定义函数) 一般指的是用户自己定义的单行函数。一进一出,函数接受的是一行中的一个或者多个字段值,返回一个值。比如MySQL中的,日期相关的dateDiff函数,字符串相关的substring函数。 先…...
Springboot集成通义大模型
1.先到阿里云平台开头阿里云白炼账号,创建apiKey 2. 引入maven依赖 <dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>2.8.3</version></dependency><!-- htt…...
Xilinx PCIe高速接口入门实战(一)
引言:本文对Xilinx 7 Series Intergrated Block for PCI Express PCIe硬核IP进行简要介绍,主要包括7系列FPGA PCIe硬核资源支持、三IP硬核差异、PCIe硬核资源利用等相关内容。 1. 概述 1.1 7系列FPGA PCIe硬件资源支持 7系列FPGA对PCIe接口最大支持如…...
区块链游戏的新观察:自治世界能否成为未来链游的突破口?
区块链游戏(链游)作为加密领域的创新方向,一直被寄予厚望。然而,尽管各类链游层出不穷,大多只是靠代币激励一时爆火,缺乏持久吸引力。这种现象让人对链游未来的发展充满疑虑:是否有一种全新的设…...
Linq中的投影运算 (C#):Select、SelectMany、Zip
投影是指将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性。 通过使用投影,您可以构造从每个对象生成的新类型。 可以投影属性,并对该属性执行数学函数。 还可以在不更改原始对象的情况下投影该对象。 1、Select 下面的…...
GPU 服务器厂家:怎样铸就卓越 AI 算力?
文章来源于百家号:GPU服务器厂家 今天咱来聊聊 GPU 服务器厂家那些事儿,而这其中衡量 AI 算力的因素可是关键所在哦。 先讲讲计算速度这一块。咱都知道 AI 那复杂的活儿,像训练超厉害的图像识别模型,得处理海量图像数据&#x…...
数据结构与算法——N叉树(自学笔记)
本文参考 N 叉树 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 遍历 前序遍历:A->B->C->E->F->D->G后序遍历:B->E->F->C->G->D->A层序遍历:A->B->C->D->…...
浏览器的数据六种存储方法比较 :LocalStorage vs. IndexedDB vs. Cookies vs. OPFS vs. WASM-SQLite
在构建该 Web 应用程序,并且希望将数据存储在用户浏览器中。也许您只需要存储一些小标志,或者甚至需要一个成熟的数据库。 我们构建的 Web 应用程序类型发生了显着变化。在网络发展的早期,我们提供静态 html 文件。然后我们提供动态渲染的 h…...
Rust个人认为将抢占C和C++市场,逐渐成为主流的开发语言
本人使用C开发8年、C#开发15年、中间使用JAVA开发过项目、后期在学习过程中发现了Rust语言说它是最安全的语言,能够解决C、C的痛点、于是抽出一部分时间网上买书,看网上资料进行学习,这一学习起来发现和其它语言比较起来,在编码的…...
electron-updater软件自动检测更新 +无服务器本地测试
大家好,我是小黄。 今天分享一下如何0基础实现electron自动检测更新功能。 一. 安装 electron-updater 实现自动更新 安装依赖 electron-updater npm install electron-updater 二. 修改package.josn "publish": {"provider": "generi…...
Flink在Linux系统上的安装与入门
一、Flink的引入 这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有Hadoop、Storm,以及后来的Spark,他们都有着各自专注的应用场景。Spark 掀开了内存计算的先河,也以内存为赌注,赢得了内存计…...
鸿蒙面试---都用过哪些装饰器
必答的 State装饰器:组件内状态 State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就可以触发其直接绑定UI组件的刷新。当状态改变时,UI会发生对应的渲染改变。Prop装饰器:父子单向同步Prop装饰的变…...
微信小游戏/抖音小游戏SDK接入踩坑记录
文章目录 前言问题记录1、用是否存在 wx 这个 API 来判断是微小平台还是抖小平台不生效2、微小支付的参数如何获取?3、iOS 平台不支持虚拟支付怎么办?微小 iOS 端支付时序图:抖小 iOS 端支付:4、展示广告时多次回调 onClose5、在使用单例时 this 引起的 bug6、使用 fetch 或…...
uniapp配置全局消息提醒
1.H5使用根标签插入dom的方式实现。 2.app端使用plus.nativeObj.View的方式绘制实现 H5端app端 H5端 创建组件orderAlert.vue <template><div class"view"><div class"content" v-if"visible"><div class"message&q…...
Docker学习
🎉Docker 简介和安装 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要, 而普通虚拟机则是一个完整而庞大的系统,包含各…...
【Electron学习笔记(三)】Electron的主进程和渲染进程
Electron的主进程和渲染进程 Electron的主进程和渲染进程前言正文1、主进程2、渲染进程3、Preload 脚本3.1 在项目目录下创建 preload.js 文件3.2 在 main.js 文件下创建路径变量并将 preload.js 定义为桥梁3.3 在 preload.js 文件下使用 electron 提供的contextBridge 模块3.4…...
人工智能的微积分基础
目录 编辑 引言 微积分的基本概念 1. 导数 2. 积分 3. 微分方程 微积分在人工智能中的应用 1. 机器学习中的优化 2. 反向传播算法 3. 概率与统计 4. 控制理论 5. 自然语言处理中的梯度 6. 计算机视觉中的积分 7. 优化算法中的微积分 8. 微分几何在深度学习中的…...
关于BeanUtils.copyProperties是否能正常复制字段【详细版】
话不多说!先总结: 1、字段相同,类型不同(不复制,也不报错) 2、子类父类 (1)子类传给父类(可以正常复制) (2)父类传给子类(可以正常复制) 3、子类父类&#x…...
oracle将select作为字段查询
在Oracle中,如果你想将一个SELECT语句作为字段的值,你可以使用子查询或者使用WITH子句(也称为公用表表达式CTE)。以下是两种方法的示例: 方法1:使用子查询 语法如下: SELECTcolumn1,(SELECT …...
FFmpeg 简介与编译
1. ffmpeg 简介: FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移…...
qt QLinearGradient详解
1、概述 QLinearGradient是Qt框架中QGradient的一个子类,用于创建线性渐变效果。线性渐变是一种颜色沿着一条直线平滑过渡到另一种颜色的效果。QLinearGradient允许你定义渐变的起点和终点,以及在这些点之间的颜色变化。你可以使用它来为图形、背景、边…...
点击A组件跳转到B页面的tab的某一列
1、使用vuex存储点击的数据; 点击A组件里面的button按钮: <div><button click"banli(first)">已办理</button><button click"banli(second)">未办理</button><button click"banli(third)&quo…...
图像小波去噪与总变分去噪详解与Python实现
目录 图像小波去噪与总变分去噪详解与实现1. 基础概念1.1 噪声类型及去噪问题定义1.2 小波去噪算法基础1.3 总变分去噪算法基础2. 小波去噪算法2.1 理论介绍2.2 Python实现及代码详解2.3 案例分析3. 总变分去噪算法3.1 理论介绍3.2 Python实现及代码详解3.3 案例分析4. 两种算法…...
mvn-mac操作小记
1.安装brew 如果报错,Warning: /opt/homebrew/bin is not in your PATH. vim ~/.zshrc,最后一行追加 export PATH“/opt/homebrew/bin:$PATH” source ~/.zshrc 2.安装brew install maven mvn -version查看路径 Maven home: /opt/homebrew/Cellar/mav…...
【娱乐项目】基于批处理脚本与JavaScript渲染视频列表的Web页面
Demo介绍 一个简单的视频播放器应用,其中包含了视频列表和一个视频播放区域。用户可以通过点击视频列表中的项来选择并播放相应的视频,播放器会自动播放每个视频并在播放完毕后切换到下一个视频。本项目旨在通过自动化脚本和动态网页渲染,帮助…...
Faster R-CNN (目标检测)
Faster R-CNN (Faster Region-based Convolutional Neural Networks) Faster R-CNN 是一种高效的目标检测模型,它是在 R-CNN 系列(包括 R-CNN 和 Fast R-CNN)的基础上发展而来的,能够实现对图像中多个对象的检测。Faster R-CNN 引…...
Diffusion中的Unet (DIMP)
针对UNet2DConditionModel模型 查看Unet的源码,得知Unet的down,mid,up blocks的类型分别是: down_block_types: Tuple[str] ("CrossAttnDownBlock2D","CrossAttnDownBlock2D","CrossAttnDownBlock2D","DownBlock2…...