稳定运行的以SQL Server数据库为数据源和目标的ETL性能变差时提高性能方法和步骤

news2024/12/26 19:04:09

在使用SQL Server作为数据源和目标的ETL(Extract, Transform, Load)过程中,当系统的性能变差时,可能是因为数据量增加、查询优化不当、硬件资源不足等原因。
提高ETL性能的关键在于数据处理的各个环节,包括SQL优化、硬件资源利用、批次处理、并行化处理等。优化工作需要根据具体场景,综合考虑数据源、目标数据库、ETL工具和硬件资源等因素,通过系统化的优化策略来提升ETL性能。
当一个稳定运行的 SQL Server 数据库的性能开始变差时,可以通过以下方法和步骤进行排查和优化。性能问题可能由多个因素引起,包括硬件资源、数据库配置、查询设计、索引优化等。
提高性能的方法和步骤可以从以下几个方面入手:

1. 优化数据库查询(SQL优化)

  • 查询分析和优化:使用 SQL Server ProfilerExecution Plans 来分析慢查询,确定瓶颈。查看哪些查询占用了大量的资源并加以优化。

  • 索引优化:确保数据源和目标表上有适当的索引。可以通过查看执行计划来找出缺失的索引,或是通过查询 sys.dm_db_missing_index_details 动态管理视图来查看缺失索引。根据建议创建缺失的索引。

    • 针对ETL任务中的数据提取过程,确保有合适的索引来加速查询。
    • 定期维护索引,包括重建和重组,以避免碎片化影响性能。
    • 缺失的索引:使用 sys.dm_db_missing_index_details 动态管理视图查看是否有缺失的索引。
    • 索引碎片:使用 sys.dm_db_index_physical_stats 查看索引碎片情况。如果碎片超过 30%,可以使用 ALTER INDEX REORGANIZEALTER INDEX REBUILD 命令对索引进行重建或重组。
    • 冗余的索引:定期审查和删除不再使用的索引,避免冗余索引占用资源。
    • 覆盖索引:创建覆盖索引,减少查询的回表操作,提升查询性能。
  • 查询重写:优化 SQL 查询,减少不必要的联接、子查询,或者合并多个查询。

  • 分页查询:如果需要处理大量数据,采用分页查询技术(如 ROW_NUMBER())分批次加载数据,避免一次性读取大量数据导致内存溢出或超时。

  • 执行计划分析:通过 SET STATISTICS IO ONSET STATISTICS TIME ON 语句查看查询的执行计划,识别查询的性能瓶颈。SQL Server Management Studio (SSMS) 也可以通过查询分析工具查看执行计划。

  • 慢查询:使用 sys.dm_exec_query_stats 动态管理视图查看最近执行的查询,识别执行时间过长的查询。

  • 优化查询

  • 确保查询使用了正确的索引。

  • 避免使用 SELECT *,只选择必要的字段。

  • 使用合适的 JOIN 类型,避免过多的嵌套查询。

  • 检查查询是否存在不必要的计算或临时表。

2. 分批处理(Batch Processing)

  • 批量处理数据:在ETL过程中,尤其是当处理大量数据时,避免一次性导入所有数据。可以将数据分成多个小批次来处理,这样能减少数据库负载和减少锁竞争。
  • 批次大小控制:根据硬件和数据库性能的具体情况调整批次大小,通常可以通过控制每次批次的数据量来避免内存溢出或数据库长时间处于锁定状态。

3. 数据源优化

  • 避免不必要的数据加载:仅加载ETL任务所需的数据,避免加载不必要的列或表。使用合适的过滤条件来减少数据传输量。
  • 在聚合层里运行开销较大的操作
    • 将运行开销较大的操作,比如大表连接和行列转换,尽量放在聚合层里进行,聚合层里数据行数较少,这样可以减少资源占用,提高性能。
  • 数据源表的分区:对于大表,考虑使用分区表,将数据按某个字段(如日期)进行分区,从而提高查询效率。特别是当需要处理历史数据时,分区能大大提高查询和更新效率。
  • 并行读取数据:如果SQL Server和ETL工具支持并行读取数据,适当调整并行度,允许多个线程并行从不同的分区或表中提取数据,从而加速数据抽取过程。

