稳定运行的以MySQL数据库为数据源和目标的ETL性能变差时提高性能方法和步骤
在ETL(Extract, Transform, Load)过程中,数据源和目标都为MySQL数据库时,性能变差可能由多种原因引起。提高以MySQL为数据源和目标的ETL性能需要综合考虑数据库性能、ETL任务的处理方式、硬件资源和工具的选择。通过批量处理、并行化任务、增量更新、查询优化以及硬件的优化等多种手段,可以有效提升ETL过程的整体性能。
要提高ETL过程的性能,可以采取以下方法和步骤:
1. 优化MySQL数据库性能
当MySQL数据仓库的性能突然变差时,通常有多个潜在的原因。为了提高性能,可以按照以下步骤进行排查和优化。需要考虑的方面包括硬件资源、查询优化、索引优化、数据库配置以及系统负载等。
- 数据库索引:
- 确保数据源表的关键列(尤其是筛选条件列和连接条件列)有合适的索引。没有合适的索引会导致查询变慢。
- 避免在频繁更新的表上使用过多的索引,因为这会降低插入和更新的性能。
- 查询优化:
- 使用
EXPLAIN
分析SQL查询的执行计划,找出查询瓶颈。 - 优化查询语句,避免全表扫描,尽量减少JOIN的数量,特别是多表连接时,考虑是否可以通过拆分查询或者子查询优化。
- 使用合适的查询缓存策略,提高重复查询的性能(虽然MySQL 8.0以后移除查询缓存,但还是可以利用其他缓存技术)。
- 使用
- 数据分区:
- 对大表进行分区可以显著提高查询性能。可以按日期、ID范围等方式进行分区,使得ETL过程中只扫描相关的分区。
- 数据库连接池:
- 使用连接池技术(如HikariCP、C3P0等)来避免频繁建立和关闭数据库连接,从而减少连接延迟。
可以系统地定位MySQL性能下降的原因,并进行针对性的优化。在优化过程中,最好逐步进行测试和验证,确保每个改动带来实际的性能提升。
步骤一:检查数据库负载和资源使用情况
-
查看系统资源:
- 使用
top
、htop
或vmstat
等工具查看CPU、内存、磁盘和网络的使用情况,确保硬件资源没有瓶颈。 - 查看磁盘I/O使用情况,特别是磁盘的读写速度是否成为瓶颈。
- 使用
-
查看MySQL进程:
- 使用
SHOW PROCESSLIST
查看当前正在执行的查询,找出哪些查询可能占用了大量资源或长时间没有完成。 - 如果某些查询阻塞或执行时间过长,可能是性能下降的原因。
- 使用
-
查看慢查询日志:
- 启用并查看慢查询日志(
slow_query_log
),识别哪些查询执行时间长。 SET GLOBAL slow_query_log = 1;
开启慢查询日志记录。- 确保
long_query_time
配置项设置合适,记录时间较长的查询。
- 启用并查看慢查询日志(
步骤二:查询优化
-
分析和优化慢查询:
- 使用
EXPLAIN
分析慢查询的执行计划,查看是否有全表扫描(Full Table Scan
),或者索引是否没有被使用。 - 检查是否可以通过增加索引、重写查询或调整查询结构来优化查询性能。
- 对于频繁执行的复杂查询,可以考虑使用物化视图或结果缓存。
- 使用
-
避免N+1查询问题:
- 确保代码中没有造成多次重复查询的问题,避免一次查询中频繁地执行其他查询。
-
检查连接池的使用情况:
- 如果数据库连接数过多,可能会导致性能下降。确保数据库连接池的配置合理。
步骤三:数据库配置优化
-
调整InnoDB缓冲池大小:
- InnoDB存储引擎使用缓冲池(
innodb_buffer_pool_size
)来缓存数据页。增加缓冲池的大小可以减少磁盘I/O,提升查询性能。 - 一般建议将缓冲池设置为物理内存的70% ~ 80%。
- InnoDB存储引擎使用缓冲池(
-
优化查询缓存(Query Cache):
- 如果你的应用是读多写少的类型,可以考虑启用查询缓存(
query_cache_size
)。但是在写操作频繁的系统中,查询缓存可能会降低性能。
- 如果你的应用是读多写少的类型,可以考虑启用查询缓存(
-
调整临时表的大小:
- 如果查询中大量使用了临时表,确保临时表存储在内存中而不是磁盘上。调整
tmp_table_size
和max_heap_table_size
配置项。
- 如果查询中大量使用了临时表,确保临时表存储在内存中而不是磁盘上。调整
-
调整连接相关的配置:
- 调整
max_connections
配置,确保在高负载情况下数据库能够处理足够的连接请求。 - 增加
wait_timeout
和interactive_timeout
配置,避免连接过早关闭。
- 调整
步骤四:索引优化
-
检查索引的使用情况:
- 确保数据库表中存在正确的索引,并且查询能够有效利用这些索引。可以通过
SHOW INDEXES FROM <table_name>
查看索引。 - 定期检查并清理无用的索引,避免索引过多导致性能下降。
- 确保数据库表中存在正确的索引,并且查询能够有效利用这些索引。可以通过
-
合并冗余索引:
- 如果有多个重复的索引,考虑将它们合并成一个复合索引。
-
使用覆盖索引:
- 如果查询可以完全由索引提供所需的字段,可以使用覆盖索引,避免额外的磁盘访问。
步骤五:硬件和架构优化
-
优化存储引擎:
- 如果是高并发写入场景,考虑使用支持更高并发的存储引擎(如NDB)。
- 使用SSD硬盘代替HDD,提升磁盘I/O性能。
-
分区表:
- 对于大数据量的表,使用分区(
PARTITION
)可以有效减少每次查询扫描的行数,提升查询性能。
- 对于大数据量的表,使用分区(
-
读写分离:
- 如果数据库负载较高,考虑使用主从复制架构,将读请求分发到从库,减轻主库负担。
-
垂直和水平拆分:
- 对于极其庞大的数据库,考虑通过垂直拆分(分表)或水平拆分(分库分表)来减少单个数据库实例的负载。
步骤六:数据库维护
-
优化表和数据库:
- 定期执行
OPTIMIZE TABLE
,回收空间并重新组织表,特别是大表。 - 对于频繁更新和删除的表,定期执行
ANALYZE TABLE
和OPTIMIZE TABLE
,以更新统计信息,帮助查询优化器做出更好的决策。
- 定期执行
-
检查并修复数据表:
- 使用
CHECK TABLE
检查表的一致性,防止因表损坏影响性能。
- 使用
步骤七:监控和日志分析
-
监控工具:
- 使用MySQL性能监控工具,如
Percona Monitoring and Management (PMM)
、MySQL Enterprise Monitor
或开源工具如Monyog
,来实时监控MySQL性能指标。
- 使用MySQL性能监控工具,如
-
日志分析:
- 配置并分析MySQL的错误日志、慢查询日志、二进制日志等,帮助定位问题。
需要考虑的因素
- 业务需求变化:了解用户是否有新的业务需求,是否新增了大量的数据或请求,或者是否发生了不合理的业务操作。
- 数据增长:随着数据量的增加,原有的优化策略可能不再适用,需要根据数据量的增长做出新的调整。
- 并发量和查询模式:分析系统的并发请求量,特别是对于复杂的联接查询和聚合查询,优化策略可能会有所不同。
- 硬件资源:检查硬件是否满足当前的负载需求,特别是磁盘I/O和内存是否成为瓶颈。
2. 提高ETL进程性能
- 批量处理:
- 将单条数据处理模式改为批量处理。批量提取和批量插入可以显著减少数据库的I/O操作,避免频繁的网络和磁盘访问。
- 调整批量大小,过小的批量可能会造成过多的数据库连接和事务开销,而过大的批量可能会导致内存占用过高或事务超时。
- 并行化ETL任务:
- 将ETL任务分成多个并行子任务,分别处理不同的数据片段。例如,可以按日期、范围或者其他合适的条件将数据分区,多个ETL线程同时运行。
- 如果ETL工具支持,可以考虑并行化数据加载过程,减少总体的处理时间。
- 增量更新:
- 如果ETL任务是周期性地运行,并且只需要更新自上次执行以来发生变化的数据,采用增量提取(例如基于时间戳、主键增量)来减少每次ETL的处理数据量。
- 数据压缩和分块处理:
- 如果ETL过程中涉及到大量的文件操作,考虑压缩文件或者将数据分块存储,以减少磁盘I/O。
- 尽量排除不参与最后结果表生成的数据:
- 审查整条数据流中有没有过滤筛选的语句,或者通过表连接筛选的数据,或者没有被使用的数据列,将这些筛选的逻辑放在整个数据流的最前面,减少整个ETL过程的数据,从而减少资源占用提高性能。
- 在聚合层里运行开销较大的操作:
- 将运行开销较大的操作,比如大表连接和行列转换,尽量放在聚合层里进行,聚合层里数据行数较少,这样可以减少资源占用,提高性能。
3. 优化MySQL数据加载
- 使用批量插入:
- 批量插入(例如使用
INSERT INTO ... VALUES
的多行插入)比单行插入效率要高得多,尤其是在大量数据插入的场景下。 - 使用MySQL的
LOAD DATA INFILE
语句,这比逐行插入更加高效,尤其是在大规模数据导入时。
- 批量插入(例如使用
- 关闭事务自动提交:
- 在插入大量数据时,可以临时关闭事务的自动提交,批量插入后再一次性提交事务,这样可以大大减少事务提交的开销。
- 禁用外键约束和索引:
- 在ETL过程中,临时禁用外键约束和非必要的索引可以减少插入和更新时的开销。操作完成后,可以再重新启用这些约束和索引。
- 使用合适的字符集:
- 使用适当的字符集(如UTF-8)可以避免数据存储中的编码问题,并减少字符集转换的开销。
4. 硬件优化
- 提升磁盘性能:
- 如果ETL过程中涉及大量的读写操作,可以考虑提升磁盘性能,如使用SSD而非HDD,或者使用RAID配置提高I/O性能。
- 增加内存:
- 增加服务器的内存容量,可以减少数据在ETL过程中频繁交换至磁盘的情况,尤其是在处理大型数据集时,内存充足的情况下可以提高缓存命中率。
- 优化网络:
- 如果ETL过程涉及到远程MySQL数据库,确保网络延迟最小化,考虑将数据库和ETL系统部署在同一局域网内,避免跨网段的高延迟。
5. 使用合适的ETL工具
- 选择高效的ETL工具:
- 使用合适的ETL工具(如Apache NiFi、Apache Spark、Talend、Informatica等)可以帮助你自动化和优化数据抽取、转换和加载的过程,许多现代ETL工具内置了并行处理、批量插入、增量更新等优化策略。
- 调优ETL工具配置:
- 根据数据量和ETL任务的特性,调整ETL工具的配置,例如批处理大小、并发连接数等,以获得更好的性能。
6. 监控与持续优化
- 监控ETL过程:
- 实时监控ETL任务的运行状况,包括数据库的性能、ETL的吞吐量、延迟等指标。通过监控可以快速发现瓶颈,并进行针对性的优化。
- 数据库和ETL过程的定期评估:
- 定期回顾和优化ETL过程,确保随着数据量的增长,性能仍然保持在合理范围内。考虑到数据库结构的变化、查询模式的变化等因素。
7.提高表和视图的读写效率
在MySQL中,提高表和视图的读写效率通常涉及数据库设计、查询优化和硬件配置等多个方面。以下是一些常见的方法来优化表和视图的读写效率:
1. 表的优化
- 使用合适的索引:通过创建索引来加速查询,特别是对经常用于
WHERE
、JOIN
、ORDER BY
等操作的字段。例如:- B-Tree索引:适用于范围查询和精确匹配。
- 哈希索引:适用于等值查询(仅限
MEMORY
引擎)。 - 全文索引:用于文本数据的搜索。
- 联合索引:当多个字段一起查询时,可以创建联合索引。
- 避免过多索引:尽管索引加速查询,但过多的索引会影响插入、更新和删除操作的性能,因为每次修改数据时,所有相关索引都需要更新。只创建必要的索引。
- 合理分表:对于非常大的表,可以考虑分区(Partitioning)或分表(Sharding),将数据分散存储到多个物理或逻辑区域中,降低单个表的数据量,提升查询效率。
- 数据类型优化:选择合适的数据类型来存储数据。避免使用过大的数据类型(例如,
VARCHAR(255)
可能过于浪费存储空间,可以考虑缩小长度)。 - 避免NULL值:尽量避免字段中存储NULL值,因为NULL值会影响索引的使用效率和查询性能。
2. 视图的优化
- 避免复杂的视图:视图本质上是一个查询的封装,但它可以隐式地增加查询的复杂度。尤其是包含多个表连接、子查询、聚合等操作的视图,查询时可能导致性能问题。尽量避免过于复杂的视图,特别是在高频查询中。
- 物化视图:MySQL不直接支持物化视图(Materialized View),但你可以通过定期更新的表来模拟物化视图,将计算结果存储在表中而不是每次查询时重新计算。
- 限制视图的字段:只选择你需要的列,而不是在视图中返回所有列,减少不必要的数据加载。
- 优化视图中的查询:确保视图中的查询已优化,包括使用索引、避免不必要的嵌套查询、使用合适的连接方式(如
INNER JOIN
)等。
3. 查询优化
- 避免全表扫描:确保查询能有效使用索引,避免全表扫描。可以通过
EXPLAIN
命令来查看查询执行计划,识别哪些查询未能使用索引。 - 查询条件优化:尽量使用精确的查询条件。避免使用
LIKE
(特别是以通配符开头的),因为这类查询通常无法使用索引。 - 避免不必要的排序和聚合:在不需要排序或聚合的情况下,避免使用
ORDER BY
和GROUP BY
。这类操作会增加计算开销。 - 分批处理:对于需要处理大量数据的操作(如批量插入、更新或删除),可以将大操作分成小批次进行,避免锁表和超时。
4. 表的存储引擎
- 选择合适的存储引擎:
- InnoDB:默认的事务型存储引擎,支持ACID事务,适合读写频繁的应用。对大多数应用来说,InnoDB是首选。
- MyISAM:适用于读取频繁但更新较少的场景。MyISAM的查询速度通常比InnoDB快,但不支持事务和行级锁。
- Memory:数据完全存储在内存中,适用于缓存或临时存储,读取速度非常快,但数据在服务器重启时会丢失。
- 优化InnoDB配置:对于InnoDB引擎,可以通过调整
innodb_buffer_pool_size
、innodb_log_file_size
等参数,增加内存缓存和日志文件的大小,减少磁盘I/O,提高性能。
5. 数据库服务器优化
- 增加硬件资源:增加服务器的内存、CPU和存储,尤其是在数据量和查询量较大的情况下,硬件资源的提升直接影响性能。
- 使用缓存机制:
- 查询缓存:MySQL的查询缓存(虽然在MySQL 8.0中已被弃用)可以提高重复查询的速度。如果数据库负载很高,可以考虑使用外部缓存层(如Redis或Memcached)来缓存热点数据,减少数据库的压力。
- InnoDB Buffer Pool:增大InnoDB的
innodb_buffer_pool_size
,使其能够缓存更多的数据页,减少磁盘I/O。
- 连接池:对于高并发的系统,使用数据库连接池来复用连接,避免频繁地建立和关闭数据库连接,减少开销。
6. 定期维护
- 优化表:定期运行
OPTIMIZE TABLE
命令来优化表,清理碎片,提高查询效率。 - 更新统计信息:使用
ANALYZE TABLE
来更新表的统计信息,帮助优化器选择更合适的查询计划。 - 删除过期数据:定期清理过期的或不再需要的数据,减少表的大小,避免不必要的存储开销。
8.提高只用于读取数据的表的读取效率
在 MySQL 中,如果表只用于读取数据(即没有频繁的写入操作)。如果表的规模特别大,读写分离、索引优化和缓存技术通常能带来较为显著的性能提升,可以通过以下几种方法来提高读取效率:
1. 优化查询结构
- 使用合适的索引:
- 主键索引:主键索引是最重要的,能显著提高数据查询效率。
- 非主键索引:根据查询的常用字段创建索引,特别是
WHERE
条件、JOIN
字段、ORDER BY
字段等。尽量避免在查询中创建过多的索引,以免影响性能。 - 覆盖索引(Covering Index):当索引包含查询中需要的所有列时,MySQL 可以直接从索引中获取数据,而不需要回表查询,从而提高效率。
- 避免全表扫描:确保查询条件能够利用索引,尽量避免全表扫描(例如避免在 WHERE 子句中使用不合适的字段,或者避免在索引字段上进行函数计算)。
2. 表结构优化
- 数据表分区(Partitioning):如果表的数据量非常大,可以考虑分区(Partition)表。分区可以将数据分割成多个逻辑部分,读取时只扫描相关的分区,从而提高查询效率。
- 表的归档与数据压缩:对于大数据量的表,定期归档旧数据,减少表的大小,或者使用 MySQL 提供的压缩存储格式(如
Barracuda
引擎的COMPRESSED
格式)。
3. 使用缓存技术
- 查询缓存:MySQL 提供查询缓存功能(虽然在 MySQL 8.0 中已经弃用)。如果你使用的是 MySQL 5.x 并且查询模式较为静态,可以启用查询缓存以减少对数据库的重复查询。
- 外部缓存:使用 Redis 或 Memcached 作为外部缓存层,将频繁查询的数据缓存到内存中,减少对数据库的访问次数,极大提高查询速度。
4. 调整数据库配置
- 调整缓冲区大小:增加
innodb_buffer_pool_size
(InnoDB 存储引擎的缓存池大小),可以将更多的数据缓存到内存中,提高读取效率。 - 调整查询缓存:虽然 MySQL 查询缓存已在 MySQL 8.0 中弃用,但在 MySQL 5.x 中,可以通过配置
query_cache_size
来提升读取性能。合理配置缓冲区,如key_buffer_size
(适用于 MyISAM 存储引擎),使缓存命中率更高。 - 调整排序与连接缓冲区:增加
sort_buffer_size
和join_buffer_size
可以提高复杂查询的排序和连接效率。
5. 使用合适的存储引擎
- InnoDB:如果你的表主要是读取操作,且你需要事务支持或高并发读写,InnoDB 存储引擎通常是更好的选择。它支持行级锁、MVCC(多版本并发控制)以及高效的磁盘I/O操作。
- MyISAM:对于只读的场景,如果不需要事务支持,可以考虑 MyISAM 引擎,它的查询性能通常比 InnoDB 更高,尤其是在读密集型场景下。
6. 数据预处理与优化
- 物化视图(Materialized Views):对于复杂的查询,可以将结果预先计算并存储在表中,定期更新。这样可以避免每次查询时都进行复杂计算,减少数据库负担。
- 分表:对于非常大的表,可以考虑将表拆分为多个小表(例如按时间分表),以减少单表的查询负担。
7. 利用读写分离
- 主从复制:对于大量的读取操作,可以采用主从复制架构,将读取操作分配到从库上,从而减轻主库的压力,提高读取效率。确保从库的数据同步延迟较低。
8. 查询优化
- **避免使用 SELECT ***:尽量避免使用
SELECT *
查询,明确列出需要的字段。这样不仅减少了传输的数据量,还能避免返回不必要的数据。 - LIMIT 子句优化:在大数据量的查询中,使用
LIMIT
限制返回的记录数,可以减少不必要的数据扫描和传输,特别是在分页查询时非常有用。 - EXPLAIN 分析查询计划:使用
EXPLAIN
语句分析查询的执行计划,找出可能的性能瓶颈。
9. 定期维护数据库
- 定期优化表:对于经常删除或更新数据的表,定期使用
OPTIMIZE TABLE
来优化表,减少碎片。 - 统计信息更新:定期更新表的统计信息(使用
ANALYZE TABLE
),确保查询优化器能够做出更好的决策。
相关文章:
稳定运行的以MySQL数据库为数据源和目标的ETL性能变差时提高性能方法和步骤
在ETL(Extract, Transform, Load)过程中,数据源和目标都为MySQL数据库时,性能变差可能由多种原因引起。提高以MySQL为数据源和目标的ETL性能需要综合考虑数据库性能、ETL任务的处理方式、硬件资源和工具的选择。通过批量处理、并行…...
Springboot(四十九)SpringBoot3整合jetcache缓存
上文中我们学习了springboot中缓存的基本使用。缓存分为本地caffeine缓存和远程redis缓存。现在有一个小小的问题,我想使用本地caffeine缓存和远程redis缓存组成二级缓存。还想保证他们的一致性,这个事情该怎么办呢? Jetcache框架为我们解决了这个问题。 JetCache是一个…...
JVM 参数前缀 -XX: 含义 详解
在 Java 虚拟机(JVM)中,参数前缀 -XX: 表示的是 JVM 的非标准(实验性)选项。这些参数用于调整和优化 JVM 的性能、垃圾回收行为、内存分配策略等。 1. 参数分类 -XX: 参数大致分为三类,根据其格式区分&…...
【Mac】安装Gradle
1、说明 Gradle 运行依赖 JVM,需要先安装JDK,Gradle 与 JDK的版本对应参见:Java Compatibility IDEA的版本也是有要求Gradle版本的,二者版本对应关系参见:Third-Party Software and Licenses 本次 Gradle 安装版本为…...
证明切平面过定点的曲面是锥面
目录 证明:切平面过定点的曲面是锥面. 证明:切平面过定点的曲面是锥面. 证明: 方法一: 设曲面 S : r r ( u , v ) S:\mathbf{r}\mathbf{r}(u,v) S:rr(u,v)的切平面过定点 P 0 P_0 P0,其位置向量为 p 0 . \mathbf{p}_0. p0…...
【WPS】【EXCEL】将单元格中字符按照分隔符拆分按行填充到其他单元格
问题:实现如下图的效果 解答: 一、函数 IFERROR(TRIM(MID(SUBSTITUTE($A$2,",",REPT(" ",LEN($A$2))),(ROW(A1)-1)*LEN($A$2)1,LEN($A$2))),"") 二、在单元格C2中填写如下函数 三、全选要填充的单元格并且按CTRLD 函数…...
工作:三菱PLC防止程序存储器爆满方法
工作:三菱PLC防止程序存储器爆满方法 一、防止程序存储器爆满方法1、编程时,添加行注释时,记得要选“外围”,这样不会占用PLC程序存储器内存;2、选择“外围”的注释,前面会有个*星号,方便检查 二…...
【计算机组成原理】1位预测机制与2位预测机制详解
1位预测机制与2位预测机制详解 在计算机体系结构中,分支预测是为了提高流水线效率而对分支指令执行结果进行预测的技术。1位预测机制和2位预测机制是两种常见的分支预测策略,它们通过预测分支是否发生来决定是否跳转。 一、1位预测机制 1位预测机制是…...
基于SpringBoot+Vue的靓车汽车销售网站-无偿分享 (附源码+LW+调试)
目录 1. 项目技术 2. 功能菜单 3. 部分功能截图 4. 研究背景 5. 研究目的 6. 可行性分析 6.1 技术可行性 6.2 经济可行性 6.3 操作可行性 7. 系统设计 7.1 概述 7.2 系统流程和逻辑 7.3 系统结构 8. 数据库设计 8.1 数据库ER图 (1)材料分…...
ESP32-S3模组上跑通ES8388(13)
接前一篇文章:ESP32-S3模组上跑通ES8388(12) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析了es8388_init函数中的第6段代码,本回继续往下解析。为了便于理解和回顾,再次贴出es8388_init函数源码,在…...
洛谷 P1651 塔(DP)
题目传送门https://www.luogu.com.cn/problem/P1651 解题思路 设 表示前 个积木,两塔高度差为 (第一个比第二个高多少),的最大高度。 易得: 首先,不选当前的积木: 其次,选当前…...
去哪儿Java开发面试题及参考答案
怎么设置缓存能更快让用户收到数据? 要设置缓存以更快让用户收到数据,可从以下几方面着手。首先,选择合适的缓存位置很关键。将缓存放置在离用户近的地方,如 CDN 缓存,能极大缩短数据传输距离与时间。对于动态内容,可在应用服务器本地设置内存缓存,像使用 Ehcache 等库,…...
DDOS分布式拒绝服务攻击
DDOS分布式拒绝服务攻击 简单来说 传统的DOS就是一台或者多台服务对一个受害目标(服务器,路由,ip,国家)进行攻击,当范围过大时就是DDOS。目的就是通过大规模的网络流量使得正常流量不能访问受害目标&…...
AI后端工程师面试题的内容
AI后端工程师面试题主要包括以下几个方面的内容: 一、技术基础和项目经验: 1. 微服务架构的理解和应用:请描述你对微服务架构的理解,并举例说明一个你参与过的微服务项目,阐述你在该项目中扮演的角色和所承…...
使用go语言写一个脚本 实现WebSockt连接 用户发送a 得到返回b
在Go语言中实现一个简单的WebSocket服务器,该服务器能够接收客户端发送的“a”并返回“b”,可以按照以下步骤进行。首先,确保你的环境中已经安装了Go语言环境。接下来,你需要安装一个WebSocket库来处理WebSocket连接。这里我们使用…...
浏览器中输入一个URL后,按下回车后发生了什么
URL ,统一资源定位符, 简单点就是网址 ip 或域名 端口号 资源位置 参数 锚点 大致流程 URL 解析DNS 查询TCP 连接处理请求接受响应渲染页面 1 .输入一个网址之后,首先浏览器通过查询 DNS ,查找这个 URL 的 IP …...
ISO26262-(Timing Monitoring)在多核MCU的TPU上功能安全ASILB与ASILD有什么区别
在多核微控制器(MCU)的时间保护方面,针对功能安全ASIL B与ASILD等级的设计和实施存在显著差异,这些差异主要体现在系统对时间关键性操作的保障程度、故障检测能力、以及系统响应的严格性上。 ASIL B 级别: 时间关键性:在ASIL B等级,系统设计注重于识别并处理大部分可能…...
【大数据学习 | 面经】Spark 3.x 中的AQE(自适应查询执行)
Spark 3.x 中的自适应查询执行(Adaptive Query Execution,简称 AQE)通过多种方式提升性能,主要包括以下几个方面: 动态合并 Shuffle 分区(Coalescing Post Shuffle Partitions): 当 …...
mdcsoft服务器网络安全解决方案-SQL注入解决
mdcsoft服务器网络安全解决方案 最近几周,很多站被SQL注入攻击频繁,很多服务器被入侵,网站被攻击,为解决以上问题,我们开发了 以下系列软件及制定了系列解决方案.追究原因,全部都是认为引起的,由…...
防火墙之自定义链
自定义链的概念 自定义链(Custom Chain)通常是指在计算机网络中,根据特定需求创建的自定义规则链。这些规则链可以用于处理网络数据包,例如防火墙规则、路由规则等。自定义链的主要目的是为了提高网络管理的灵活性和可定制性。 …...
【Go底层】time包中Timer定时器原理
目录 1、背景2、go版本3、源码解释【1】Timer结构【2】NewTimer函数解释【3】After和AfterFunc函数解释 4、Timer定时间隔执行任务5、总结 1、背景 之前讲过Ticker定时器,每隔一段时间往通道写入当前时间。time包中还提供了另一种定时器:Timerÿ…...
Python毕业设计选题:基于Flask的医疗预约与诊断系统
开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页 疾病信息 就诊信息 个人中心 管理员登录界面 管理员功能界面 用户界面 医生…...
Ajax基础总结(思维导图+二维表)
一些话 刚开始学习Ajax的时候,感觉很模糊,但是好像学什么都是这样的,很正常,但是当你学习的时候要持续性敲代码,边敲代码其实就可以理解很多了。然后在最后的总结,其实做二维表之后,就可以区分…...
Leetcode62. 不同路径(HOT100)
链接 我的代码: class Solution { public:int uniquePaths(int m, int n) {if(m<1||n<1)return 1;vector<vector<int>> dp(m,vector<int>(n));for(int i 0;i<m;i){for(int j 0;j<n;j){if(!i&&!j)dp[i][j] 0;else if(!i|…...
使用go实现一个简单的rpc
什么是rpc, rpc是干什么的?几种协议的压测数据对比:tcphttp 使用tcp实现一个简单的rpc服务 什么是rpc, rpc是干什么的? rpc的作用就是实现远程的服务调用 工作流程: 客户端携带服务信息(服务名,方法名)数据 去请求服务端,服务端拿到数据,解析后执行对应的方法,将结果返回给客…...
基于STM32的智能工业温度监测与控制系统设计
目录 引言系统设计 硬件设计软件设计系统功能模块 温度采集模块温控模块实时监控与报警模块数据记录与上传模块代码实现 4.1 温度采集模块4.2 温控模块4.3 实时监控与报警模块4.4 数据记录与上传模块系统调试与优化结论与展望 1. 引言 工业领域对温度的监控和控制至关重要&am…...
机器学习概述,特征工程简述2.1——2.3
机器学习概述: 1.1人工智能概述 达特茅斯会议—人工智能的起点 机器学习是人工智能的一个实现途径 深度学习是机器学习的一个方法发展而来 1.1.2 机器学习和深度学习能做什么 传统预测 图像识别 自然语言处理 1.2什么是机器学习 数据 模型 预测 从历史数…...
蓝桥杯准备训练(lesson1,c++方向)
前言 报名参加了蓝桥杯(c)方向的宝子们,今天我将与大家一起努力参赛,后序会与大家分享我的学习情况,我将从最基础的内容开始学习,带大家打好基础,在每节课后都会有练习题,刚开始的练…...
【导航查询】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...
k8s的数据库etcd报 etcdserver: mvcc: database space exceeded的处理办法
一.问题现象 公司的k8s集群的etcd配置是默认配置,其磁盘配置为2GB的配额,目前出现了数据写入失败的情况,报错Error: etcdserver: mvcc: database space exceeded。 二.处理思路 当etcd的磁盘使用达到2G后,可能会触发维护模式&am…...
【系统架构设计师】高分论文:论信息系统的安全与保密设计
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 摘要正文摘要 本人所在工作单位承担了我市城乡智慧建设工程综合管理平台项目的开发工作。我有幸参与了本项目,并担任架构师一职,全面负责项目的需求分析和系统设计等工作。城乡智慧建设工程综合管理平台项目包括…...
二分查找!
问题描述 小明在图书馆借阅书籍,图书馆的书籍在系统中按序号顺次排列,小明在借阅后,需在系统中从“在馆书籍列表”中将该书删除。请帮助小明编写一个函数,在现有列表{1, 3, 5, 6, 7, 10, 12, 14, 26, 32, 35, 39, 42, 45, 54, 56…...
学习方法的进一步迭代————4
今天又在怀疑第二大脑的可靠程度 为什么呢? 还是因为自己没记住东西,感觉没学到东西。 其实自己知道大脑本就不应该用来存放知识而是用来思考知识,但是自己还是陷在里面了,我觉得其本质不是因为认知还不够,也不是因为还有点不适…...
java将word docx pdf转换为图片(不需要额外下载压缩包,直接导入maven坐标)
(本代码实现的是将第1页转为图片,主要用于制作文件缩略图) pdf转图片容易 docx转图片麻烦,看其他博客可以直接导入maven坐标,但我知道那是需要付费且有时限的包 本着简单实用的心,我找到法子了 pdf转图片:有库直接转…...
Oracle 12c Data Guard 环境中的 GAP 修复方法
概述 上文中提到Oracle 12c 引入了多项新技术来简化 Data Guard 环境中的 GAP 修复过程,如(RECOVER … FROM SERVICE)。这些新特性不仅减少了操作步骤,还提高了效率和准确性。本文档将详细说明如何利用这些新特性进行 GAP 修复。…...
C语言:指针与数组
一、. 数组名的理解 int arr[5] { 0,1,2,3,4 }; int* p &arr[0]; 在之前我们知道要取一个数组的首元素地址就可以使用&arr[0],但其实数组名本身就是地址,而且是数组首元素的地址。在下图中我们就通过测试看出,结果确实如此。 可是…...
【Linux】理解文件系统
目录 理解磁盘物理结构存储结构 磁盘的逻辑结构逻辑抽象CHS && LBA地址的转化 文件系统块概念分区概念inode Ext2文件系统宏观认识Boot BlockBlock Group超级块(Super Block)块组描述符表(Group Descriptor Table)块位图&…...
Python爬虫——城市数据分析与市场潜能计算(Pandas库)
使用Python进行城市市场潜能分析 简介 本教程将指导您如何使用Python和Pandas库来处理城市数据,包括GDP、面积和城市间距离。我们将计算每个城市的市场潜能,这有助于了解各城市的经济影响力。 步骤 1: 准备环境 确保您的环境中安装了Python和以下库&…...
面向对象(二)——类和对象(上)
1 类的定义 做了关于对象的很多介绍,终于进入代码编写阶段。 本节中重点介绍类和对象的基本定义,属性和方法的基本使用方式。 【示例】类的定义方式 // 每一个源文件必须有且只有一个public class,并且类名和文件名保持一致! …...
嵌入式开发之ARM(一)
目录 1、认识RAM 1.2、ARM全球分布 1.3、ARM产品线 1.4、授权的厂商 1.5、ARM体系架构 1.6、ARM系统硬件组成和运行原理 2、搭建开发环境 3、ARM的工作模式及寄存器 3.1、ARM工作模式 3.2、ARM工作模式及寄存器框图 3.2.1、CPSR寄存器 1、认识RAM 成立于1990年11月,前…...
Ai编程cursor + sealos + devBox实现登录以及用户管理增删改查(十三)
一、什么是 Sealos? Sealos 是一款以 Kubernetes 为内核的云操作系统发行版。它以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,使企业能够像使用个人电脑一样简单地使用云。 二、适用场景 业务运…...
手机镜头组如此突出,考虑恢复以前设计
现在手头看重照相。结果导致的问题就是,在背部要突出很高,以容纳镜头组件。这种设计真的好吗?并不见得。真实照片: VIVO X200系列镜头组照片-CSDN博客 考虑到现在镜头的情形,我建议恢复以前的设计,就是把镜…...
debian ubuntu armbian部署asp.net core 项目 开机自启动
我本地的环境是 rk3399机器,安装armbian系统。 1.安装.net core 组件 sudo apt-get update && \sudo apt-get install -y dotnet-sdk-8.0或者安装运行库,但无法生成编译项目 sudo apt-get update && \sudo apt-get install -y aspnet…...
Linux lsmod命令用于显示已经加载到内核中的模块的状态信息
1、lsmod命令 Linux lsmod命令用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块&…...
新增工作台模块,任务中心支持一键重跑,MeterSphere开源持续测试工具v3.5版本发布
2024年11月28日,MeterSphere开源持续测试工具正式发布v3.5版本。 在这一版本中,MeterSphere新增工作台模块,工作台可以统一汇总系统数据,提升测试数据的可视化程度并增强对数据的分析能力,为管理者提供测试工作的全局…...
歇一歇,写写段子
无聊的日子都在写段子1.0 中学的时候喜欢看意林之类的杂志, 里面的作者用乱七八糟的理由跑去旅游,然后说“阻碍你脚步的永远只有逃离的勇气和对生活的热爱”, 我觉得太对了,可惜 12306 付款方式里没有勇气和热爱,不…...
【数据库系列】Spring Boot如何配置Flyway的回调函数
Flyway 提供了回调机制,使您能够在特定的数据库迁移事件发生时执行自定义逻辑。通过实现 Flyway 的回调接口,可以在迁移前后执行操作,如记录日志、执行额外的 SQL 语句等。 1. 创建自定义回调类 要配置 Flyway 的回调函数,需要创…...
Ubuntu源码安装gitlab13.7集群多前端《二》
Ubuntu源码安装gitlab13.7《一》 gitaly需要调整的服务 redis socket->ipbind ....* # 0.0.0.0pg vim /etc/postgresql/14/main/pg_hba.confhost all all ..../32 md5gitaly vim /home/git/gitaly/config.tomlbin_dir "/home/gi…...
QT5.14 QML串口助手
基于 QML的 串口调试助手 这个代码有缺失,补了部分代码 ASCII HEX 工程共享, Qt版本 5.14.1 COM_QML 通过百度网盘分享的文件:COM_QML.zip 链接:https://pan.baidu.com/s/1MH2d6gIPDSoaX-syVWZsww?pwd5tge 提取码:…...
SQL Server 实战 - 多种连接
目录 背景 一、多种连接 1. 复合连接条件 2. 跨数据库连接 3. 隐连接 4. 自连接 5. 多表外连接 6. UNION ALL 二、一个对比例子 背景 本专栏文章以 SAP 实施顾问在实施项目中需要掌握的 sql 语句为偏向进行选题: 用例:SAP B1 的数据库工具&am…...