【MySQL】MySQL分区表详解

原创不易,注重版权。转载请注明原作者和原文链接

文章目录

    • 分区表介绍
      • 表分区的优缺点和限制
    • 分区适用场景
    • 分区方式
    • 分区策略
      • RANGE 分区
      • LIST 分区
      • HASH 分区
      • KEY 分区
      • COLUMNS 分区
    • 常见分区命令
      • 是否支持分区
      • 创建分区表
      • 向分区表添加新的分区
      • 删除指定的分区
      • 重新组织分区
      • 合并相邻的分区
      • 分析指定分区的统计信息

在我们日常处理海量数据的过程中,如何有效管理和优化数据库一直是一个既重要又具有挑战性的问题。

分区表技术就为此提供了一种解决方案,尤其是在使用MySQL这类关系型数据库时。该技术将大型表的数据切割成更易于管理和查询的小块,从而提高了整体数据库操作的性能。

本文将详细探讨MySQL分区表的概念、实现方式以及具体应用场景,帮助读者更好地理解并运用这一高效的数据库优化策略。

分区表介绍

MySQL 数据库中的数据是以文件的形势存在磁盘上的,默认放在 /var/lib/mysql/ 目录下面,我们可以通过 show variables like '%datadir%' 命令来进行查看:

我们进入到这个目录下,就可以看到我们定义的所有数据库了,一个数据库就是一个文件夹,一个库中,有其对应的表的信息,如下:

在 MySQL 中,如果存储引擎是 MyISAM,那么在 data 目录下会看到 3 类文件:.frm.myi.myd,文件含义如下:

  • *.frm:这个是表定义,是描述表结构的文件。

  • *.myd:这个是数据信息文件,是表的数据文件。

  • *.myi:这个是索引信息文件。

如果存储引擎是 InnoDB, 那么在 data 目录下会看到两类文件:.frm.ibd,文件含义如下:

  • *.frm:表结构文件。
  • *.ibd:表数据和索引的文件。

无论是哪种存储引擎,只要一张表的数据量过大,就会导致 *.myd*.myi 以及 *.ibd 文件过大,从而数据的查找就会变的很慢。

为了解决这个问题,我们可以利用 MySQL 的分区功能,在物理上将这一张表对应的文件,分割成许多小块,如此,当我们查找一条数据时,就不用在某一个文件中进行整个遍历了,我们只需要知道这条数据位于哪一个数据块,然后在那一个数据块上查找就行了。

另一方面,如果一张表的数据量太大,可能一个磁盘放不下,这个时候,通过表分区我们就可以把数据分配到不同的磁盘里面去。

通俗地讲表分区就是将一大表,根据条件分割成若干个小表。

如:某用户表的记录超过了 600 万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区。当然也可根据其他的条件分区。

MySQL 从 5.1 版本开始添加了对分区的支持,分区的过程是将一个表或索引分解为多个更小、更可管理的部分。

对于开发者而言,分区后的表使用方式和不分区基本上还是一模一样,只不过在物理存储上,原本该表只有一个数据文件,现在变成了多个,每个分区都是独立的对象,可以独自处理,也可以作为一个更大对象的一部分进行处理。

需要注意的是,分区功能并不是在存储引擎层完成的,常见的存储引擎如 InnoDBMyISAMNDB 等都支持分区。

但并不是所有的存储引擎都支持,如 CSVFEDORATEDMERGE **等就不支持分区,因此在使用此分区功能前,应该对选择的存储引擎对分区的支持有所了解。

表分区的优缺点和限制

MySQL 分区有优点也有一些缺点,罗列如下:

优点:

  • 查询性能提升:分区可以将大表划分为更小的部分,查询时只需扫描特定的分区,而不是整个表,从而提高查询性能。特别是在处理大量数据或高并发负载时,分区可以显著减少查询的响应时间。
  • 管理和维护的简化:使用分区可以更轻松地管理和维护数据。可以针对特定的分区执行维护操作,如备份、恢复、优化和数据清理,而不必处理整个表。这简化了维护任务并减少了操作的复杂性。
  • 数据管理灵活性:通过分区,可以根据业务需求轻松地添加或删除分区,而无需影响整个表。这使得数据的增长和变化更具弹性,可以根据需求进行动态调整。
  • 改善数据安全性和可用性:可以将不同分区的数据分布在不同的存储设备上,从而提高数据的安全性和可用性。例如,可以将热数据放在高速存储设备上,而将冷数据放在廉价存储设备上,以实现更高的性能和成本效益。

缺点:

  • 复杂性增加:分区引入了额外的复杂性,包括分区策略的选择、表结构的设计和维护、查询逻辑的调整等。正确地设置和管理分区需要一定的经验和专业知识。
  • 索引效率下降:对于某些查询,特别是涉及跨分区的查询,可能会导致索引效率下降。由于查询需要在多个分区之间进行扫描,可能无法充分利用索引优势,从而影响查询性能。
  • 存储空间需求增加:使用分区会导致一定程度的存储空间浪费。每个分区都需要占用一定的存储空间,包括分区元数据和一些额外的开销。因此,对于分区键的选择和分区粒度的设置需要权衡存储空间和性能之间的关系。
  • 功能限制:在某些情况下,分区可能会限制某些 MySQL 的功能和特性的使用。例如,某些类型的索引可能无法在分区表上使用,或者某些 DDL 操作可能需要更复杂的处理。

在考虑使用分区时,需要综合考虑业务需求、查询模式、数据规模和硬件资源等因素,并权衡分区带来的优势和缺点。对于特定的应用和数据场景,分区可能是一个有效的解决方案,但并不适用于所有情况。

同时分区表也存在一些限制,如下:

限制:

  • 在 MySQL 5.6.7 之前的版本,一个表最多有 1024 个分区,从 5.6.7 开始,一个表最多可以有 8192 个分区。
  • 分区表无法使用外键约束。
  • NULL 值会使分区过滤无效。
  • 所有分区必须使用相同的存储引擎。

分区适用场景

分区表在以下情况可以发挥其优势,适用于以下几种使用场景:

  • 大型表处理:当面对非常大的表时,分区表可以提高查询性能。通过将表分割为更小的分区,查询操作只需要处理特定的分区,从而减少扫描的数据量,提高查询效率。这在处理日志数据、历史数据或其他需要大量存储和高性能查询的场景中非常有用。
  • 时间范围查询:对于按时间排序的数据,分区表可以按照时间范围进行分区,每个分区包含特定时间段内的数据。这使得按时间范围进行查询变得更高效,例如在某个时间段内检索数据、生成报表或执行时间段的聚合操作。
  • 数据归档和数据保留:分区表可用于数据归档和数据保留的需求。旧数据可以归档到单独的分区中,并将其存储在低成本的存储介质上。同时,可以保留较新数据在高性能的存储介质上,以便快速查询和操作。
  • 并行查询和负载均衡:通过哈希分区或键分区,可以将数据均匀地分布在多个分区中,从而实现并行查询和负载均衡。查询可以同时在多个分区上进行,并在最终合并结果,提高查询性能和系统吞吐量。
  • 数据删除和维护:使用分区表,可以更轻松地删除或清理不再需要的数据。通过删除整个分区,可以更快速地删除大量数据,而不会影响整个表的操作。此外,可以针对特定分区执行维护任务,如重新构建索引、备份和优化,以减少对整个表的影响。

分区表并非适用于所有情况。在选择使用分区表时,需要综合考虑数据量、查询模式、存储资源和硬件能力等因素,并评估分区对性能和管理的影响。

分区方式

分区有两种方式,水平切分和垂直切分,MySQL 数据库支持的分区类型为水平分区,它不支持垂直分区。