4. 目标数据库优化

  • 目标表索引:在加载数据到目标数据库时,可以暂时移除目标表的索引,在数据加载完成后再重建索引。这种方法可以避免在每条数据插入时都更新索引,从而提高加载速度。
  • 禁用约束和触发器:如果目标数据库表有外键约束或触发器,可以在ETL加载过程中暂时禁用它们。等数据加载完成后,再启用这些约束和触发器。
  • 批量插入(Bulk Insert):尽量使用 BULK INSERTbcp 工具来将大量数据导入到SQL Server中。这种方法远比逐行插入(INSERT INTO)要高效。
  • 最大服务器内存 (max server memory):确保 SQL Server 分配了足够的内存。过小的内存配置可能导致频繁的磁盘访问。
  • 并行度设置 (max degree of parallelism):根据硬件配置调整最大并行度。如果有多个 CPU 核心,适当提高并行度可能提升查询性能。
  • 锁定和事务隔离级别:检查是否存在锁竞争,影响查询的并发性。合理调整事务隔离级别,避免不必要的锁定。
  • 数据库自动统计信息更新:确保统计信息保持最新。可以通过 AUTO_UPDATE_STATISTICS 设置启用自动更新统计信息。

5. 查看死锁和阻塞

死锁和长时间的阻塞会导致系统性能下降。

  • 死锁监控:通过 SQL Server 的死锁图(sys.dm_exec_requestssys.dm_exec_sessionssys.dm_exec_query_plan)或 SQL Server Profiler 监控死锁事件。
  • 阻塞:检查是否存在长时间等待资源的会话。使用 sp_who2sys.dm_exec_requests 查询当前阻塞的会话,分析并解决阻塞问题。

6. 更新 SQL Server 和操作系统

确保 SQL Server 和操作系统都更新到最新的服务包和修补程序。SQL Server 的某些版本和补丁可能包含性能优化和 bug 修复。

7. 审查应用程序和连接

有时,性能问题可能来自于应用程序的设计或连接池设置。

  • 连接池配置:检查应用程序的数据库连接池配置,确保它不会导致过多的连接请求。
  • 长时间运行的事务:检查应用程序中是否有长时间运行的事务,这些事务可能会占用资源并导致性能下降。

8. 查询缓存和计划缓存

查询计划缓存可能会对性能产生影响。可以通过以下方式进行优化:

  • 计划缓存清理:有时候缓存中的执行计划会导致性能下降。可以使用 DBCC FREEPROCCACHE 清除缓存,强制 SQL Server 重新编译查询。
  • 重新编译查询:如果发现某些查询执行计划不理想,可以使用 OPTION (RECOMPILE) 强制 SQL Server 在执行时重新编译查询。

9. 性能监控与长期优化

定期监控数据库性能,识别趋势和潜在问题,以便进行预防性维护。可以使用 SQL Server 自带的性能监视工具如 SQL Server ProfilerDatabase Engine Tuning Advisor 或第三方工具来帮助分析和优化数据库性能。
定期的数据库维护是保证性能长期稳定的重要因素。

  • 持续监控性能:定期使用SQL Server自带的性能监控工具(如 SQL Server ProfilerDynamic Management Views 等)进行性能监控,实时发现性能瓶颈。
  • 自动化性能调优:通过SQL Server的自动调优功能,定期评估和调整数据库配置,例如自动创建缺失索引、自动调整查询计划等。
  • 数据库清理和整理:定期清理过期的或无效的数据,减少数据库大小。
  • 日志文件管理:确保日志文件不会无限制增长。定期备份事务日志,避免日志文件占用过多磁盘空间。
  • 定期重建索引和更新统计信息:建立定期维护计划,自动执行索引重建、碎片整理和统计信息更新等任务。

10. 硬件资源优化

  • 增加内存:ETL过程中大量的数据处理和转换可能需要较大的内存资源。增加SQL Server的内存分配,减少磁盘I/O操作,提高整体性能。检查 SQL Server 是否能够充分利用服务器的内存。可以使用 sys.dm_os_memory_objects 查看内存使用情况。如果服务器内存不足,可以考虑增加内存或调整 SQL Server 内存设置(max server memory)。
  • 优化磁盘I/O:确保SQL Server数据库存储在快速、冗余的磁盘阵列上(例如SSD)。优化数据库的文件分布,可以将日志文件和数据文件分开存储,避免I/O瓶颈。检查磁盘的读写性能,确保没有磁盘瓶颈。可以查看 sys.dm_io_virtual_file_stats 以获取磁盘 I/O 性能指标。
  • 使用并行处理:如果硬件资源允许,可以在SQL Server配置中启用并行处理选项,通过增加 CPU 核心数来提高并行执行能力。
  • CPU 使用率:查看是否存在 CPU 资源不足或过高的情况。可以通过任务管理器或 SQL Server 的 sys.dm_exec_requestssys.dm_exec_sessions 动态管理视图查看。
  • 网络带宽:检查数据库与应用程序之间的网络连接速度,确保没有网络瓶颈。

