《MySQL 表结构设计基础》
一、引言
MySQL 表结构设计是数据库开发中的重要环节,合理的设计不仅能提高数据库性能,还能使数据更易于维护和管理。本文将详细介绍 MySQL 表结构设计的基础要点。
在数据库开发中,MySQL 表结构设计的重要性不言而喻。一个良好的表结构设计可以为后续的数据库操作和应用开发奠定坚实的基础。
首先,合理的表结构设计能够显著提高数据库性能。通过选择合适的数据类型、建立有效的索引以及优化表之间的关联关系,可以减少数据存储的空间占用,提高数据的读写速度,从而提升整个数据库系统的响应性能。
其次,易于维护和管理也是表结构设计的重要目标之一。一个清晰、规范的表结构可以使开发人员更容易理解数据库的结构和数据关系,便于进行数据的插入、更新、删除和查询操作。同时,良好的表结构设计还可以降低数据冗余,提高数据的一致性和完整性,减少数据维护的工作量。
总之,MySQL 表结构设计是数据库开发中不可忽视的关键环节,需要开发人员充分考虑各种因素,精心设计出高效、可靠的表结构。
二、需求分析
在设计表结构之前,需进行需求分析,包括确定数据实体、分析属性和关系等。需求分析是设计合理表结构的关键步骤,它能够帮助我们更好地理解系统的业务需求、数据需求和性能需求。
一、数据实体识别
确定系统中需要存储哪些数据实体是需求分析的首要任务。常见的数据实体包括表、视图、索引等。以电商系统为例,可能的数据实体有用户表、商品表、订单表、订单项表、商品分类表等。而在线考试系统中,数据实体则包括用户、考试、试题、答卷和成绩等。对于在线图书商店,数据实体有用户、书籍、订单、订单项等。
二、属性分析
分析每个数据实体的属性是需求分析的重要内容。属性包括字段名、数据类型、长度、约束等。例如,用户表可能包含用户 ID、用户名、密码、电子邮件、地址等属性。其中,用户 ID 可以设置为整数类型,作为主键且自增;用户名和密码可以设置为字符串类型,长度根据实际需求确定;电子邮件可以设置为唯一约束,确保每个用户的电子邮件地址唯一。书籍表可能包含书籍 ID、书名、作者、ISBN、价格、库存数量等属性。书籍 ID 同样可以设置为整数类型,作为主键且自增;书名、作者、ISBN 可以设置为字符串类型;价格可以设置为小数类型;库存数量可以设置为整数类型。
三、关系分析
确定数据实体之间的关系对于设计合理的表结构至关重要。常见的关系有一对一、一对多、多对多等。在电商系统中,用户表和订单表之间是一对多的关系,一个用户可以有多个订单;商品表和订单表之间也是一对多的关系,一个商品可以出现在多个订单中;商品表和商品分类表之间是一对多的关系,一个商品分类可以包含多个商品;订单表和订单项表之间是一对多的关系,一个订单可以包含多个订单项;商品表和订单项表之间是多对多的关系,一个商品可以出现在多个订单项中,一个订单项也可以包含多个商品。在在线考试系统中,用户实体与考试实体之间是多对多的关系,一个用户可以参加多个考试,一个考试也可以有多个用户参加;考试实体与试题实体之间是一对多的关系,一个考试可以包含多个试题;用户实体与答卷实体之间是一对多的关系,一个用户可以有多个答卷;试题实体与答卷实体之间是一对多的关系,一个试题可以有多个答卷;用户实体与成绩实体之间是一对多的关系,一个用户可以有多个成绩;考试实体与成绩实体之间是一对多的关系,一个考试可以有多个成绩。在在线图书商店中,用户实体与订单实体之间是一对多的关系,一个用户可以有多个订单;订单实体与订单项实体之间是一对多的关系,一个订单可以包含多个订单项;书籍实体与订单项实体之间是一对多的关系,一本书可以出现在多个订单项中。
三、设计原则
- 规范化
-
- 第一范式确保列不可再分。在设计表结构时,应仔细分析每个字段,确保其不能再被拆分为更小的部分。例如,如果有一个 “地址” 字段,不能将其简单地定义为一个字符串,而应该拆分为 “省份”“城市”“区县” 等具体的字段,以满足第一范式的要求。
-
- 第二范式非主键列完全依赖主键列。这意味着非主键列的值必须完全由主键列决定。例如,在一个订单表中,订单号是主键,订单金额、订单状态等非主键列的值应该完全由订单号决定,而不能依赖于其他非主键列。
-
- 第三范式非主键列之间不存在传递依赖关系。即非主键列之间不能通过其他非主键列间接依赖于主键列。例如,在一个学生表中,学生学号是主键,学生姓名、学生年龄等非主键列直接依赖于学生学号。如果有一个 “班级名称” 字段,它不能通过 “学生所在班级编号” 这个非主键列间接依赖于学生学号,否则就违反了第三范式。
- 字段设计
-
- 选择合适数据类型,如 INT、VARCHAR、DATE 等。根据字段的实际用途选择合适的数据类型。例如,存储整数可以选择 INT 类型;存储字符串可以选择 VARCHAR 类型;存储日期可以选择 DATE 类型。
-
- 设置合适字段长度,避免过长。合理设置字段长度可以节省存储空间,提高查询性能。例如,如果一个字段存储的字符串长度不会超过 20 个字符,那么可以将其长度设置为 20,而不是设置一个很大的长度。
-
- 使用默认值简化插入操作。为一些字段设置默认值可以在插入数据时简化操作。例如,对于一个表示用户状态的字段,可以设置默认值为 “正常”,这样在插入用户数据时,如果没有指定用户状态,就会自动使用默认值。
-
- 避免使用 NULL 值。NULL 值在查询和计算中可能会带来麻烦,尽量使用 NOT NULL 约束和默认值来替代。例如,在一个表示用户年龄的字段中,如果不知道用户年龄,可以设置一个默认值为 -1,而不是使用 NULL 值。
- 索引设计
-
- 选择合适索引类型,如 B-Tree、哈希索引。根据查询需求和数据特点选择合适的索引类型。B-Tree 索引适用于范围查询和排序,哈希索引适用于等值查询。
-
- 避免过度索引。过多的索引会占用额外的存储空间并降低写操作的性能。在设计索引时要权衡利弊,选择必要的索引。
-
- 使用复合索引提高查询性能。当查询条件涉及多个字段时,可以考虑使用复合索引。但需要注意复合索引的列顺序和查询条件的匹配度。例如,如果经常根据字段 A 和字段 B 进行查询,可以创建一个复合索引(A,B)。
- 主键设计
-
- 使用自增主键确保唯一性。自增主键可以确保数据的唯一性,并简化插入操作。但需要注意自增主键的溢出问题。例如,在一个用户表中,可以使用自增的整数作为主键。
-
- 避免使用业务字段作为主键。业务字段的值可能会发生变化,如果将其作为主键可能会导致数据更新和删除操作的复杂性增加。例如,在一个订单表中,订单号可以作为业务字段,但不适合作为主键,可以使用自增的整数作为主键。
- 关联设计
-
- 使用外键约束确保引用完整性。外键约束可以确保数据的引用完整性,防止无效数据的产生。但需要注意外键约束对性能的影响。例如,在一个订单表和一个用户表之间,可以使用外键约束确保订单表中的用户 ID 引用用户表中的有效用户。
-
- 优化关联查询性能。在设计关联查询时,要注意关联条件的匹配度和查询结果的返回量。可以使用 JOIN 操作来优化关联查询的性能。例如,在一个多表关联查询中,可以根据查询需求选择合适的 JOIN 类型,并确保关联条件的准确性。
四、数值类型设计
- 数据类型
-
- MySQL 支持多种整型类型,如 INT、SMALLINT、BIGINT 等。在实际应用中,需要根据具体的业务需求选择合适的整型类型。例如,对于存储数量较少的数据,可以选择 SMALLINT;对于一般的业务数据,可以选择 INT;而对于数据量较大的情况,则可以考虑使用 BIGINT。
-
- 不推荐使用浮点类型 Float 和 Double。这是因为浮点类型在存储和计算过程中可能会出现精度问题,导致结果不准确。例如,在进行金融计算时,使用浮点类型可能会导致金额计算错误。
- 业务中金额字段的设计
-
- 不推荐使用浮点类型,可用 DECIMAL 或 BIG INT 存储金额字段。DECIMAL 类型可以精确地存储小数,适用于对精度要求较高的金额字段。而 BIG INT 类型可以以分单位存储金额,通过将金额转换为整数进行存储,可以避免浮点类型的精度问题。
-
- 推荐用分单位存储金额,采用 BIG INT 类型更高效。以分单位存储金额可以避免小数的精度问题,同时 BIG INT 类型在存储和计算方面具有较高的效率。例如,在电商系统中,商品价格可以以分单位存储在数据库中,在显示给用户时再转换为元。
-
- 交由前端处理小数点数据。将金额以整数形式存储在数据库中,由前端负责将金额转换为用户可读的形式,包括添加小数点和货币符号等。这样可以减轻数据库的负担,提高系统的性能。
- 自增整型主键列和字符串主键列设计
-
- 根据业务规模选择 INT 或 BIGINT 作为自增主键。如果业务数据量较小,可以选择 INT 类型作为自增主键;如果业务数据量较大,为了避免主键溢出的问题,应该选择 BIGINT 类型。例如,在一个小型的博客系统中,文章数量可能不会很多,可以使用 INT 类型作为文章表的主键;而在一个大型的电商系统中,订单数量可能非常庞大,就需要使用 BIGINT 类型作为订单表的主键。
-
- 注意自增值不持久化和可能的回溯现象。在 MySQL 8.0 版本前,自增主键的值可能会因为数据库重启而发生回溯现象。为了避免这种情况,可以考虑升级到 MySQL 8.0 版本,或者在设计表结构时避免在核心业务表中使用自增主键。如果无法升级数据库版本,可以使用字符串类型作为主键,以提高系统的扩展性和稳定性。
-
- 为更好的扩展性,可考虑字符串类型主键。字符串类型主键具有更好的扩展性,可以在分布式架构中更好地适应数据的增长和变化。例如,在一个分布式的日志系统中,可以使用 UUID 作为日志表的主键,这样可以避免在多个节点之间出现主键冲突的问题。
五、字符串类型设计
1. 基础知识
MySQL 字符串类型有 CHAR、VARCHAR、BINARY 等。其中 VARCHAR (N) 保存固定长度字符,这里的 N 表示字符数。
CHAR 是固定长度的字符串类型,对于 CHAR (M) 列,如果其值的长度小于 M 个字符,那么在存入时会用空格将长度补齐到 M,并且在检索这些值时,其尾部的空格会被移除。而 VARCHAR 是可变长度的字符串类型,其尾部空格在存储和检索时都会被保留。BINARY 类型用于存储二进制串,与非二进制串类型在字节和字符语义方面有所不同。
2. 场景应用
在实际应用中,我们需要根据业务特点选择合适的字符串类型。如果字符串列的最大长度比平均长度要大很多、字符串列的更新很少且使用了复杂的字符集如 UTF-8,或者列的长度为不定值时,适合使用 VARCHAR。例如,存储用户的评论内容,由于用户评论长度不一,使用 VARCHAR 更加节约空间,并且不会因为更新评论而产生过多的内存碎片问题。
如果列的长度为定值,比如存储 MD5 密文数据,适合使用 CHAR。因为 CHAR 类型长度固定,无需额外的内存空间去存储长度信息,并且在处理固定长度的数据时,读取效率较高。
对于需要存储二进制数据流时,可以选择二进制类型,如 TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。它们从小到大依次用于存储不同大小的二进制数据,与文本字符串类型类似,占用空间与范围根据实际存储的数据大小而定。
ENUM 和 SET 类型也属于字符串类型的一种特殊情况。ENUM 是一个字符串对象,是一个枚举类型,列定义里有一个合法字符串值的列表,MySQL 在存储枚举值时非常紧凑,会根据列表值的数量压缩到一个或者两个字节中。例如 sex enum (“男”,“女”) 字段的值只能是男或女。SET 是集合类型,多选类型,例如一个人的爱好,最多可以设置 64 个值。
总之,在选择字符串类型时,需要充分考虑业务需求、数据特点以及性能要求,选择最合适的字符串类型,以提高数据库的性能和数据的管理效率。
六、日期和时间类型设计
在 MySQL 表结构设计中,选择合适的日期和时间类型至关重要,这不仅影响数据存储的效率,还关系到数据的可读性和查询性能。MySQL 提供了多种日期和时间类型供我们选择,如 DATE、DATETIME、TIMESTAMP 等。
1. 各类型特点及选择依据
- DATE:用于存储日期,格式为 'YYYY-MM-DD'。如果需求只关心日期而不关心具体时间,那么 DATE 是个不错的选择。例如存储生日信息就可以使用 DATE 类型。
- TIME:专门用于存储时间,格式是 'HH:MM:SS'。如果业务场景只需要记录事件发生的具体时间而不关心日期,那么 TIME 类型是合适的。
- DATETIME:可以存储日期和时间,格式是 'YYYY-MM-DD HH:MM:SS'。适用于需要同时记录日期和时间,且不关心时区的情况。例如日志记录、交易时间等场景。
- TIMESTAMP:也可以存储日期和时间,格式同样是 'YYYY-MM-DD HH:MM:SS'。它在存储和显示时会考虑时区的影响,并且会自动更新为当前时间戳。适合处理涉及到不同时区的业务场景,如记录经常变化的更新 / 创建 / 发布 / 日志时间 / 购买时间 / 登录时间 / 注册时间等,特别是在海外业务或可能拓展到海外的业务中。
2. 性能和存储效率考量
- 存储空间方面:一般来说,DATE 类型占用的空间最小,TIMESTAMP 类型占用的空间较大。在 MySQL 5.6.4 之前,DateTime 和 Timestamp 的存储空间是固定的,分别为 8 字节和 4 字节。但从 MySQL 5.6.4 开始,它们的存储空间会根据毫秒精度的不同而变化,DateTime 的范围是 5 - 8 字节,Timestamp 的范围是 4 - 7 字节。
- 索引性能方面:如果表需要频繁进行时间范围的查询,通常 TIMESTAMP 类型在时间范围查询上的性能较好,因为它会考虑到时区的因素。
- 查询性能方面:不同的时间类型在查询性能上也有所差异。例如,在某些情况下,使用 UNIX_TIMESTAMP 内置函数查询 TIMESTAMP 类型的效率很高,几乎和 INT 相当;而直接和日期比较效率低。对于 DATETIME 类型,使用 UNIX_TIMESTAMP 内置函数查询效率很低,不建议;直接和日期比较,效率还行。在 InnoDB 存储引擎下,通过时间范围查找,性能 bigint > datetime > timestamp;通过时间分组,性能 timestamp > datetime,但相差不大;通过时间排序,性能 bigint > timestamp > datetime。
3. 时区问题
- DATETIME 类型在存储和检索时是不考虑时区的。这意味着如果应用涉及到多个时区,需要在应用层面处理时区的转换,以确保时间的一致性。
- TIMESTAMP 类型在存储和检索时会考虑时区。这使得它更适合处理涉及到不同时区的业务场景,但要注意时区处理可能会导致一些陷阱,需要仔细考虑。
综上所述,在选择日期和时间类型时,我们应根据业务需求和性能考虑来选择合适的时间类型。在保证功能满足的前提下,兼顾性能和存储空间的平衡。
七、表结构设计实例
以电商系统为例,介绍用户表、商品表、订单表等的设计过程。
在电商系统中,用户表、商品表和订单表是核心的数据表,它们之间的关系复杂且紧密。下面分别介绍这几个表的设计过程。
用户表设计
用户表通常包含用户的基本信息,如用户 ID、用户名、密码、电子邮件、地址等属性。根据设计原则,用户 ID 可以设置为自增的 BIGINT 类型,确保唯一性。用户名可以设置为 VARCHAR 类型,长度根据实际需求确定,同时可以设置唯一约束,确保用户名的唯一性。密码可以设置为 CHAR (32) 类型,存储经过加密后的密码。电子邮件可以设置为 VARCHAR 类型,并设置唯一约束,确保每个用户的电子邮件地址唯一。地址可以拆分为省份、城市、区县等具体的字段,分别设置为 VARCHAR 类型,满足第一范式的要求。
例如,可以参考以下代码创建用户表:
CREATE TABLE users (
user_id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password CHAR(32) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
province VARCHAR(50),
city VARCHAR(50),
district VARCHAR(50)
);
商品表设计
商品表需要存储商品的详细信息,如商品 ID、商品名称、价格、库存数量、分类 ID、品牌 ID 等属性。商品 ID 可以设置为自增的 BIGINT 类型,作为主键。商品名称设置为 VARCHAR 类型,长度根据实际需求确定。价格可以设置为 DECIMAL 类型,以分单位存储金额,提高精度。库存数量设置为 INT 类型。分类 ID 和品牌 ID 分别设置为 BIGINT 类型,用于与商品分类表和品牌表建立外键约束。
例如,可以参考以下代码创建商品表:
CREATE TABLE goods (
goods_id BIGINT PRIMARY KEY AUTO_INCREMENT,
goods_name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
stock INT NOT NULL,
category_id BIGINT NOT NULL,
brand_id BIGINT NOT NULL,
FOREIGN KEY (category_id) REFERENCES goods_category(id),
FOREIGN KEY (brand_id) REFERENCES goods_brand(id)
);
订单表设计
订单表记录用户的购买行为,包含订单 ID、用户 ID、商品 ID、购买数量、订单状态、支付方式等属性。订单 ID 可以设置为自增的 BIGINT 类型,作为主键。用户 ID 设置为 BIGINT 类型,与用户表建立外键约束。商品 ID 设置为 BIGINT 类型,与商品表建立外键约束。购买数量设置为 INT 类型。订单状态可以设置为 VARCHAR 类型,存储订单的当前状态,如待付款、已发货、已完成等。支付方式可以设置为 TINYINT 类型,用数字代表不同的支付方式,如 1 代表借记卡,2 代表信用卡,3 代表微信,4 代表支付宝,5 代表现金。
例如,可以参考以下代码创建订单表:
CREATE TABLE orders (
order_id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
goods_id BIGINT NOT NULL,
quantity INT NOT NULL,
status VARCHAR(20) NOT NULL,
payment_type TINYINT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (goods_id) REFERENCES goods(goods_id)
);
通过以上设计,用户表、商品表和订单表之间建立了合理的关联关系,满足了电商系统的业务需求,同时也遵循了表结构设计的原则,提高了数据库的性能和可维护性。
八、总结
合理的 MySQL 表结构设计能提高数据库性能和可维护性,需根据业务需求和数据特点进行设计,并权衡利弊选择合适的策略。
在 MySQL 表结构设计过程中,我们从需求分析入手,确定数据实体、分析属性和关系,遵循设计原则进行规范化、字段设计、索引设计、主键设计和关联设计。对于不同的数据类型,如数值类型、字符串类型、日期和时间类型等,我们根据其特点和业务需求进行合理选择和设计。同时,通过表结构设计实例,我们以电商系统为例,展示了用户表、商品表、订单表等核心数据表的设计过程。
总之,MySQL 表结构设计需要综合考虑各种因素,不断优化和调整,以满足业务需求,提高数据库性能和可维护性。在实际应用中,我们要根据具体情况灵活运用设计原则和方法,不断积累经验,为数据库的稳定运行
相关文章:
《MySQL 表结构设计基础》
一、引言 MySQL 表结构设计是数据库开发中的重要环节,合理的设计不仅能提高数据库性能,还能使数据更易于维护和管理。本文将详细介绍 MySQL 表结构设计的基础要点。 在数据库开发中,MySQL 表结构设计的重要性不言而喻。一个良好的表结构设计…...
微信小程序 - 解决报错{“errno“:600001,“errMsg“:“request:fail errcode:-202cronet_error_code:-202error_msg:net::
前言 关于此问题网上的教程都无法解决,如果您的报错信息与我相似,即可解决。 在微信小程序开发中,详细解决小程序请求接口报错:{“errno”:600001,“errMsg”:“request:fail errcode:-202cronet_error_code:-202error_msg:net::ERR_CERT_AUTH ORITY_INVALID”},微…...
k8s 为什么需要Pod?
Pod,是 Kubernetes 项目中最小的 API 对象,更加专业的说,Pod,是 Kubernetes 项目的原子调度单位。 Pod 是 Kubernetes 里的原子调度单位。这就意味着,Kubernetes 项目的调度器,是统一按照 Pod 而非容器的资…...
react 使用状态管理调用列表接口渲染列表(包含条件查询,统一使用查询按钮,重置功能),避免重复多次调用接口的方法
react开发调用api接口一般使用useEffect来监听值的变化,通过值的变化与否来进行接口调用。 比如我们要进行一个查询接口 const [pageParams, setPage] useState({name: ,id: ,});const [dataList, setDataList] useState([]);const getList async () > {const…...
常见限流算法详细解析
常见限流算法详细解析 分布式系统中,由于接口API无法控制上游调用方的行为,因此当瞬时请求量突增时,会导致服务器占用过多资源,发生响应速度降低、超时、乃至宕机,甚至引发雪崩造成整个系统不可用。 限流,…...
第四十一天 ASP应用 HTTP.sys 漏洞 iis6文件解析漏洞和短文件漏洞 access数据库泄露漏洞
前言 随着时代的发展现在呀,这个ASp已经淡出大众的视线了 ,ASP之前的火爆程度无异于现在的PHP 大家的童年 4399 什么的网站都是这个搭建的ASP 简介 | 菜鸟教程 那大家想问为什么你妹的 这个这么火的网站搭建语言被淘汰了呢 其实多半是以为它的不开…...
LLM输出评估标准
LLM输出评估标准 LLM评估方法 响应的完整性和简洁性:确定大模型的响应是否完全解决用户查询,简洁性则评估生成响应的相关性。文本相似性指标:将生成的文本与参考文本进行比较,评估它们的相似度,并给出得分以理解大模…...
ansible学习笔记之02command模块与shell模块
目录 1、概述 2、模块介绍 2.1 command模块 2.2 shell模块 2.3 小结 3、实验 3.1 测试ls命令 3.2 测试环境变量 3.3 测试操作符">" 1、概述 本文介绍ansible的command模块与shell模块,并通过实验比对两个模块的异同。 2、模块介绍 2.1…...
Python 在同一/或不同PPT文档之间复制幻灯片
复制幻灯片可以帮助我们更高效地完成工作,节省大量的制作时间。通过复制现有的幻灯片,可以快速创建新的演示文稿,而无需重新设计板式样式等。此外,复制幻灯片还可以帮助我们保持内容的一致性,使整个PPT演示文稿看起来更…...
4. React 性能优化技巧:如何让你的应用更快
在构建大型应用时,性能优化是一个非常重要的话题。React 提供了许多优化工具,帮助我们提高应用的渲染速度和响应能力。本文将分享一些常见的 React 性能优化技巧。 4.1. 使用 React.memo 缓存组件 当组件的 props 没有变化时,React 默认不会…...
云标准:云计算标准
目录 云计算标准的定义和分类 云计算标准的内容 云计算标准的重要性 云计算标准化组织 5.云计算标准的具体实例 云计算标准是确保云计算技术、服务和应用发展的重要规范,它们对于提高云计算系统的互操作性、可靠性和安全性至关重要。以下是对云计算标准的详细解…...
Redis【2】- SDS源码分析
1 简介&基础用法 Redis 中用得最多的就是字符串,在 C 语言中其实可以直接使用 char* 字符数组来实现字符串,也有很多可以直接使用得函数。但是 Redis 并没有使用 C 语言原生的字符串,而是自己实现了一个 SDS(简单动态字符串&…...
力扣打卡8:最长上升子序列
链接:300. 最长递增子序列 - 力扣(LeetCode) 本题我开始想到的是dp,复杂度为O(n^2),这也是很经典的解法。 看到进阶解法可以O(nlogn),想到可能是要用到二分,但是,我想到的是和map排…...
记录一次老平台改造通知用户刷新页面,纯前端实现
记录一次老平台改造通知用户刷新页面,纯前端实现 方案概述背景现状问题本质 方案设计前提设计实现 其他补充写在最后的话抛出一个问题 方案概述 背景 前端构建完上线,用户还停留还在老页面,用户不知道网页重新部署了,跳转页面的时…...
ubuntu22.04 使用可以用的镜像源获取你要的镜像
默认的是不行的 不管pull啥镜像 仍然会出现这个错误 Error response form daemon:Get "https://registry-1.docker.io/v2": net/http: request canceled while waiting for connection (Client.Timeout exceeded while await) 操作方法是 如果在目录没有/etc/docker…...
Chrome扩展程序开发示例
项目文件夹内文件如下: manifest.json文件内容: {"manifest_version": 3,"name": "我的法宝","description": "我的有魔法的宝贝","version": "1.0","icons": {"…...
Linux 下使用飞鸽传书实现与Windows飞秋的通信
最近把单位的办公电脑换成Linux系统,但是其他同事们都使用飞秋2013进行局域网通信和文件传输,经过一番尝试,发现飞鸽传书For Linux 2014能够实现两者的互相通信。 飞鸽传书ForLINUXLinux版下载_飞鸽传书ForLINUX免费下载_飞鸽传书ForLINUX1.2…...
docker批量创建cloudstack虚拟主机脚本
批量创建cloudstack脚本 #!/bin/bash # 配置变量 container_prefix"cloudworker-" base_ip"192.168.1." start_ip2 #开始ip start_container2 #上同 end_container4 #结束ip 包括 network_name"my_macvlan_network" image_name"dockedahi:…...
SpringBoot项目集成MinIO
最近在学习MinIO,所以想让自己的SpringBoot项目集成MinIO,在网上查阅资料,并进行操作的过程中遇到一些问题,所以想把自己遇到的坑和完成步骤记录下来供自己和各位查阅。 一. MinIO的下载安装以及基本使用 1. 下载地址:https://d…...
【Flutter】常用样式、方法、组件(长期更新中)
一、样式设置 设置颜色透明度:color: Color(0xff4B9E32).withOpacity(0.08) 二、常用方法 数组排序:list.sort(); **升序**:(obj1, obj2) > obj1.compareTo(obj2) **降序**:(obj1, obj2) > obj2.compareTo(obj1)obj1.co…...
dbus接口方法的variant类型传参详解
python实现c++中so库调用及dbus服务开发-CSDN博客 之前写的这篇博文介绍了如何创建一个dbus服务,但是注册的接口方法的入参还是比较简单的,实际上dbus的参数类型有很多种,调用方式也有多种,我们来逐一介绍下。 其实基础数据类型,如字符串、整型、浮点型、布尔型等大多数…...
【时时三省】(NIT计算机考试)Word的使用方法
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 一、软件简介 Microsoft Word,简称Word,是微软公司开发的一款文字处理软件,广泛应用于文档编辑、排版、打印等领域。无论是撰写论文、报告、简历…...
spring技术点
引入对象 Autowired 和 Resource的区别 Autowired 和 Resource的区别 valid 参数校验 jarkata进行SpringMVC校验 常规当前进行校验的配置操作,参考文档如下进行操作。 SpringMVC校验注解不生效 List类型参数校验 由于list类型默认不能进行标注校验实现&#x…...
工业—使用Flink处理Kafka中的数据_ChangeRecord1
使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,当某设备 30 秒状态连续为 “ 预警 ” ,输出预警 信息。当前预警信息输出后,最近30...
实验日志——DETR
DETR训练日志 1. 代码来源 代码源自作者的Github: https://github.com/facebookresearch/detr?tabreadme-ov-file 2. 数据来源 在DETR中只使用了COCO2017数据集,其中训练集有118288张图像,验证集有5001张数据,测试集有40671张数据&#…...
前端常用缓存技术深度剖析
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
汽车IVI中控开发入门及进阶(三十七):基于HFP协议的蓝牙电话
概述: HFP全称Hands-free Profile,是一款让蓝牙设备控制电话的软件,多用于汽车上。此类设备最常见的例子是车载免提装置与蜂窝电话或可穿戴无线耳机一起使用。该配置文件定义了支持免提配置文件的两个设备如何在点对点的基础上相互交互。免提模式的实现通常使耳机或嵌入式免…...
分布式系统架构1:共识算法Paxos
1.背景 今天开始更新分布式的文章,工作几年后还没系统的学习分布式的内容,趁着还有时间学习沉淀的时候多输出些文章 2.为什么需要分布式共识算法 思考:现在你有一份随时变动的数据,需要确保它正确存储在网络的几台不同机器上&a…...
大语言模型应用Text2SQL本地部署实践初探
自从两年前OpenAI公司发布ChatGPT后,大模型(Large Language Model,简称LLM)相关技术在国内外可谓百家争鸣,遍地开花,在传统数据挖掘、机器学习和深度学习的基础上,正式宣告进入快速发展的人工智能(Artificial Intellig…...
C# WPF抽奖程序
C# WPF抽奖程序 using Microsoft.Win32; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.…...
linux运维命令
防火墙相关命令 防火墙规则查看 firewall-cmd --list-all 禁ping firewall-cmd --permanent --add-rich-rulerule protocol valueicmp drop firewall-cmd --reload 执行完以上命令后,通过firewall-cmd --list-all查看规则生效情况 firewall-cmd --list-all 其…...
环境兼容: Vue3+ELement-plus
题目:环境兼容: Vue3ELement-plus 前言 身为小白的我也在负责一个项目咯,开发的是Vue3项目,然后就搜阅多篇文章,整理了这个。内容很多是转载的,拼成的我这个文章。 Element-plus简介 Element-plus 是基于…...
解决 PyTorch 中的 AttributeError: ‘NoneType‘ object has no attribute ‘reshape‘ 错误
这里写目录标题 一、错误分析二、错误原因三、解决方案1. 检查损失函数2. 检查前向传播3. 检查 backward 函数4. 检查梯度传递 四、前向传播与反向传播1. 前向传播2. 反向传播3. 自定义 backward 函数示例反向传播过程:常见的错误:1:损失函数…...
Unity 设计模式-命令模式(Command Pattern)详解
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成对象,从而使得可以使用不同的请求、队列或日志请求,以及支持可撤销的操作。命令模式通常包含四个主要角色:命令(Command…...
如何解决maven项目使用Ctrl + /添加注释时的顶格问题
一、问题描述 相信后端开发的程序员一定很熟悉IDEA编译器和Maven脚手架,使用IDEA新建一个Maven工程,通过SpringBoot快速构建Spring项目。在Spring项目pom.xml文件中想添加注释,快捷键Ctrl /,但是总是顶格书写。 想保证缩进统一…...
网络安全信息收集(总结)更新
目录 重点: 前言: 又学到了,就是我们什么时候要子域名收集,什么时候收集域名,重点应该放前面 思考: 信息收集分为哪几类,什么是主域名,为什么要收集主域名,为什么要收…...
微服务-seata分布式事务
1.简述 1.1.什么是分布式事务 事务:是应用程序中一系列严密的操作,所有操作必须成功完成,要么全部失败,ACID 特性。本地事务:关系型数据库中,由一组SQL组成的一个执行单元,该单元要么整体成功,要么整体失败ÿ…...
(亲测好用)YOLO格式txt数据集转COCO格式json
1、数据集结构形式 YOLO格式数据集: b文件夹下有images和labels两个文件夹,分别存放图片和标签格式的数据。 两个文件夹下分别有train、val、test三个文件夹,里面存放对应的数据。 COCO数据集格式: COCO格式数据文件夹下有三个…...
LVS的DR模式是否依赖内核的数据包转发
LVS的DR模式是否依赖内核的数据包转发 是的,LVS(Linux Virtual Server) 的 DR(Direct Routing)模式 依赖于 内核的数据包转发。在 DR 模式下,数据包的转发行为是由 Linux 内核进行的,因此正确配…...
沿着数组的指定轴对每行(列)应用一个函数np.apply_along_axis
【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 沿着数组的指定轴 对每行(列)应用一个函数 np.apply_along_axis [太阳]选择题 根据题目代码,执行的结果是? import numpy as np array np.array([[1, 2, 3],…...
BEPUphysicsint定点数3D物理引擎使用
原文:BEPUphysicsint定点数3D物理引擎使用 - 哔哩哔哩 上一节給大家介绍了BEPUphysicsint的一些基本的情况,这节课我们来介绍它的基本使用,本节主要从以下5个方面来介绍: (1) 创建一个物理世界Space,并开启模拟迭代; (2) 添加一个物理物体…...
LinuxUDP编程
由于UDP是无连接、尽力传输的,所以Server端绑定完IP、端口号后,使用recvfrom可以阻塞等待客户端的数据,而且Client端通过sendto发送的数据包直接发送到互联网(也是基于IP、端口号)这种操作是不担保Server端是否收到的&…...
Elasticsearch vs 向量数据库:寻找最佳混合检索方案
图片来自Shutterstock上的Bakhtiar Zein 多年来,以Elasticsearch为代表的基于全文检索的搜索方案,一直是搜索和推荐引擎等信息检索系统的默认选择。但传统的全文搜索只能提供基于关键字匹配的精确结果,例如找到包含特殊名词“Python3.9”的文…...
Android显示系统(07)- OpenGL ES - 纹理Texture
Android显示系统(02)- OpenGL ES - 概述 Android显示系统(03)- OpenGL ES - GLSurfaceView的使用 Android显示系统(04)- OpenGL ES - Shader绘制三角形 Android显示系统(05)- OpenGL…...
C#加速Bitmap存图
如果希望大幅提高图像保存速度,特别是在处理非常大的图像时,可以尝试以下更直接、更高效的方法: 1. 避免使用 Bitmap 类的 Save 方法 Bitmap.Save 方法的速度受限于 GDI 库的操作,尤其是对于非常大的图像,它可能会经历…...
打通Vue3+Flask(python3)+Mysql-实现简单数据交互
一、需要准备的工具 下载python3,Vscode,pycharm(这里用的社区版),phpstudy_pro,Node.js(建议下载长期支持版本,版本不宜过低,比如18,20),Vue.js…...
PT8M2102 触控型 8Bit MCU
1 产品概述 ● PT8M2102 是一款基于 RISC 内核的8位 MTP 单片机,内部集成了电容式触摸感应模块、TIMER,PWM、LVR、LVD、WDT等外设,其主要用作触摸按键开关,广泛适用于触控调光、电子玩具、消费电子、家用电器等领域,具…...
【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码
目录 一、PyQt5介绍: (1)PyQt简介: (2)PyQt API: (3)支持的环境: (4)安装: (5)配置环境变量…...
Spark on Yarn安装配置,大数据技能竞赛(容器环境)
Spark on Yarn模式,即把Spark作为一个客户端,将作业提交给Yarn服务,由于在生产环境中,很多时候都要与Hadoop使用同一个集群,因此采用Yarn来管理资源调度,可以有效提高资源利用率。 环境说明: 服…...
★ 数据结构 ★ 排序
Ciallo~(∠・ω< )⌒☆ ~ 今天,我将和大家一起学习数据结构中的各种排序~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页:椎名澄嵐-CSDN博客 数据结构专栏:https://blog.csdn.net/2302_80328146/categ…...