此外,MySQL 数据库的分区是局部分区索引,一个分区中既存放了数据又存放了索引。而全局分区是指,数据存放在各个分区中,但是所有数据的索引放在一个对象中。目前,MySQL 数据库还不支持全局分区

分区策略

RANGE 分区

RANGE 分区是 MySQL 中的一种分区策略,根据某一列的范围值将数据分布到不同的分区。每个分区包含特定的范围。下面是 RANGE 分区的定义方式、特点以及代码示例。

定义方式:

  • 指定分区键:选择作为分区依据的列作为分区键,通常是日期、数值等具有范围特性的列。
  • 分区函数:通过PARTITION BY RANGE指定使用 RANGE 分区策略。
  • 定义分区范围:使用VALUES LESS THAN子句定义每个分区的范围。

RANGE 分区的特点:

  • 范围划分:根据指定列的范围进行分区,适用于需要按范围进行查询和管理的情况。
  • 灵活的范围定义:可以定义任意数量的分区,并且每个分区可以具有不同的范围。
  • 高效查询:根据查询条件的范围,MySQL 能够快速定位到特定的分区,提高查询效率。
  • 动态管理:可以根据业务需求轻松添加或删除分区,适应数据增长或变更的需求。

以下是一个使用 RANGE 分区的代码示例:

CREATE TABLE sales (id INT,sales_date DATE,amount DECIMAL(10, 2)
)
PARTITION BY RANGE (YEAR(sales_date)) (PARTITION p1 VALUES LESS THAN (2020),PARTITION p2 VALUES LESS THAN (2021),PARTITION p3 VALUES LESS THAN (2022),PARTITION p4 VALUES LESS THAN MAXVALUE
);

在上述示例中,我们创建了名为sales的表,使用 RANGE 分区策略。根据sales_date列的年份范围将数据分布到不同的分区:

  • PARTITION BY RANGE (YEAR(sales_date)):指定使用 RANGE 分区,基于sales_date列的年份进行分区。
  • PARTITION p1 VALUES LESS THAN (2020):定义名为p1的分区,包含年份小于 2020 的数据。
  • PARTITION p2 VALUES LESS THAN (2021):定义名为p2的分区,包含年份小于 2021 的数据。
  • PARTITION p3 VALUES LESS THAN (2022):定义名为p3的分区,包含年份小于 2022 的数据。
  • PARTITION p4 VALUES LESS THAN MAXVALUE:定义名为p4的分区,包含超出定义范围的数据。

RANGE 分区允许根据列值的范围将数据分散到不同的分区中,适用于按范围进行查询和管理的情况。它提供了更灵活的数据管理和查询效率的提升。

LIST 分区

LIST 分区是根据某一列的离散值将数据分布到不同的分区。每个分区包含特定的列值列表。下面是 LIST 分区的定义方式、特点以及代码示例。

定义方式:

  • 指定分区键:选择作为分区依据的列作为分区键,通常是具有离散值的列,如地区、类别等。

  • 分区函数:通过PARTITION BY LIST指定使用 LIST 分区策略。

  • 定义分区列表:使用VALUES IN子句定义每个分区包含的列值列表。

LIST 分区的特点:

  • 列值离散:根据指定列的具体取值进行分区,适用于具有离散值的列。
  • 灵活的分区定义:可以定义任意数量的分区,并且每个分区可以具有不同的列值列表。
  • 高效查询:根据查询条件的列值直接定位到特定分区,提高查询效率。
  • 动态管理:可以根据业务需求轻松添加或删除分区,适应数据增长或变更的需求。

以下是一个使用 LIST 分区的代码示例:

CREATE TABLE users (id INT,username VARCHAR(50),region VARCHAR(50)
)
PARTITION BY LIST (region) (PARTITION p_east VALUES IN ('New York', 'Boston'), PARTITION p_west VALUES IN ('Los Angeles', 'San Francisco'), PARTITION p_other VALUES IN (DEFAULT)
);