11. ETL工具优化

  • 并行化ETL任务:在ETL工具中启用并行任务执行。如果工具本身支持并行处理,可以通过拆分ETL任务为多个子任务,进而并行执行以提高整体处理速度。
  • 数据流优化:优化ETL工具的数据流设计,避免不必要的转换步骤,尽量减少内存占用和数据拷贝。

12. 日志和事务优化

  • 减少事务日志的写入:在ETL过程中,尽量减少日志写入,特别是在批量加载时。可以考虑将事务的隔离级别调低,如使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED,从而减少锁的竞争。
  • 使用最小化日志模式:对一些无需事务保护的ETL过程,使用最小化日志模式(如 BULK LOGGED)来提高加载速度。

13. 使用增量加载

  • 增量数据抽取:如果数据量很大,可以避免每次都全量抽取数据,采用增量抽取的方式,仅抽取自上次ETL运行以来发生变化的数据(例如,使用时间戳、变化数据捕获(CDC)等技术)。
  • 捕获变更数据(CDC/CT):使用SQL Server的变化数据捕获(CDC)功能来识别数据源中已经改变的记录,减少数据抽取量。

14. 定期数据库维护

  • 更新统计信息:确保SQL Server中表的统计信息是最新的。数据库查询优化器依赖统计信息来生成高效的查询计划,因此要定期更新统计信息。
  • 定期重新构建索引:定期重建或重组索引,避免索引碎片影响查询性能。可以使用 ALTER INDEX REBUILDREORGANIZE 来进行优化。

15. 提高表和视图的读写效率

在SQL Server中,提高表和视图的读写效率通常涉及多方面的优化技术。以下是一些常用的方法,分别针对表和视图的读写效率进行提升。

1. 表优化

提高表的读写效率通常可以从以下几个方面着手:

1.1 索引优化
  • 创建合适的索引:对于频繁查询的列,创建合适的索引(如覆盖索引、聚集索引等),可以显著提高查询性能。

  • 聚集索引:对于主键列或经常用作查询条件的列,创建聚集索引(Clustered Index)。聚集索引决定了数据的物理存储顺序。

  • 非聚集索引:对于经常用作过滤条件的列,可以创建非聚集索引。非聚集索引将数据存储在独立的结构中,并且包含指向实际数据行的指针。

  • 覆盖索引:如果查询只涉及索引中包含的列,使用覆盖索引可以避免访问表中的数据行,从而提高查询效率。

  • 索引维护:定期重建或重组索引,以防止索引碎片导致性能下降。可以使用 ALTER INDEX REBUILDALTER INDEX REORGANIZE 来维护索引。

1.2 分区表
  • 表分区:当表数据量非常大时,可以使用表分区(Partitioning)来将数据分散到多个物理存储单元上。分区表使得查询能仅扫描相关分区,而不是扫描整个表,从而提高查询性能。
1.3 减少锁争用
  • 行级锁:使用合适的事务隔离级别(如 READ COMMITTEDSNAPSHOT)以减少锁争用,避免在高并发环境下的性能瓶颈。
  • 适当使用锁提示:在必要时使用锁提示(如 WITH (NOLOCK))来减少锁带来的性能开销,但要注意可能导致脏读。
1.4 批量操作
  • 批量插入:使用 BULK INSERTINSERT INTO 时,分批次执行批量插入,避免一次性插入过多数据导致日志记录过大,影响性能。
1.5 数据类型和表设计
  • 合理的数据类型:选择合适的数据类型,避免使用过大的数据类型。例如,使用 INT 而非 BIGINT,使用 VARCHAR(50) 而非 VARCHAR(MAX) 等。
  • 归一化与反归一化:对于查询密集型的表,适当的反归一化可以减少联接操作,提高查询效率。
2. 视图优化

视图本质上是查询的封装,优化视图的读写效率也需要注意以下几点:

