TDengine 性能监控与调优实战指南(二)

news2025/4/21 8:14:25

四、TDengine 性能调优实战

4.1 硬件层面优化

硬件是 TDengine 运行的基础,其性能直接影响着 TDengine 的整体表现。在硬件层面进行优化,就如同为高楼大厦打下坚实的地基,能够为 TDengine 的高效运行提供有力支持。

  • CPU:CPU 作为计算机的核心组件,其性能对 TDengine 的影响至关重要。在数据处理过程中,CPU 负责执行各种计算任务,如数据的插入、查询、聚合等。选择高性能的 CPU,如具有多核、高主频的处理器,能够显著提升 TDengine 的处理能力。在大数据量的物联网场景中,大量的传感器数据需要实时处理和分析,多核 CPU 可以并行处理这些任务,大大提高处理效率。合理配置 CPU 核数也非常关键,根据 TDengine 的运行需求和业务负载,将 CPU 核数配置为与业务需求相匹配的数值,能够充分发挥 CPU 的性能优势。如果业务负载较轻,过多的 CPU 核数会造成资源浪费;而如果业务负载较重,CPU 核数不足则会导致性能瓶颈。
  • 内存:内存是数据处理和存储的临时空间,充足的内存能够确保 TDengine 快速读写数据。在处理大规模数据时,如果内存不足,TDengine 就需要频繁地进行磁盘 I/O 操作来交换数据,这会极大地降低系统性能。为 TDengine 分配足够的内存是提高性能的重要措施之一。在配置内存时,需要根据业务数据量和并发访问情况来确定合适的内存大小。在金融交易数据处理场景中,由于交易数据量巨大且需要实时处理,就需要为 TDengine 分配较大的内存,以保证数据的快速读写和查询的高效执行。还可以通过调整内存分配策略,如增加缓存区大小,来提高内存的使用效率。
  • 磁盘:磁盘的性能对 TDengine 的数据存储和读取有着直接的影响。选择高速磁盘,如 SSD(固态硬盘),能够大幅提高数据的读写速度。SSD 具有读写速度快、响应时间短等优点,相比传统的机械硬盘,能够显著提升 TDengine 的性能。在数据密集型的应用场景中,如日志存储和分析,大量的数据需要频繁地写入和读取磁盘,使用 SSD 可以大大提高数据处理的效率。优化磁盘 I/O 设置也非常重要,如调整磁盘队列深度、优化磁盘调度算法等,能够进一步提升磁盘的性能。合理规划磁盘空间,避免磁盘空间不足对 TDengine 性能产生影响。

4.2 配置参数调优

TDengine 的配置参数众多,这些参数就像精细的调节旋钮,对其性能有着至关重要的影响。合理调整配置参数,能够让 TDengine 更好地适应不同的业务场景,发挥出最佳性能。

4.2.1 核心配置参数解读
  • buffer:buffer 是 TDengine 用于缓存数据的内存空间大小,它就像一个临时的数据仓库。较大的 buffer 可以容纳更多的数据,减少数据写入磁盘的次数,从而提高写入性能。在物联网数据采集场景中,大量的传感器数据会在短时间内涌入,如果 buffer 过小,数据就需要频繁地写入磁盘,导致写入速度变慢。但是,过大的 buffer 也会占用过多的内存资源,影响系统的整体性能,需要根据实际情况进行权衡。
  • cache:cache 用于设置内存缓存的大小,它是提高查询性能的关键参数。TDengine 会将经常访问的数据缓存到内存中,当再次查询这些数据时,可以直接从缓存中获取,而不需要从磁盘读取,从而大大提高查询速度。在金融交易数据查询场景中,频繁查询的交易数据如果能够被缓存到内存中,就可以快速响应查询请求,提高业务处理效率。需要注意的是,cache 的大小也需要根据系统内存和业务需求进行合理设置。
  • blocks:blocks 配置虚拟节点可以拥有的内存块数量,与 cache 一起决定了虚拟节点占用的内存大小。每个内存块都有一定的大小,通过调整 blocks 的数量,可以优化内存的使用效率。例如,在高并发的业务场景中,适当增加 blocks 的数量,可以提高数据的处理能力,但同时也会增加内存的占用。
  • numOfCommitThreads:numOfCommitThreads 表示每个节点上的落盘线程数量,它决定了数据从内存持久化到磁盘的速度。在数据写入频繁的场景中,增加落盘线程数量可以加快数据落盘的速度,减少内存中的数据积压,从而提高系统的稳定性和写入性能。如果落盘线程数量过少,在高并发写入时,就可能导致内存中的数据无法及时落盘,影响系统的正常运行。
