【MySQL】MySQL分区表详解

news2024/11/25 20:53:34

本文已收录至Github,推荐阅读 👉 Java随想录

文章目录

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

分区表介绍

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

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

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

  1. *.frm:这个是表定义,是描述表结构的文件。
  2. *.myd:这个是数据信息文件,是表的数据文件。
  3. *.myi:这个是索引信息文件。

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

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

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

为了解决这个问题,我们可以利用 MySQL 的分区功能,在物理上将这一张表对应的文件,分割成许多小块,如此,当我们查找一条数据时,就不用在某一个文件中进行整个遍历了,我们只需要知道这条数据位于哪一个数据块,然后在那一个数据块上查找就行了;另一方面,如果一张表的数据量太大,可能一个磁盘放不下,这个时候,通过表分区我们就可以把数据分配到不同的磁盘里面去。

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

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

MySQL 从 5.1 开始添加了对分区的支持,分区的过程是将一个表或索引分解为多个更小、更可管理的部分。对于开发者而言,分区后的表使用方式和不分区基本上还是一模一样,只不过在物理存储上,原本该表只有一个数据文件,现在变成了多个,每个分区都是独立的对象,可以独自处理,也可以作为一个更大对象的一部分进行处理。

需要注意的是,分区功能并不是在存储引擎层完成的,常见的存储引擎如 InnoDBMyISAMNDB 等都支持分区。但并不是所有的存储引擎都支持,如 CSVFEDORATEDMERGE 等就不支持分区,因此在使用此分区功能前,应该对选择的存储引擎对分区的支持有所了解

表分区的优缺点和限制

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

优点:

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

缺点:

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

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

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

限制:

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

分区适用场景

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

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

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

分区方式

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

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

分区策略

RANGE分区

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

定义方式:

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

RANGE分区的特点:

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

以下是一个使用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分区的定义方式、特点以及代码示例。

    定义方式:

    1. 指定分区键:选择作为分区依据的列作为分区键,通常是具有离散值的列,如地区、类别等。
    2. 分区函数:通过PARTITION BY LIST指定使用LIST分区策略。
    3. 定义分区列表:使用VALUES IN子句定义每个分区包含的列值列表。

    LIST分区的特点:

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

    以下是一个使用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分区的定义方式、特点以及代码示例。

    定义方式:

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

    HASH分区的特点:

    1. 数据均匀分布:HASH分区使用哈希算法将数据均匀地分布到不同的分区中,确保数据在各个分区之间平衡。
    2. 并行查询性能:通过将数据分散到多个分区,HASH分区可以提高并行查询的性能,多个查询可以同时在不同分区上执行。
    3. 简化管理: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分区的定义方式、特点以及代码示例。

定义方式:

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

KEY分区的特点:

  1. 哈希分布:KEY分区使用列值的哈希值将数据分布到不同的分区中,与哈希函数不同,它使用的是列值的哈希值。
  2. 高度自定义:KEY分区允许根据业务需求自定义分区逻辑,可以灵活地选择分区键和分区数量。
  3. 并行查询性能:通过将数据分散到多个分区,KEY分区可以提高并行查询的性能,多个查询可以同时在不同分区上执行。
  4. 简化管理: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分区的详细说明:

  1. 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分区策略。根据region和sales_date两列的范围将数据分布到不同的分区。每个分区根据这两列的范围值进行划分。

  2. 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分区策略。根据region和category两列的离散值将数据分布到不同的分区。每个分区根据这两列的离散值进行划分。

常见分区命令

是否支持分区

在 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 sales ADD PARTITION (
    PARTITION p5 VALUES LESS THAN (2023)
);

删除指定的分区

ALTER TABLE sales DROP PARTITION p3;

重新组织分区

ALTER TABLE sales REORGANIZE PARTITION 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;

本篇文章就到这里,感谢阅读,如果本篇博客有任何错误和建议,欢迎给我留言指正。文章持续更新。

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

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

相关文章

2 增长渐进阶求解