在上述示例中,我们创建了名为users的表,使用 LIST 分区策略。根据region列的具体取值将数据分布到不同的分区:

  • PARTITION BY LIST (region):指定使用 LIST 分区,基于region列的值进行分区。
  • PARTITION p_east VALUES IN ('New York', 'Boston'):定义名为p_east的分区,包含值为’New York’和’Boston’的region列的数据。
  • PARTITION p_west VALUES IN ('Los Angeles', 'San Francisco'):定义名为p_west的分区,包含值为’Los Angeles’和’San Francisco’的region列的数据。
  • PARTITION p_other VALUES IN (DEFAULT):定义名为p_other的分区,包含其他region列值的数据。

HASH 分区

HASH 分区是使用哈希算法将数据均匀地分布到多个分区中。下面是 HASH 分区的定义方式、特点以及代码示例。

定义方式:

  • 指定分区键:选择作为分区依据的列作为分区键。

  • 分区函数:通过PARTITION BY HASH指定使用 HASH 分区策略。

  • 定义分区数量:使用PARTITIONS关键字指定分区的数量。

HASH 分区的特点:

  • 数据均匀分布:HASH 分区使用哈希算法将数据均匀地分布到不同的分区中,确保数据在各个分区之间平衡。

  • 并行查询性能:通过将数据分散到多个分区,HASH 分区可以提高并行查询的性能,多个查询可以同时在不同分区上执行。

  • 简化管理:HASH 分区使得数据管理更加灵活,可以轻松地添加或删除分区,以适应数据增长或变更的需求。

以下是一个使用 HASH 分区的代码示例:

CREATE TABLE sensor_data (id INT,sensor_name VARCHAR(50),value INT
)
PARTITION BY HASH (id) PARTITIONS 4;

在上述示例中,我们创建了名为sensor_data的表,使用 HASH 分区策略。根据id列的哈希值将数据分布到 4 个分区中:

  • PARTITION BY HASH (id):指定使用 HASH 分区,基于id列的哈希值进行分区。
  • PARTITIONS 4:指定创建 4 个分区。

KEY 分区

KEY 分区是根据某一列的哈希值将数据分布到不同的分区。不同于 HASH 分区,KEY 分区使用的是列值的哈希值而不是哈希函数。下面是 KEY 分区的定义方式、特点以及代码示例。

定义方式:

  • 指定分区键:选择作为分区依据的列作为分区键。
  • 分区函数:通过PARTITION BY KEY指定使用 KEY 分区策略。
  • 定义分区数量:使用PARTITIONS关键字指定分区的数量。

KEY 分区的特点:

  • 哈希分布:KEY 分区使用列值的哈希值将数据分布到不同的分区中,与哈希函数不同,它使用的是列值的哈希值。
  • 高度自定义:KEY 分区允许根据业务需求自定义分区逻辑,可以灵活地选择分区键和分区数量。
  • 并行查询性能:通过将数据分散到多个分区,KEY 分区可以提高并行查询的性能,多个查询可以同时在不同分区上执行。
  • 简化管理:KEY 分区使得数据管理更加灵活,可以轻松地添加或删除分区,以适应数据增长或变更的需求。

以下是一个使用 KEY 分区的代码示例:

CREATE TABLE orders (order_id INT,customer_id INT,order_date DATE
)
PARTITION BY KEY (customer_id) PARTITIONS 5;

在上述示例中,我们创建了名为orders的表,使用 KEY 分区策略。根据customer_id列的哈希值将数据分布到 5 个分区中:

  • PARTITION BY KEY (customer_id):指定使用 KEY 分区,基于customer_id列的哈希值进行分区。
  • PARTITIONS 5:指定创建 5 个分区。

COLUMNS 分区