4.2.2 根据业务场景调整参数

不同的业务场景对 TDengine 的性能需求各不相同,因此需要根据具体的业务场景来调整配置参数,以实现性能的最优。

  • 物联网数据采集场景:在物联网数据采集场景中,数据具有高并发、高频次写入的特点。针对这种场景,应适当增大 buffer 和 cache 的大小,以容纳更多的缓存数据,减少磁盘 I/O 操作。可以将 buffer 设置为较大的值,如 64MB 或 128MB,cache 也相应增大。增加 numOfCommitThreads 的数量,以加快数据落盘速度,确保数据的及时持久化。根据设备数量和数据量,合理调整其他参数,如 maxVgroupsPerDb 等,以优化数据的分布和存储。
  • 金融交易数据处理场景:金融交易数据处理场景对数据的准确性和实时性要求极高,同时存在大量的复杂查询操作。在这种场景下,需要确保 cache 足够大,以缓存频繁查询的交易数据,提高查询响应速度。可以将 cache 设置为物理内存的较大比例,如 50% 或更高。优化查询相关的参数,如调整查询缓存策略、合理设置索引等,以提高查询性能。由于金融数据的重要性,还需要关注数据的安全性和一致性,相应地调整数据备份和恢复相关的参数。
  • 工业监控场景:工业监控场景的数据量较大,且数据的存储和查询具有一定的周期性。对于这种场景,可以根据数据的存储周期和查询频率,合理设置数据保留时间和缓存策略。例如,对于短期需要频繁查询的数据,可以增加 cache 的大小;对于长期存储但不经常查询的数据,可以适当减小缓存,以节省内存资源。优化数据分区策略,按时间或设备进行分区,提高数据的存储和查询效率。根据工业监控系统的实时性要求,调整数据写入和查询的优先级,确保关键数据的及时处理。

4.3 数据库设计优化

数据库设计是 TDengine 性能优化的关键环节,合理的数据库设计能够提高数据的存储和查询效率,就像精心规划的城市布局能够使交通更加顺畅一样。

4.3.1 表结构设计原则
  • 合理选择数据类型:在 TDengine 中,选择合适的数据类型对于节省存储空间和提高查询性能至关重要。对于整数类型的数据,应根据数据的范围选择合适的整数类型,如 TINYINT、SMALLINT、INT 或 BIGINT。如果数据范围较小,使用 TINYINT 或 SMALLINT 可以节省存储空间;对于浮点数类型的数据,应根据精度要求选择 FLOAT 或 DOUBLE。如果对精度要求不高,使用 FLOAT 可以减少存储空间的占用。对于字符串类型的数据,应根据实际长度选择合适的字符串类型,如 VARCHAR 或 NCHAR,并尽量避免使用过长的字符串。
  • 设计超级表与子表关系:TDengine 的超级表和子表结构是其独特的数据模型,充分利用这种结构可以提高数据的管理和查询效率。超级表用于定义一组具有相同结构和属性的子表的模板,子表则是超级表的实例。在设计超级表和子表关系时,应根据业务需求合理划分超级表和子表。在物联网设备监控场景中,可以将所有设备的数据定义为一个超级表,每个设备的数据作为一个子表。通过这种方式,可以方便地对设备数据进行统一管理和查询,同时利用超级表的标签功能,可以快速过滤和查询特定设备的数据。