2.1 避免不必要的复杂视图
  • 避免嵌套视图:多个视图嵌套查询会导致查询计划变复杂,可能造成性能下降。尽量避免过度嵌套视图。
  • 简化视图中的查询:尽量保持视图查询的简单,避免冗余的计算和复杂的联接操作。避免在视图中使用 DISTINCTGROUP BY,这些操作通常会显著增加查询开销。
2.2 使用物化视图
  • SQL Server 并不直接支持物化视图(Materialized Views),但可以通过创建带有聚集索引的视图来达到类似物化视图的效果。通过定期刷新或手动更新视图数据,可以提高查询效率。
2.3 避免视图中的重复数据扫描
  • 对于复杂视图,如果涉及到多个表的联接,确保联接条件的合理性。尽量避免不必要的 JOIN 操作,特别是对大表的非等值联接。
2.4 避免视图中对大表的重复查询
  • 对于涉及大表的视图,避免多次查询同一个大表,可以将结果临时存储在表变量或临时表中,再进行联接操作。
2.5 避免在视图中使用函数
  • 尽量避免在视图中使用标量函数(例如 GETDATE())或复杂的计算,因为这些操作会影响查询的性能,尤其是当视图被频繁调用时。
2.6 查看执行计划
  • 查看视图的执行计划,确认查询没有不必要的全表扫描或资源密集型操作,及时调整视图查询的逻辑。
3. 查询优化
  • *避免SELECT 查询:只选择需要的列而不是 SELECT *,这样可以减少返回的数据量,提升性能。
  • 查询缓存:利用SQL Server的查询缓存机制,减少不必要的查询执行。如果相同的查询经常执行,可以使用 OPTION (RECOMPILE) 强制查询优化器重新编译查询计划。
  • 参数化查询:尽量使用参数化查询,而非动态SQL,这有助于SQL Server重用执行计划,减少编译开销。
4. 硬件和配置优化

除了数据库层面的优化,硬件和配置也会影响SQL Server的性能:

  • 内存:确保SQL Server有足够的内存来缓存数据和查询计划。
  • 磁盘I/O:使用快速磁盘,尤其是日志文件和数据文件应分开存储,并放置在高速磁盘上(如SSD)。
  • 处理器:SQL Server的性能也受到CPU性能的影响。多核处理器和高频率的CPU有助于加速计算密集型查询。
5. 定期维护

定期进行数据库的维护工作,包括:

  • 清理过期的索引和统计信息。
  • 更新统计信息。
  • 执行DBCC CHECKDB命令检查数据库完整性。

16. 提高只用于读取数据的表的读取效率

在SQL Server中,提高只用于读取数据的表的读取效率,可以采取以下几种优化策略:

1. 索引优化
  • 创建合适的索引:确保表上的查询列(尤其是 WHERE 子句、JOIN 子句、ORDER BY 等条件列)有合适的索引。

    • 覆盖索引:如果查询只需要某些列的数据,可以创建覆盖索引,使得查询只通过索引就能返回结果,而不需要访问实际的数据页。
    • 聚集索引(Clustered Index):选择最常用于查询的列(如主键或频繁查询的列)作为聚集索引。
    • 非聚集索引(Non-clustered Index):为其他常用的查询条件创建非聚集索引。
  • 避免过多索引:虽然索引可以提高读取效率,但过多的索引会增加维护成本,因此应避免为每个列都创建索引,选择最有可能提高查询性能的列进行索引。

2. 表分区
  • 分区表(Partitioning):如果表非常大且数据按某些列(如日期、地区等)分布,可以考虑将表分区。分区使得查询只针对相关的分区进行扫描,而不是整个表,从而提高查询效率。
3. 优化查询
  • 避免全表扫描:确保查询使用索引,避免查询使用不必要的全表扫描。
  • 使用适当的查询语句:确保SQL语句是高效的,例如避免在查询中使用SELECT *,而是只选择需要的列。
  • 查询缓存:SQL Server有查询计划缓存机制,可以通过查询计划的缓存来减少重复查询的编译时间。如果查询是相同的,可以确保SQL Server利用缓存。
4. 避免锁和争用
  • 使用适当的隔离级别:如果是纯只读操作,可以使用 READ COMMITTEDSNAPSHOT 隔离级别来减少锁的争用,特别是对于高并发读取的场景。
  • 优化锁策略:确保读取操作不会因锁而受到影响,可以使用 WITH (NOLOCK) 提示,虽然这样会允许读取到未提交的数据,但在某些只读操作中,可以提高查询性能。