MySQL 在 5.5 版本引入了 COLUMNS 分区类型,其中包括 RANGE COLUMNS 分区和 LIST COLUMNS 分区。以下是对这两种 COLUMNS 分区的详细说明:

RANGE COLUMNS 分区: RANGE COLUMNS 分区是根据列的范围值将数据分布到不同的分区的分区策略。它类似于 RANGE 分区,但是根据多个列的范围值进行分区,而不是只根据一个列。这使得范围的定义更加灵活,可以基于多个列的组合来进行分区。

下面是一个 RANGE COLUMNS 分区的代码示例:

CREATE TABLE sales (id INT,sales_date DATE,region VARCHAR(50),amount DECIMAL(10, 2)
)
PARTITION BY RANGE COLUMNS (region, sales_date) (PARTITION p1 VALUES LESS THAN ('East', '2022-01-01'),PARTITION p2 VALUES LESS THAN ('West', '2022-01-01'),PARTITION p3 VALUES LESS THAN ('East', MAXVALUE),PARTITION p4 VALUES LESS THAN ('West', MAXVALUE)
);

在上述示例中,我们创建了一个名为 sales 的表,并使用 RANGE COLUMNS 分区策略。根据 regionsales_date 两列的范围将数据分布到不同的分区。每个分区根据这两列的范围值进行划分。

LIST COLUMNS 分区: LIST COLUMNS 分区是根据列的离散值将数据分布到不同的分区的分区策略。它类似于 LIST 分区,但是根据多个列的离散值进行分区,而不是只根据一个列。这使得离散值的定义更加灵活,可以基于多个列的组合来进行分区。

下面是一个 LIST COLUMNS 分区的代码示例:

CREATE TABLE users (id INT,username VARCHAR(50),region VARCHAR(50),category VARCHAR(50)
)
PARTITION BY LIST COLUMNS (region, category) (PARTITION p_east VALUES IN (('New York', 'A'), ('Boston', 'B')), PARTITION p_west VALUES IN (('Los Angeles', 'C'), ('San Francisco', 'D')), PARTITION p_other VALUES IN (DEFAULT)
);

在上述示例中,我们创建了一个名为 users 的表,并使用 LIST COLUMNS 分区策略。根据 regioncategory 两列的离散值将数据分布到不同的分区。每个分区根据这两列的离散值进行划分。

常见分区命令

是否支持分区

在 MySQL5.6.1 之前可以通过命令 show variables like '%have_partitioning%' 来查看 MySQL 是否支持分区。如果 have_partitioning 的值为 YES,则表示支持分区。

从 MySQL5.6.1 开始,have_partitioning 参数已经被去掉了,而是用 SHOW PLUGINS 来代替。若有 partition 行且 STATUS 列的值为 ACTIVE,则表示支持分区,如下所示:

创建分区表

CREATE TABLE sales (id INT,sales_date DATE,amount DECIMAL(10, 2)
)
PARTITION BY RANGE (YEAR(sales_date)) (PARTITION p1 VALUES LESS THAN (2020),PARTITION p2 VALUES LESS THAN (2021),PARTITION p3 VALUES LESS THAN (2022),PARTITION p4 VALUES LESS THAN MAXVALUE
);

向分区表添加新的分区

ALTER TABLE salesADD PARTITION (PARTITION p5 VALUES LESS THAN (2023));

删除指定的分区

ALTER TABLE sales DROP PARTITION p3;

重新组织分区

ALTER TABLE salesREORGANIZE p1, p2, p5 INTO (PARTITION p1 VALUES LESS THAN (2020), PARTITION p2 VALUES LESS THAN (2022), PARTITION p3 VALUES LESS THAN MAXVALUE);

合并相邻的分区

ALTER TABLE sales COALESCE PARTITION p1, p2;

分析指定分区的统计信息

ALTER TABLE sales ANALYZE PARTITION p1;