4.3.2 数据分区策略
  • 按时间分区:按时间分区是 TDengine 中常用的数据分区策略之一,它将数据按照时间范围划分为不同的分区。在时间序列数据处理中,数据通常具有较强的时间相关性,按时间分区可以将不同时间段的数据存储在不同的分区中,提高查询效率。例如,在电力数据监控中,可以按天或按小时对数据进行分区。当查询某一天或某一时间段的数据时,只需要在相应的分区中进行查询,而不需要扫描整个数据集,从而大大提高查询速度。
  • 按设备 ID 分区:在一些场景中,按设备 ID 分区也是一种有效的策略。它将不同设备的数据存储在不同的分区中,便于对设备数据进行管理和查询。在智能家居系统中,每个设备都有唯一的设备 ID,按设备 ID 分区可以将不同设备的数据分开存储,当需要查询某个设备的数据时,可以直接定位到对应的分区,提高查询效率。还可以根据设备的类型、地理位置等属性进行分区,进一步优化数据的管理和查询。

4.4 写入性能优化

写入性能是 TDengine 性能的重要指标之一,优化写入性能可以确保大量数据能够快速、准确地存储到数据库中。

4.4.1 批量写入

批量写入是提高写入性能的有效方法之一,它通过减少写入操作的次数,降低系统开销。在 TDengine 中,可以将多条数据组合成一个批量写入请求,一次性发送到服务器。例如,在物联网数据采集场景中,每个传感器可能会产生大量的数据,如果每次只写入一条数据,会产生大量的网络请求和系统开销。而将多条数据批量写入,可以大大减少网络请求的次数,提高写入效率。下面是一个使用 Python 语言进行批量写入的代码示例:

 

import taos

# 建立数据库连接

conn = taos.connect(host="localhost", user="root", password="taosdata", database="test")

cursor = conn.cursor()

# 准备批量写入的数据

data = [

(1619875200000, 10.5, 220, 0.8, "device1"),

(1619875201000, 10.6, 221, 0.81, "device1"),

(1619875202000, 10.7, 222, 0.82, "device2"),

# 更多数据...

]

# 执行批量写入

sql = "INSERT INTO meters (ts, current, voltage, phase, device_id) VALUES (%s, %s, %s, %s, %s)"

cursor.executemany(sql, data)

# 提交事务

conn.commit()

# 关闭连接

cursor.close()

conn.close()

在上述代码中,使用executemany方法将多条数据一次性插入到数据库中,大大提高了写入效率。

4.4.2 多线程写入

多线程写入是利用系统的多核资源,同时进行多个写入操作,从而提高写入性能。在高并发写入场景中,多线程写入可以充分发挥系统的潜力,加快数据的写入速度。例如,在大规模的物联网设备数据采集场景中,多个设备同时上传数据,使用多线程写入可以同时处理这些数据,避免写入操作的阻塞。下面是一个使用 Python 多线程进行写入的代码示例:

 

import taos

import threading

# 数据库连接信息

host = "localhost"

user = "root"

password = "taosdata"

database = "test"

# 写入数据的函数

def write_data(device_id):

conn = taos.connect(host=host, user=user, password=password, database=database)

cursor = conn.cursor()

for i in range(100):

ts = 1619875200000 + i * 1000

current = 10.0 + i * 0.1

voltage = 220 + i

phase = 0.8 + i * 0.01

sql = "INSERT INTO meters (ts, current, voltage, phase, device_id) VALUES (%s, %s, %s, %s, %s)"

cursor.execute(sql, (ts, current, voltage, phase, device_id))

conn.commit()

cursor.close()

conn.close()

# 创建多个线程进行写入

threads = []