5. 内存优化
  • SQL Server配置:确保SQL Server的内存配置适合数据库的工作负载,允许更多的查询数据在内存中缓存,减少磁盘I/O。
  • 数据缓存:通过 DBCC DROPCLEANBUFFERS 清除缓冲区,测试不同的查询性能时确保缓存不会影响结果。
6. 只读表优化
  • 标记只读表:将不再需要进行写入的表设为只读,以减少SQL Server对其的维护工作。可以通过 ALTER DATABASE 命令将数据库设为只读。
    ALTER DATABASE YourDatabase SET READ_ONLY;
    
  • 表压缩:如果表的大小很大,可以考虑启用表压缩,减少磁盘I/O。
    ALTER TABLE YourTable REBUILD WITH (DATA_COMPRESSION = PAGE);
    
    这可以显著减少磁盘空间的使用,并提高I/O性能。
7. 数据归档
  • 归档历史数据:如果表包含大量历史数据,考虑将历史数据移到其他表或数据库中,仅保留当前数据在原始表中进行高效读取。
8. 提高磁盘I/O性能
  • 使用快速存储介质:如果可能,选择SSD或更高性能的存储介质来存放数据库文件,以提高读取性能。
  • 优化数据库文件分布:将数据库文件、日志文件和临时文件存放在不同的物理磁盘上,以提高I/O性能。
9. 执行计划分析
  • 执行计划分析:定期分析查询的执行计划,找到慢查询的瓶颈,优化查询执行策略。可以使用 SQL Server Management Studio (SSMS) 查看执行计划,找出不合适的操作(例如表扫描、排序等)。

  • 使用 SET STATISTICS IO ON 查看查询的磁盘I/O统计信息,找出影响性能的高I/O查询。

10. 内存优化表(Memory-Optimized Tables)
  • 内存优化表:如果表只用于读取,可以考虑使用内存优化表(内存优化的表适合高并发读取),通过SQL Server的In-Memory OLTP功能,可以在内存中存储数据,极大地提升读取速度。
    CREATE TABLE dbo.MyMemoryOptimizedTable
    (
        Id INT PRIMARY KEY NONCLUSTERED,
        Data VARCHAR(100)
    ) WITH (MEMORY_OPTIMIZED = ON);
    

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

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

相关文章

力扣 三角dp

动态规划基础题,当前所在元素来自上一行的两列的值。 题目 从图可以看出,每一行的第一个数与最后一个数都是1,然后中间的数是来自它左上方和右上方的数的和。当然并不是要打印这个三角形的形状,因此可以想到正常的打印方式应该是…

Oracle检查加强版本

支持更丰富了,代码也更乱了 #!/bin/bash## 实例个数 告警日志 实例状态 会话 活动会话 锁 集群状态 服务状态 磁盘空间 侦听日志 ## 单机、RAC Linux、AIX 11g、19c、23ai ## 依赖adrci配置正常,也可以改为 getAlert() ## ver 1.2case uname inAIX)ps…

RoBERTa- 稳健优化的 BERT 预训练模型详解

一、引言 自 BERT(Bidirectional Encoder Representations from Transformers)问世,预训练语言模型在自然语言处理(NLP)领域掀起革命浪潮,凭卓越表现大幅刷新诸多任务成绩。RoBERTa 承继 BERT 架构&#x…

【流程图】各元素形状和含义

判定、文档、数据、数据库、流程处理节点 矩形 - 动词 平行四边形 - 图像 下波浪 - 数据 图片来源http://baike.cu12.com/bkss/62449.shtml

「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器

本篇将带你实现一个多滑块联动的控制器应用。用户可以通过拖动多个滑块,动态控制不同参数(如红绿蓝三色值),并实时显示最终结果。我们将以动态颜色调节为例,展示如何结合状态管理和交互逻辑,打造一个高级的…

PyQt6 开发基础

<?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Form</class><widget class"QWidget" name"Form"><property name"geometry"><rect><x>0<…

Kafka如何保证消息可靠?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka如何保证消息可靠&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka如何保证消息可靠&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka通过多种机制来确保消息的可靠性&#xff0c;主要包…

pytest(二)excel数据驱动

一、excel数据驱动 excel文件内容 excel数据驱动使用方法 import openpyxl import pytestdef get_excel():excel_obj openpyxl.load_workbook("../pytest结合数据驱动-excel/data.xlsx")sheet_obj excel_obj["Sheet1"]values sheet_obj.valuescase_li…