2 增长渐进阶求解 作者: 赵晓鹏时间限制: 1S章节: 递归与分治 #include<iostream> using namespace std;int main() {cout << "A"<<endl ; cout << "A"<<endl ; cout << "A"<<endl ; cout << …

Linux 学习记录49(QT篇)

Linux 学习记录49(QT篇) 本文目录 Linux 学习记录49(QT篇)一、事件处理机制1. 什么是事件2. 如何处理事件(1. 当事件发生时(2. QObject类的子类 3. 事件处理函数由来4. 鼠标和键盘事件5. 键盘按键示例 二、定时器1. 定时器事件2. 代码实现3. 自制文本闹钟 三、绘制事件&#xf…

Centos7离线模式安装Redis6.2.13详细步骤(rpm方式)

本篇文章主要介绍在CentOS7服务器中安装Redis6.2.13&#xff0c;前提是需要有gcc的环境&#xff0c;那么在此我也会向大家介绍gcc的详细安装过程&#xff0c;参考了很多其它相关博客&#xff0c;但有些博主的文章可能是搬运的&#xff0c;导致我在实操时出现报错&#xff0c;那…

CVE-2023-23752-Joomla权限绕过漏洞研判分析

CVE-2023-23752-Joomla权限绕过漏洞分析 简介 Joomla是一个开源免费的内容管理系统&#xff08;CMS&#xff09;&#xff0c;基于PHP开发。 在其4.0.0版本到4.2.7版本中&#xff0c;存在一处属性覆盖漏洞&#xff0c;导致攻击者可以通过恶意请求绕过权限检查&#xff0c;访问…

Go轻量级线程Goroutine

文章目录 Goroutinegoroutine的创建GPM介绍goroutine调度 道阻且长&#xff0c;行则将至&#xff0c;行而不辍&#xff0c;未来可期&#x1f31f;。人生是一条且漫长且充满荆棘的道路&#xff0c;一路上充斥着各种欲望与诱惑&#xff0c;不断学习&#xff0c;不断修炼&#xff…

第二十一章:用户与权限管理

第二十一章&#xff1a;用户与权限管理 21.1&#xff1a;用户管理 登录MySQL服务器 # 语法 mysql -h hostname|hostIP -P port -u username -p DatabaseName -e "SQL语句"; # -h参数 后面接主机名或者主机IP&#xff0c;hostname为主机&#xff0c;hostIP为主机IP。…

请求响应-简单参数的接受

请求响应 请求&#xff08;HttpServletRequest&#xff09;&#xff1a;获取请求数据响应&#xff08;HttpServletResponse&#xff09;&#xff1a;设置响应数据BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构。客户端只需要浏览器&#xff0c;应用程序的逻…

BCD码与二进制码的区别与联系

二进制数是整串二进制编码表示一个整数&#xff0c;BCD码是用二进制码逐一表示0&#xff5e;9的整数。 (本笔记适合对整数进制编码有一定了解&#xff0c;熟悉二进制数编码的编程爱好的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org…

【python】制作一个串口工具(下)!

上一章节我们说了UI界面的设计&#xff0c;这一节来说下怎样实现其功能。 一.实例演示 1.创建一个.py文件&#xff0c;以下代码用来实现获取所有的串口信息&#xff1a; import serial import serial.tools.list_portsfrom PyQt5.QtWidgets import QComboBoxclass My_ComBoBo…

使用Feign进行微服务之间的接口调用:Spring Cloud Alibaba中的声明式服务调用

一、Feign介绍 Feign是一个声明式的HTTP客户端框架&#xff0c;用于简化微服务架构中服务之间的通信。它是Spring Cloud框架的一部分&#xff0c;旨在提供一种优雅且易于使用的方式来定义和调用HTTP请求。 Feign的设计目标是让服务之间的通信变得更加简单和直观。通常情况下&am…

EmEditor自定义快捷键之下一个标签页上一个标签页

EmEditor自定义快捷键 有好几种叫法 下一个标签页上一个标签页 下一个选项卡上一个选项卡 在这里个软件它叫’右侧文档’ ‘左侧文档’ 工具 - 所有配置的属性 - 键盘 - 窗口 - 类别: 选’窗口’ - 依次选 ‘右边的文档’ ‘左边的文档’ 按下新的快捷键 - 是每次只按一个键(不…

简单的复习下与 CSS Flex 布局相关的几个关键属性

揭开align-content、justify-content、align-items和justify-items的神秘面纱&#xff0c;解释它们各自的功能以及在不同的情境下如何使用。 在过去几年中&#xff0c;由于弹性盒子和网格布局的演变&#xff0c;CSS布局设计的艺术发生了重大变化。而这一变革的核心&#xff0c;…

CS231N assignment3 RNN

对作业进行一些形象的解释 首先是def rnn_step_forward&#xff1a; 这里的t时刻其实就是一个句子里面的单词数&#xff0c;为了方便会统一到一个最长长度&#xff0c;对于比这个长度短的部分用null进行填充&#xff0c;并且在方法内部会让Null不进行传播和梯度计算。 我们最…

AIGC的发展史:从模仿到创造,AI的创造性探索

在 AI时代&#xff0c;人工智能不再是简单的机器&#xff0c;而是一个具有无限创造力的创造者。AIGC的诞生是人工智能从模仿到创造的一种进步&#xff0c;也是对人类创造力的一种新探索。 而这种由AI生成的内容究竟是如何发展而来的呢&#xff1f;在本文中&#xff0c;我们将探…

QT检测USB HID设备的拔插

网上的参考代码很多&#xff0c;比如下面这个&#xff1a; QT 检测hid设备拔插打印设备信息_qt hid打印机_研知电子的博客-CSDN博客 但是&#xff0c;参考了很多人的代码&#xff0c;写出来的发现检测不到USB HID设备的拔插。 明明其他人都可以正常使用&#xff0c;那问题应…

java内存区 || 并发

目录 什么是线程&#xff1f; 线程的创建和上下文切换&#xff1a; 线程的入栈和出栈&#xff1a; 堆栈的作用&#xff1a; CPU核心数概念 线程的start状态 就绪队列 操作系统的时间片 线程中代码执行顺序 实际中内存图 什么是线程&#xff1f; 线程的创建和上下文切换…

【android12】给第三方应用APK添加系统签名

一、背景 自己或者客户的第三方apk需要用到很多系统权限&#xff0c;所以要内置到系统目录下&#xff0c;变成系统自带的APP&#xff0c;如果不用系统文件生成的签名安装&#xff0c;会导致APP远程更新失败提示签名错误。 二、环境准备 1.Ubuntu系统&#xff08;推荐1804版本及…

Invalid name=“org.apache.dubbo.config.ApplicationConfig#0“

上一篇文章是springboot 集成 dubbo&#xff1a; spring boot 集成dubbo_Demonor_的博客-CSDN博客 在集成的时候出现了一些异常&#xff0c;在这里记录一下&#xff0c;并排查出原因 异常信息1&#xff1a; [2m2023-07-11 20:38:39.387[0;39m [32m INFO[0;39m [35m21492[0;…

92.qt qml-日期/日期时间/时间选择器(日历选择器)

截图如下所示: 效果图如下所示: 1.前言 QML日历组件我们之前移植过: 67.qt quick-qml自定义日历组件(支持竖屏和横屏)_qml日历_诺谦的博客-CSDN博客 但是该组件内部代码比较坑的就是全部使用自定义对象,导致性能不行,动画卡顿,并且不好加时间选择,所以本章我们重新学…

Mysql 实现批量插入对已存在数据忽略或更新

Mysql 实现批量插入对已存在数据忽略/更新 文章目录 Mysql 实现批量插入对已存在数据忽略/更新一. 表的准备二. 实现2.1 实现原理2.2 批量插入对已存在数据忽略 一. 表的准备 CREATE TABLE demo (id int NOT NULL AUTO_INCREMENT COMMENT 主键id,name varchar(10) DEFAULT NUL…