device_ids = ["device1", "device2", "device3", "device4"]

for device_id in device_ids:

t = threading.Thread(target=write_data, args=(device_id,))

threads.append(t)

t.start()

# 等待所有线程完成

for t in threads:

t.join()

在上述代码中,创建了多个线程,每个线程负责写入一个设备的数据,通过多线程并发执行,提高了整体的写入性能。在使用多线程写入时,需要注意线程安全问题,避免多个线程同时访问和修改共享资源导致的数据不一致。

4.5 查询性能优化

查询性能直接影响用户对 TDengine 的使用体验,优化查询性能可以使数据的检索更加快速、高效。

4.5.1 查询语句优化
  • 避免全表扫描:全表扫描是查询性能的一大瓶颈,它会扫描整个数据表,消耗大量的时间和资源。为了避免全表扫描,应尽量在查询条件中使用索引字段。在 TDengine 中,时间主列是默认的索引列,因此在查询时,尽量使用时间范围作为查询条件。例如,查询某一天的数据时,可以使用WHERE ts >= '2023-01-01 00:00:00' AND ts < '2023-01-02 00:00:00'这样的条件,利用时间索引快速定位到所需的数据。如果查询条件中涉及其他字段,可以考虑为这些字段创建索引,提高查询效率。
  • 合理使用索引:索引就像书籍的目录,能够快速定位到所需的数据。在 TDengine 中,除了时间主列的默认索引外,可以根据查询需求为其他字段创建索引。在查询条件中经常使用的标签列,可以为其创建标签索引。例如,在设备监控场景中,如果经常根据设备 ID 查询数据,可以为设备 ID 列创建索引。创建索引时需要注意,索引虽然可以提高查询性能,但也会占用一定的存储空间和写入性能,因此需要根据实际情况权衡利弊,只创建必要的索引。
  • 优化聚合函数:在使用聚合函数时,如 SUM、AVG、COUNT 等,应尽量减少不必要的计算。可以通过合理设计查询语句,避免重复计算。在计算一段时间内的平均电流时,可以先根据时间范围过滤数据,再进行聚合计算,而不是先对整个数据表进行聚合计算,再过滤结果。这样可以减少计算量,提高查询效率。还可以使用 TDengine 提供的一些优化函数,如FIRST、LAST等,这些函数在处理时序数据时具有更高的效率。
4.5.2 缓存策略

TDengine 的缓存机制可以将频繁访问的数据存储在内存中,减少数据读取时间,提高查询性能。了解和利用好缓存策略,能够进一步优化查询性能。

  • 查询缓存:TDengine 会自动缓存查询结果,当相同的查询再次执行时,可以直接从缓存中获取结果,而不需要重新执行查询。为了充分利用查询缓存,应尽量保持查询语句的一致性。在编写查询代码时,避免使用动态生成的查询语句,除非必要。如果查询条件经常变化,缓存的命中率会降低,影响查询性能。可以将一些常用的查询语句进行封装,确保每次查询时语句的一致性,提高缓存的命中率。
  • 数据缓存:除了查询缓存,TDengine 还会缓存数据块。当查询数据时,如果所需的数据块已经在缓存中,就可以直接从缓存中读取,而不需要从磁盘读取。为了提高数据缓存的命中率,应根据业务需求合理调整缓存参数,如 cache 的大小。在数据访问模式比较集中的场景中,可以适当增大 cache 的大小,以缓存更多的数据块。还可以通过分析数据的访问频率和热点数据,优化缓存的管理策略,将热点数据优先缓存到内存中,提高查询性能。

五、案例分析

5.1 案例背景介绍

某大型智能工厂,拥有数千台生产设备,这些设备通过传感器实时采集大量的生产数据,如温度、压力、转速等。数据采集频率高,每秒每个设备可产生多条数据。工厂利用这些数据进行设备状态监控、生产效率分析以及质量控制等业务。