类和对象(中)(类的默认成员函数)+日期类实现

1.类的默认成员函数 默认成员函数就是用户没有显示实现&#xff0c;编译器会自动生成的成语函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成6个默认成员函数。C11后还增加了两个默认成员函数&#xff0c;移动构造和移动赋值&#xff08;这一节暂时…

详解版本控制工作原理及优势,常见的版本控制系统对比(HelixCore、Git、SVN等)

什么是版本控制软件&#xff1f;从基础层面来说&#xff0c;版本控制&#xff08;也可称版本管理&#xff09;就是随时间跟踪和管理文件变更的过程&#xff0c;而版本控制软件有助于实现这一过程的自动化。但这仅仅是其功能及其重要性的开端。 什么是版本控制&#xff1f; 版本…

记录一次网关异常

记一次网关异常 网关时不时就会出现下面的异常。关键是不知道什么时候就会报错&#xff0c;并且有时候就算什么都不操作&#xff0c;也会导致这个异常。 ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in schedul…

SpringMVC跨域问题解决方案

当Web应用程序尝试从一个源&#xff08;例如 http://localhost:9090&#xff09;向另一个不同的源&#xff08;例如 http://localhost:8080&#xff09;发起请求时&#xff0c;发现报错&#xff1a; 报错原因&#xff1a;请求被CORS策略拦截了 跨域问题概述 当Web应用程序尝试…

现在的电商风口已经很明显了

随着电商行业的不断发展&#xff0c;直播带货的热潮似乎正逐渐降温&#xff0c;而货架电商正成为新的焦点。抖音等平台越来越重视货架电商&#xff0c;强调搜索功能的重要性&#xff0c;预示着未来的电商中心将转向货架和搜索。 在这一转型期&#xff0c;AI技术与电商的结合为…

芯驰X9SP与汽车麦克风-打造无缝驾驶体验

当今汽车技术的进步不仅提升了驾驶体验&#xff0c;还改变了我们与车辆互动的方式。汽车麦克风作为车内语音控制系统的重要组成部分&#xff0c;正逐渐成为现代汽车的标配。 技术原理 汽车麦克风主要依赖于声音传感技术&#xff0c;通常包括电容式麦克风和动圈式麦克风。这些…

vue3项目搭建-6-axios 基础配置

axios 基础配置 安装 axios npm install axios 创建 axios 实例&#xff0c;配置基地址&#xff0c;配置拦截器,目录&#xff1a;utils/http.js 基地址&#xff1a;在每次访问时&#xff0c;自动作为相对路径的根 // axios 基础封装 import axios from "axios";…

【北京迅为】iTOP-4412全能版使用手册-第三十二章 网络通信-TCP套字节

iTOP-4412全能版采用四核Cortex-A9&#xff0c;主频为1.4GHz-1.6GHz&#xff0c;配备S5M8767 电源管理&#xff0c;集成USB HUB,选用高品质板对板连接器稳定可靠&#xff0c;大厂生产&#xff0c;做工精良。接口一应俱全&#xff0c;开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

量子人工智能产业发展现状及趋势(上)

文章目录 前言一、量子人工智能产业发展现状1.产业链上游&#xff1a;涵盖基础硬件与量子计算整机开发&#xff0c;参与厂商众多&#xff0c;发展相对成熟2.产业链中游&#xff1a;涉及人工智能算法与应用开发&#xff0c;参与企业均在积极探索以赢得市场先机3.产业链下游&…

企业如何构建自己的 AI 编码能力

文章摘要 在数字化转型的浪潮中&#xff0c;企业对于提升开发效率和代码质量的需求日益迫切。AI 编码能力作为一种新兴的技术力量&#xff0c;正逐渐成为企业技术竞争力的关键。本文将探讨企业如何结合代码大模型和私域数据&#xff0c;构建属于自己的 AI 编码能力。 全文阅读…

算法日记 40 day 单调栈

最后两题了&#xff0c;直接上题目。 题目&#xff1a;接雨水 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1…

SpringBoot集成Kafka和avro和Schema注册表

Schema注册表 为了提升kafka的性能&#xff0c;减少网络传输和存储的数据大小&#xff0c;可以把数据的schema部分单独存储到外部的schema注册表中&#xff0c;整体架构如下图所示&#xff1a; 1&#xff09;把所有数据需要用到的 schema 保存在注册表里&#xff0c;然后在记…