总的来说,MySQL分区表在数据管理和查询性能上提供了显著的优势。它可以帮助我们处理大规模数据,提高查询速度,并改善系统性能。

然而,合理地、有效地实施分区策略也需要对业务需求和数据特性有深刻理解。虽然分区表的使用在许多场景下都是有益的,但仍需要注意其适用性及可能存在的限制。无论如何,掌握和使用MySQL分区表无疑是每个数据库管理员和开发人员工具箱中的一个重要工具。

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

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

相关文章

vue七牛云视频直传

完成后样式&#xff1a; 下面的代码是我自己项目里面用到的&#xff0c;一些判断看自己情况去掉&#xff0c;用的是element-ui组件 安装 uuid 库。你可以使用 npm 或 yarn 来完成安装。在终端中执行以下命令&#xff1a; npm install uuidhtml部分 <el-upload class&quo…

【python】time

文章目录 【calendar】是否闰年星期英文缩写今天星期几打印日历 【datetime】今天星期几 【time】当前时间 【pandas】当前时间文件修改的时间 【日历】 【calendar】 是否闰年 import calendar print(calendar.isleap(2000))out True星期英文缩写 print(calendar.weekhead…

TCP/IP(十三)滑动窗口

一 滑动窗口 通信双方要读懂对方的反馈信息,并进行调整 TCP滑动窗口原理终于清楚了 TCP Window Full 和 TCP Zero Window "特殊的场景" 1、TCP Window Full 是站在发送端角度说的特点&#xff1a; 表示发送端不能再发数据给对方,除非发送的数据包得到ACK响应2、…

SSM - Springboot - MyBatis-Plus 全栈体系(二十四)

第五章 SSM 二、SSM 整合配置实战 1. 依赖整合添加 1.1 数据库准备 依然沿用 mybatis 数据库测试脚本&#xff01; CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIM…

谷歌云 | 零售行业的生成式 AI:如何跟上步伐并取得领先

【Cloud Ace 是 Google Cloud 全球战略合作伙伴&#xff0c;在亚太地区、欧洲、南北美洲和非洲拥有二十多个办公室。Cloud Ace 在谷歌专业领域认证及专业知识目前排名全球第一位&#xff0c;并连续多次获得 Google Cloud 各类奖项。作为谷歌云托管服务商&#xff0c;我们提供谷…

基于 ACK Fluid 的混合云优化数据访问(四):将第三方存储目录挂载到 Kubernetes,提升效率和标准化

作者&#xff1a;车漾 前文回顾&#xff1a; 本系列将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景&#xff0c;相关文章请参考&#xff1a; -基于 ACK Fluid 的混合云优化数据访问&#xff08;一&#xff09;&#xff1a;场景与架构 -基于 ACK Fluid 的混合云优…

JavaScript的懒加载处理

&#x1f618;博主&#xff1a;小猫娃来啦 &#x1f618;文章核心&#xff1a;JavaScript的懒加载处理 文章目录 什么是懒加载实现懒加载的方式js四步法设置占位图监听滚动事件加载图片触发加载函数 什么是懒加载 懒加载&#xff08;Lazy Loading&#xff09;是一种优化技术&a…

【opencv】windows10下opencv4.8.0-cuda C++版本源码编译教程

【opencv】windows10下opencv4.8.0-cuda C版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】windows10下opencv4.8.0-cuda C版本源码编译教程前言准备工具cuda/cudnncmakeopencv4.8.0opencv_contrib CMake编译VS2019编…

文心一言 VS 讯飞星火 VS chatgpt (111)-- 算法导论10.2 2题

二、用go语言&#xff0c;用一个单链表 L实现一个栈。要求操作 PUSH和 POP 的运行时间仍为 O(1)。 文心一言&#xff1a; 在 Go 语言中&#xff0c;我们可以用结构体来实现一个单链表&#xff0c;然后再用栈的相关操作。 以下是一个可能的实现方式&#xff1a; package mai…

碰撞检测算法——分离轴算法在Unity中实现(二)

一、介绍 分离轴算法&#xff08;简称SAT&#xff09;通常用于检查两个简单多边形&#xff08;凸边形&#xff09;之间或多边形与圆之间的碰撞。本质上&#xff0c;如果您能够绘制一条线来分隔两个多边形&#xff0c;则它们不会发生碰撞&#xff0c;如果找不到一条线来分割两个…

力扣:129. 求根节点到叶节点数字之和(Python3)

题目&#xff1a; 给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字&#xff1a; 例如&#xff0c;从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。 计算从根节点到叶节点生成的 所…

STM32CubeMX使用

一、新建工程 首先&#xff0c;打开STM32CubeMX&#xff0c;第一次使用的朋友可以点击右侧的CHECK FOR UPDATE和INSTALL/REMOVE检查一下软件更新并且找到对应芯片的固件库然后下载&#xff0c;软件和固件库都推荐是使用最新版的&#xff0c;这里不多介绍。 完毕之后点击File-&…

信创之国产浪潮电脑+统信UOS操作系统体验4:visual studio code中怎么显示中文

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 今天在vscode中打开以前的一段C代码&#xff0c;其中的中文显示为乱码&#xff0c;如图所示&#xff1a; 而在统信文本编辑器打开是正常的&#xff0c;打开所有菜单&#xff0c;没有找到相关配置…

《进化优化》第3章 遗传算法

文章目录 3.1 遗传学的历史3.2 遗传学3.3 遗传学的历史3.4 一个简单的二进制遗传算法3.4.1 用于机器人设计的遗传算法3.4.2 选择与交叉3.4.3 变异3.4.5 遗传算法参数调试 3.5 简单的连续遗传算法 遗传算法模仿自然选择来解决优化问题。 为研究遗传算法&#xff0c;得遵守自然选…

进来了解实现官网搜索引擎的三种方法

做网站的目的是对自己的品牌进行推广&#xff0c;让越来越多的人知道自己的产品&#xff0c;但是如果只是做了一个网站放着&#xff0c;然后等着生意找上门来那是不可能的。在当今数字时代&#xff0c;实现官网搜索引擎对于提升用户体验和推动整体性能至关重要。搜索引擎可以帮…

深入理解强化学习——标准强化学习和深度强化学习

分类目录&#xff1a;《深入理解强化学习》总目录 强化学习的历史 早期的强化学习&#xff0c;我们称其为标准强化学习。最近业界把强化学习与深度学习结合起来&#xff0c;就形成了深度强化学习&#xff08;Deep ReinforcemetLearning&#xff09;。因此&#xff0c;深度强化…

试图带你一文搞懂transformer注意力机制(Self-Attention)的本质

这篇文章主要想搞懂以下几个问题&#xff1a; 1、什么是自注意力&#xff08;Self-Attention&#xff09; 2、Q,K,V是什么 好了废话不多说&#xff0c;直接进入正题 Q,K,V分别代表query&#xff0c;key和value&#xff0c;这很容易让人联想到python的字典数据结构&#xff…

Ghidra101再入门(上?)-Ghidra架构介绍

Ghidra101再入门(上&#xff1f;)-Ghidra架构介绍 最近有群友问我&#xff0c;说&#xff1a;“用了很多年的IDA&#xff0c;最近想看看Ghidra&#xff0c;这应该怎么进行入门&#xff1f;“这可难到我了。。 我发现&#xff0c;市面上虽然介绍Ghidra怎么用的文章和书籍很多&…

C++ 使用Windows的API CreateDirectory 创建多层级文件夹

简介 使用Windows的API创建多层级文件夹 效果 代码 #include <windows.h> #include <direct.h> #include <iostream> #include <string> #include <sstream> #include <vector> //创建多层级文件夹 bool CreateDir(const std:…

【算法-动态规划】0-1 背包问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…