随着工厂业务的不断拓展,设备数量逐渐增加,数据量呈爆发式增长。原本运行良好的 TDengine 数据库系统开始出现性能问题。数据写入速度明显变慢,部分设备的数据甚至出现延迟写入的情况,这使得实时监控和预警功能受到影响,无法及时发现设备的异常状态。查询响应时间也大幅增加,一些复杂的生产数据分析查询需要等待数分钟才能得到结果,严重影响了生产决策的及时性和准确性。这些性能问题给工厂的生产运营带来了极大的困扰,急需进行性能监控与调优。

5.2 性能监控过程

为了找出性能问题的根源,工厂技术团队首先使用 taosKeeper 和 TDinsight 对 TDengine 进行全面的性能监控。通过 taosKeeper 配置,使其定期采集 TDengine 的各项性能指标,并将数据存储到 TDengine 的 log 数据库中。然后,在 Grafana 中导入 TDinsight 仪表板,将采集到的数据进行可视化展示。

经过一段时间的监控,从可视化图表中发现,CPU 使用率在数据写入高峰时段经常达到 90% 以上,内存使用率也长期保持在 80% 左右,磁盘 I/O 读写繁忙,网络带宽利用率较高。在查询性能方面,复杂查询的响应时间随着数据量的增加而急剧上升。通过进一步分析监控数据,发现写入缓慢主要是由于写入线程数不足,导致数据在内存中积压,无法及时落盘;查询超时则是因为部分查询语句没有合理利用索引,导致全表扫描,消耗了大量的系统资源。

5.3 调优措施实施

针对性能监控发现的问题,技术团队采取了一系列调优措施。

  • 硬件升级:增加服务器的 CPU 核数,从原来的 8 核升级到 16 核,以提高数据处理能力;将内存容量从 32GB 扩展到 64GB,为数据缓存和处理提供更充足的空间;更换高速 SSD 磁盘,提升磁盘 I/O 性能,加快数据的读写速度。
  • 参数调整:在 TDengine 的配置文件中,将写入线程数numOfCommitThreads从默认的 4 增加到 8,以加快数据落盘速度;增大缓存参数cache的大小,从原来的 10GB 调整为 20GB,提高数据查询的命中率;调整buffer的大小,使其能够容纳更多的缓存数据,减少磁盘 I/O 操作。
  • 数据库设计优化:对表结构进行优化,根据设备类型和数据采集频率,合理划分超级表和子表。对于数据采集频率相同、设备类型相似的数据,归为同一个超级表,每个设备的数据作为子表,这样可以提高数据管理和查询的效率。重新设计数据分区策略,按时间和设备 ID 进行双重分区,既便于按时间范围查询数据,又能快速定位到特定设备的数据,提高查询性能。
  • 写入性能优化:在数据写入代码中,采用批量写入的方式,将多条数据组合成一个批量写入请求,减少写入操作的次数,提高写入效率。引入多线程写入机制,利用服务器的多核资源,同时进行多个写入操作,进一步提升写入速度。
  • 查询性能优化:对查询语句进行全面审查和优化,避免全表扫描。在查询条件中尽量使用索引字段,为经常用于查询的字段创建索引。优化聚合函数的使用,减少不必要的计算,提高查询效率。调整查询缓存策略,增加查询缓存的大小和有效期,提高查询缓存的命中率。

5.4 调优效果评估

经过一段时间的运行和监测,对比调优前后的性能指标,发现调优效果显著。写入速度大幅提升,从原来每秒写入数千条数据提升到每秒写入数万条数据,基本能够满足设备实时数据采集的需求,数据延迟写入的问题得到了有效解决。查询响应时间明显缩短,复杂查询的响应时间从原来的数分钟缩短到数秒,简单查询几乎可以实时返回结果,大大提高了生产数据分析的效率和及时性,为生产决策提供了有力支持。CPU 使用率在高峰时段也能保持在 70% 以下,内存使用率稳定在 60% 左右,磁盘 I/O 和网络带宽的利用率也处于合理范围内,系统整体性能得到了极大的提升,能够稳定高效地支持工厂的生产运营。

六、总结与展望

6.1 总结性能监控与调优要点

在本次关于 TDengine 性能监控与调优的探索中,我们深入了解了多个关键方面。监控指标上,CPU 使用率、内存使用率、磁盘 I/O、网络 I/O 以及查询与写入性能,这些指标是判断 TDengine 运行状况的重要依据,它们如同人体的各项生理指标,反映着系统的健康程度。借助 taosKeeper 和 TDinsight 等工具,我们能够全面、准确地获取这些指标,并通过 Grafana 将其可视化,使复杂的数据变得直观易懂,方便我们及时发现性能问题。

在性能问题排查时,从硬件层面的 CPU、内存、磁盘资源检查,到网络层面的连接稳定性测试,再到配置参数层面的精细调整以及业务逻辑层面的合理性审查,每一个环节都至关重要,需要我们层层递进,抽丝剥茧,才能找到问题的根源。

调优措施更是涵盖了硬件、配置参数、数据库设计、写入和查询性能等多个维度。硬件层面的升级为 TDengine 提供了更强大的运行基础;配置参数的合理调整使其能够更好地适应不同业务场景;优化数据库设计,如合理选择数据类型、设计超级表与子表关系以及制定科学的数据分区策略,能够提高数据的存储和查询效率;而写入性能优化中的批量写入和多线程写入,以及查询性能优化中的查询语句优化和缓存策略的运用,都能显著提升 TDengine 的整体性能。

6.2 展望未来发展趋势

展望未来,TDengine 在性能优化方面有着广阔的发展空间。在新技术应用上,随着人工智能和机器学习技术的不断发展,TDengine 有望引入相关算法,实现智能化的性能优化。通过对大量历史性能数据的学习和分析,自动调整配置参数,预测性能瓶颈,并提前采取优化措施,从而实现系统性能的自优化和自调整。随着分布式计算技术的不断演进,TDengine 可能会进一步优化其分布式架构,更好地利用分布式资源,提高集群的扩展性和性能稳定性,以应对更加复杂和大规模的业务场景。

在功能改进方面,TDengine 可能会增加更多丰富的数据类型和函数,以满足不同行业和业务场景的多样化需求。在金融领域,可能需要支持更多复杂的金融数据类型和计算函数;在物联网领域,对于传感器数据的处理可能需要更专业的函数和算法。TDengine 还可能会加强与其他大数据工具和平台的集成,如与 Hadoop、Spark 等的深度融合,实现数据的无缝流转和协同处理,进一步提升数据处理和分析的效率。相信随着技术的不断进步和创新,TDengine 将在时序数据处理领域发挥更加重要的作用,为各行业的数字化发展提供更强大的支持。

七、参考资料

  • TDengine 官方文档:TDengine 文档 | TDengine 文档 | 涛思数据,提供了全面的产品介绍、安装指南、使用教程以及详细的技术文档,是深入了解 TDengine 的重要资料。
  • TDengine GitHub 仓库:https://github.com/taosdata/TDengine,包含了 TDengine 的源代码、社区讨论、问题反馈等内容,有助于跟踪项目的最新进展和参与社区开发。
  • 《TDengine 性能优化最佳实践》:https://www.taosdata.com/blog/2023/08/15/20230815.html,详细介绍了 TDengine 性能优化的具体方法和案例分析,为实际操作提供了宝贵的经验。
  • TDengine 社区论坛:https://forum.taosdata.com/,是 TDengine 用户交流和分享经验的平台,在这里可以获取到其他用户在使用过程中遇到的问题及解决方案,以及与 TDengine 技术团队进行沟通交流。

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

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

相关文章

【AI图像创作变现】02工具推荐与差异化对比

引言 市面上的AI绘图工具层出不穷&#xff0c;但每款工具都有自己的“性格”&#xff1a;有的美学惊艳但无法微调&#xff0c;有的自由度极高却需要动手配置&#xff0c;还有的完全零门槛适合小白直接上手。本节将用统一格式拆解五类主流工具&#xff0c;帮助你根据风格、控制…

相控阵列天线:原理、优势和类型

本文要点 相控阵列天线 &#xff08;Phased array antenna&#xff09; 是一种具有电子转向功能的天线阵列&#xff0c;不需要天线进行任何物理移动&#xff0c;即可改变辐射讯号的方向和形状。 这种电子转向要归功于阵列中每个天线的辐射信号之间的相位差。 相控阵列天线的基…

【HD-RK3576-PI】Ubuntu桌面多显、旋转以及更新Logo

硬件&#xff1a;HD-RK3576-PI 软件&#xff1a;Linux6.1Ubuntu22.04 在基于HD-RK3576-PI硬件平台运行Ubuntu 22系统的开发过程中&#xff0c;屏幕方向调整是提升人机交互体验的关键环节。然而&#xff0c;由于涉及uboot引导阶段、内核启动界面、桌面环境显示全流程适配&#x…

树莓派超全系列教程文档--(36)树莓派条件过滤器设置

树莓派条件过滤器设置 条件过滤器[all] 过滤器型号过滤器[none] 过滤器[tryboot] 过滤器[EDID*] 过滤器序列号过滤器GPIO过滤器组合条件过滤器 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 条件过滤器 当将单个 SD 卡&#xff08;或卡图像&am…

jetpack之LiveData的原理解析

前言 在一通研究下&#xff0c;我打算LiveData的解析通过从使用的方法上面切入进行LiveData的工作原理分析&#x1f60b;。感觉这样子更能让大家伙理解明白&#xff0c;LiveData的实现和Lifecycle分不开&#xff0c;并且还得需要知道LiveData的使用会用到什么样的方法。所以&a…

【微知】服务器如何获取服务器的SN序列号信息?(dmidecode -t 1)

文章目录 背景命令dmidecode -t的数字代表的字段 背景 各种场景都需要获取服务器的SN&#xff08;Serial Number&#xff09;&#xff0c;比如问题定位&#xff0c;文件命名&#xff0c;该部分信息在dmi中是标准信息&#xff0c;不同服务器&#xff0c;不同os都能用相同方式获…

51c大模型~合集119

我自己的原文哦~ https://blog.51cto.com/whaosoft/13852062 #264页智能体综述 MetaGPT等20家顶尖机构、47位学者参与 近期&#xff0c;大模型智能体&#xff08;Agent&#xff09;的相关话题爆火 —— 不论是 Anthropic 抢先 MCP 范式的快速普及&#xff0c;还是 OpenAI …

Vue3 + TypeScript,关于item[key]的报错处理方法

处理方法1&#xff1a;// ts-ignore 注释忽略报错 处理方法2&#xff1a;item 设置为 any 类型

【记录】服务器用命令开启端口号

这里记录下如何在服务器上开启适用于外界访问的端口号。 方法 1 使用防火墙 1 su &#xff0c;命令 输入密码 切换到root节点 2 开启防火墙 systemctl start firewalld3 配置开放端口 firewall-cmd --zonepublic --add-port8282/tcp --permanent4 重启防火墙 firewall-cmd…

OpenCV基础01-图像文件的读取与保存

介绍: OpenCV是 Open Souce C omputer V sion Library的简称。要使用OpenCV需要安装OpenCV包&#xff0c;使用前需要导入OpenCV模块 安装 命令 pip install opencv-python 导入 模块 import cv2 1. 图像的读取 import cv2 img cv2.imread(path, flag)这里的flag 是可选参数&…

go语言优雅关机和优雅重启笔记

一、优雅关机 生活化例子 餐馆关门&#xff1a;你去餐馆吃火锅&#xff0c;刚坐下点完菜&#xff08;客户端发请求&#xff09;&#xff0c;餐馆老板突然接到通知要停电&#xff08;收到关机指令&#xff09;。老板很贴心&#xff0c;先停止接待新客人&#xff08;停止接收新请…

【算法】计数排序、桶排序、基数排序

算法系列八&#xff1a;非比较排序 一、计数排序 1.实现 1.1步骤 1.2代码 2.性质 2.1稳定性 2.1.1从前往后前始版&#xff1a; 2.1.2从后往前末始版&#xff1a; 2.2复杂度 2.2.1时间复杂度 2.2.2空间复杂度 二、桶排序 1.实现 1.1步骤 1.2代码 2.稳定性 三、…

Halcon应用:相机标定

提示&#xff1a;若没有查找的算子&#xff0c;可以评论区留言&#xff0c;会尽快更新 Halcon应用&#xff1a;相机标定 前言一、Halcon应用&#xff1f;二、应用实战1、图像理解1.1、开始标定 前言 本篇博文主要用于记录学习Halcon中算子的应用场景&#xff0c;及其使用代码和…

【C++ 程序设计】实战:C++ 实践练习题(31~40)

目录 31. 数列&#xff1a;s 1 &#xff0b; 2 &#xff0b; 3 &#xff0b; … &#xff0b; n 32. 数列&#xff1a;s 1 - 2 - 3 - … - n 33. 数列&#xff1a;s 1 &#xff0b; 2 - 3 &#xff0b; … - n 34. 数列&#xff1a;s 1 - 2 &#xff0b; 3 - … &#…

绿幕抠图直播软件-蓝松抠图插件--使用相机直播,灯光需要怎么打?

使用SONY相机进行绿幕抠图直播时&#xff0c;灯光布置是关键&#xff0c;直接影响抠图效果和直播画质。以下是详细的灯光方案和注意事项&#xff1a; 一、绿幕灯光布置核心原则 均匀照明&#xff1a;绿幕表面光线需均匀&#xff0c;避免阴影和反光&#xff08;亮度差控制在0.5…

从外网访问局域网服务器的方法

一、为什么局域网的服务器无法在外网访问&#xff1f; 服务器、电脑之间靠IP地址寻址&#xff0c;目前大部分基于IPV4进行寻址访问。但是因为IPV4的地址数量有限&#xff0c;中国分到的还比较少&#xff0c;所以非常紧缺。 一个解决方案就是在局域网来建立一个内部的网…

机器学习 Day12 集成学习简单介绍

1.集成学习概述 1.1. 什么是集成学习 集成学习是一种通过组合多个模型来提高预测性能的机器学习方法。它类似于&#xff1a; 超级个体 vs 弱者联盟 单个复杂模型(如9次多项式函数)可能能力过强但容易过拟合 组合多个简单模型(如一堆1次函数)可以增强能力而不易过拟合 集成…

交换机与路由器的主要区别:深入分析其工作原理与应用场景

在现代网络架构中&#xff0c;交换机和路由器是两种至关重要的设备。它们在网络中扮演着不同的角色&#xff0c;但很多人对它们的工作原理和功能特性并不十分清楚。本文将深入分析交换机与路由器的主要区别&#xff0c;并探讨它们的工作原理和应用场景。 一、基本定义 1. 交换…

【Oracle专栏】Oracle中的虚拟列

Oracle相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 1.背景 在EXP方式导出时&#xff0c;发现 出现如下提示 EXP-00107: virtual column 不支持&#xff0c;因此采用expdp方式导出。于是本文针对oracle虚拟列进行简单介绍。 2. 相…

2020 年 7 月大学英语四级考试真题(组合卷)——解析版

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;目前中南大学MBA在读&#xff0c;也考取过HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &…