当前位置: 首页 > news >正文

TDDMS分布式存储管理系列文章--分片/分区/分桶详解

友情链接:

  • 星环分布式存储TDDMS大揭秘(一)分布式存储技术推出背景以及当前存在的挑战
  • TDDMS是什么

前情提要

通过上个系列的文章我们了解到了各节点数据副本间通过一致性算法确保每次写入在响应客户端请求之前至少被多数节点(N/2+1)持久化,这样即使机器出现故障也不会丢失数据,并且即使一个节点出现故障,其他服务器依然能够提供数据读写、写入等数据服务。同时也了解到了协议如何确保各节点执行相同的命令操作序列,最终达到一致的状态。TDDMS通过应用一致性算法满足了两地三中心、多模态数据的统一处理等场景的容错、统一处理等需求。

详情查看: 分布式一致性技术的实现

那么TDDMS是如何确保系统可以快速的找到元数据和数据,提供数据读写能力的呢?本章节将为您介绍TDDMS是如何进行数据存储以确保后续的操作可以更加快速高效。

元数据(Metadata)是描述其他数据的数据,它为数据提供上下文、结构、定义和结构等信息,可以使数据管理更为高效,有助于优化查询性能和存储效率。

TDDMS数据分布结构

TDDMS中数据分布的基本单位为tablet,tablet则由tablet server进行管理。而master server则保存着元数据,其实际存的数据量很少,主要目的是为了辅助client更快速的定位到数据所在的tablet。更多细节查看:TDDMS是什么

image.png

名词介绍

TDDMS中的数据分布主要涉及分片(Tablet)、分区(Section)、分桶(Bucket)三个维度。

分片 - Tablet

Tablet是TDDMS中数据分布的基本单位,TDDMS将表拆分为多个Tablet,由TabletServer管理,根据分区&分桶字段对数据进行分布。分片赋予了系统水平扩展的可能性,可以帮助平衡查询工作的负载,降低节点压力。

分区 - Section

分区以Section(表结构的基本单位)的形式存于Tablet中,每张表都会有一个默认的Section。分区表则会在默认Section之外,根据所设定的分区条件,创建对应的Section。Tablet与Section为多对多的关系。一个Section的数据会存于多个Tablet中,一个Tablet也会存储多个Section的数据。

分桶 - Bucket

分桶其实并不是TDDMS本身的概念,是由不同的存储引擎自身定义的。

分区指的是在一张表内对数据进行切分,分桶则指的是在一个分区内对数据进行分组。在大多数场景中设置分桶的概念是为了保证数据的离散度,使数据均匀分布,这样在后续的计算中通过并行处理,尽可能的提高资源利用率。设置分桶也可以加速数据的过滤。

分片详解

什么是分片

数据存储系统中数据量会随着时间的推移不断增加,如果继续使用传统解决方案,将所有数据存储在一个表中,当有多个用户试图同时访问并针对数据库进行操作时,整体的处理效率会不断降低,也会产生并发瓶颈。

数据分片将大型数据集拆分为更小、更易处理和操作的块,并存储在多台数据库服务器上来协同工作,解决单一服务器存储容量和计算资源上限的问题。举个比较通俗易懂的例子,就像是将物品存在不同的抽屉中,我们在找想要的物品时,只需要拉开对应标签的抽屉即可快速找到

TDDMS中的Master服务负责数据副本的放置策略以及元信息管理(表的元数据),比如当需要进行检索等操作时,只需从Master处获取信息即可找到数据存储对应的节点信息、分片信息、状态如何等等,大大提高了数据存储、管理的效率,实现了稳定的存储增长、高性能和易维护。

分片的重要性

  • 缩短响应时间:单个大型数据库的数据检索需要遍历多行,返回结果集耗费时间久。通过将数据划分为多个分片,每个分片都可以独立访问,大大缩短了检索等操作的响应时间;
  • 高效扩展:通过将数据划分为多个分片,将存储负载分散到多个节点上,避免了单表的无限增长而导致性能下降,为系统的可扩展性提供了良好基础。当系统需要扩展存储容量的时候,只需增加节点添加分片就好,无需对整个系统进行重建;
  • 避免服务完全中断:即使某个节点发生故障,系统仍然可以通过其他节点恢复数据(回顾上个章节的一致性算法),保证数据的完整性和可靠性;

分片策略

分片策略是指按照一定的规则将数据集以行划分成若干个分片以平衡负载,减少通信开销,提升效率。常见的分片策略有以下几种:

  • 随机分片:将数据随机地划分到不同的节点上,可以保证数据均匀分布,提高系统的负载均衡能力;
  • 范围分片:将数据行根据某个属性的数值范围进行划分,每个范围直接映射到不同的分片;理想情况下,分片键应该是固定不变的。如果分片键发生变化,则必须重新计算分片并将记录复制到新分片。否则,映射会被破坏并且可能会丢失位置。范围分片也称为动态分片。

image.png

  • 哈希分片:哈希分片指的是把数据的关键属性通过哈希函数计算得到哈希值,再根据哈希值的范围将数据分片存储。哈希分片简单高效,提供了更均匀的数据分布;

image.png

Tablet的分布决定了,表的数据实际存放在多少块磁盘上,直接影响了表的读写性能,因而在星环产品的数据存储中,提供了多种方式简化Tablet数量和分布的设置,比如依靠哈希分片策略的随机性以及不同的分布公式(是否有分桶是否有分区)进行合理分布。降低了存储与计算的倾斜几率,计算速度快,而且哈希分片策略随机性的特点也为存储带来了好的均衡性

分区

分区指的是将数据集划分为更小、更易于单独管理和访问的子集存于tablet中,通过将数据分布在多个tablet上减少争用,利用并行处理提高计算资源的利用率,优化性能。因此,分区在整个存储架构中也是至关重要的因素之一。

分区为什么重要

  • 提升性能:通过将数据分成多个分区,可以并发访问数据集,跨多个节点并行执行数据读取、写入和分析等多种操作,缩短处理时间并减少延迟提高整体性能。并且,查询只需要访问特定分区的数据,避免扫描全表,减少磁盘I/O,从而加速查询操作,降低响应时间;
  • 提升运维便利:分区使得数据维护操作更加精确,例如我们按年分区,要删除指定年份的数据,无需使用性能开销极大的 DELETE FROM … WHERE year=2001,而是直接使用 `DROP TABLE table_partition_2001`来快速删除分区数据(几乎无开销)。每个分区都可以独立处理,也简化了数据迁移、归档等操作;
  • 提升可用性和扩展性:表分区允许根据业务需求进行定制,例如按时间、业务部门等进行分区,单个分区出现故障,其他分区数据仍可用,且修复成本更低;同时,将每个分区托管在单独的服务器上,可以避免单表的无限增长而导致性能下降,为系统的可扩展性提供了更好的基础;
  • 更高效的资源利用:可以通过分区更好地利用计算资源,可以将每个分区分配给特定的节点或系统,从而有效利用内存、磁盘空间和处理能力。它还有助于均匀分配数据和工作负载,防止任何单个节点过载。
  • 数据隔离和安全:通过将数据隔离到多个分区,可以在分区级别应用访问控制和安全措施。因此,敏感数据可以存储在单独的分区中,并使用额外的安全控制来更好地保护它们;

如果分区设置不当,后续在并行处理海量数据时,可能会导致性能瓶颈等风险,比如分区中数据分布不均匀、或某些分区的数据量存在数据量级上的差异则很容易引起数据倾斜(详情查看:数据倾斜现象诱因、原理、影响,以及星环对此的应对策略)。因此,数据的合理分布对于系统的可用性、运行性能都起着至关重要的核心作用

分区策略的设计

设计适当的表分区策略是确保分区表性能最大化的关键一步,有效的分区策略可以提高系统的查询性能、扩展性等等。用户在建表时用户需要指定分区策略,可以基于以下维度进行设计:

a. 分析查询需求:分析查询需求,重点关注经常被查询的数据的过滤条件,以选择适当的分区键,使得满足这些过滤条件的数据能够集中在同一分区中,从而优化查询性能;

b. 确认数据类型:推荐使用 STRING 或时间类型的列作为分区键,通常可以帮助在数据均衡和分区数量上取得较好的平衡;

c. 权衡分区规模:常规情况下,单个分区的数据量控制在 500GB 内,如果集群的 CPU 核数较多,可适当提升,此外,我们还需要关注数据的增长趋势,例如数据按时间增长,时间则是一个优秀的分区键,查询按时间范围过滤时会更高效;

d. 选择合适的分区策略:

星环存储支持多种分区策略,比如范围分区、单值分区,在新版本中还新增了归档分区策略,用户可以根据自身业务需求进行选择。

  • 范围分区:根据分区键的值范围来划分分区,执行分区时可基于列值分布均衡度和查询需求来自由划分范围,可以避免分区间的数据规模差距过大,提升查询效率;
  • 单值分区:将拥有相同分区键的记录划分在同一分区中,适用于列基数较少(例如城市名)且分布较为均衡的场景;
  • 归档分区:本质是用范围分区去表示单值分区,可以进行分区合并, 适用于历史分区比较多且很少被访问到的场景,比如对访问量极低的旧数据进行管理和归档,方便用户针对数据进行日常维护,提升检索效率;

image.png

分区键的选择

其次,分区键也是至关重要的一个因素。分区键是用于将数据集划分为分区或子集的属性或标准,决定了数据在分区系统中的分布和组织方式。当数据被分区时,key用于将每个记录或数据项分配给特定的分区。例如,分区键可以是客户 ID、地理区域或时间戳等等。选择分区键时需要考虑多个关键维度,比如需要具备高基数的特性以确保跨分区的数据均匀分布,有助于防止数据倾斜并确保工作负载均衡;再比如需要选择查询或过滤器中经常使用的键,通过减少跨分区扫描的数据量来提高查询性能等等。

性能优化--表分区实践最佳案例

详情请查阅: 分区实践

分桶

什么是分桶?

我们前面介绍了如何通过对表进行分片、分区来提高查询效率,但对于某些特定的查询模式,特别是需要频繁地进行数据联接查或取样的场景,仍然可能面临性能瓶颈。此外,随着数据的不断积累,可能会出现某些分区数据量过大,导致查询和处理效率受到影响。

为了更细粒度地管理和优化数据存储与访问,数据分桶(Bucketing)技术逐渐受到了关注,即对指定列的哈希值将其分配到固定数量的子集中(桶),保障数据的均匀分布,从而为复杂查询提供了更高效的处理方式。

image.png

分桶的重要性

TDDMS中的数据分桶是通过对特定列的值进行哈希处理来更好地均匀分布数据、优化特定模式下的查询,优势如下:

  • 优化特定查询模式:对于涉及桶列的JOIN和过滤操作,分桶可以大大加速查询,因为它能确保只有相关的桶被访问和处理。例如,基于桶键的 JOIN 操作可以在 map 阶段执行,避免了 shuffle 和 reduce阶段的开销;
  • 此外,当查询的谓词包含分桶键时,可快速定位到具体的分桶,极大减少数据扫描范围,提升查询效率;
  • 增加数据访问的预测性: 由于数据是基于哈希值进行分桶的,所以系统可以准确地知道哪些数据位于哪个桶中。这为数据访问提供了更高的预测性,从而进一步提高了查询性能;

TDDMS支持多分桶列、单分桶列以满足用户的需求

  • 多分桶列:适用于处理高任务并行度的查询,假设数据的一个主要特征或多个特征经常被一起查询或用于 JOIN 操作,即使查询条件没有涵盖所有分桶列的等值条件,该查询也可通过扫描关联的分桶,提高任务执行的并行度;
  • 单分桶列:适用于高并发的点查询,使其只需扫描与该键匹配的特定桶,减少不同查询之间的 I/O 干扰,并提高系统的响应时间;

当然,分桶不一定会百分百带来系统性能的提升,在决定对表进行分桶时还需要结合多种因素进行考量以最大限度地提高查询性能:

  • 是否存在高频的连接操作?当两个大表需要经常进行连接操作,并且连接基于某个特定的列,经常因为数据移动而产生大量的 Shuffle 读写,拖慢了查询效率;
  • 是否存在频繁的聚合操作?对于需要频繁执行的聚合操作,如果按照聚合的键进行数据分桶,可以大大提高查询性能,因为每个节点可以独立地完成其桶内的聚合操作;

分桶键的选择

对表分桶时会将表中记录按分桶键的哈希值分散进多个桶中。选择合适的分桶键也是分桶优化成功的关键因素之一。选择分桶键时需要考虑多个关键维度,比如需要分析数据在列上的分布情况,一个理想的分桶键应该有较大的基数和较少的重复值,避免桶中的数据不均衡。在具体实践中,您也可以使用小规模数据量的表来尝试使用不同的分桶键,比较分桶获得到的查询收益,找出为您提供最佳性能的选择。

性能优化--表分桶实践最佳案例

详情请查阅: 分桶实践

TDDMS的存储场景及优势

综上,针对不同层级的数据分布,TDDMS设置了多种策略来满足用户在存储管理方面的需求。此外还有一些其他方面的技术优势:

  • 支持多种存储场景,助力企业生产需求,比如冷热数据分离

在部分行业,很多业务对数据的访问并不是均匀的,而是呈现相对的数据访问倾斜,根据数据的时效性以及访问的频繁度,数据通常会被分为冷温热三级数据。不同数据存储地方不同,耗费的资源、成本也不同。比如对于热数据,即访问频次较高的数据,存储在热数据盘(SSD介质),满足高性能、低延迟访问的需求;对于冷数据,即访问频次较低的数据,可以选择存储在较廉价的冷数据盘中(HDD介质),满足高性价比的存储需求,优化存储成本。

星环科技提供多种存储方案,可以有效平衡存储成本和查询性能需求。比如,支持冷热数据分层存储,同时也支持手动、自动转换,支持设置自动转换策略。TDDMS底层提供数据移动等功能,当冷热数据出现变化时,可以快速的进行动态调整,第一时间避免资源的消耗,提升系统整体存储性能的同时更加高效的适配企业业务。

  • 插件化设计,灵活适配多种存储需求

TDDMS不仅屏蔽掉了底层存储引擎的差异化,为用户提供统一的编程与运维接口。同时,还将存储引擎解耦,并定义成一组插件化的接口,这种插件化的设计允许用户针对不同的需求组织存储引擎,使得TDDMS能够灵活适配不同的业务场景和存储需求。

  • TDDMS提供数据读写接口而非文件接口,可以支持管理多种存储格式,为不同的数据模型提供格式化的数据读写接口,比如二维数组、全文检索数据、键值数据等等(回顾上节: TDDMS介绍 );
  • 支持多种索引,不同类型的索引都有其独特的特性和使用场景,比如星环自研的Holo表可以支持多种索引类型,提高查询效率,减少查询开销;
  • TDDMS为每个数据块创建了多个副本并分散得存储在不同的节点上,其副本分配策略保证了节点间的负载均衡,节点内数据在磁盘间均衡,避免出现部分节点负载过高而导致性能下降的情况;
  • TDDMS的存储以tablet为粒度,均衡度更高,支持data locality(数据局部性,指的是说将计算移动到数据所在节点的过程,最大限度地减少网络拥塞并提高计算吞吐量);
  • 在频繁的进行小数据量写入操作的时候,会产生大量的小文件,并且内容很少(KB级别)。小文件过多可能导致查询过程中的IO开销大,影响性能或者内存占用高。星环产品推出了小文件合并功能之外还提供了多种小文件合并参数及机制;
  • TDDMS采用一致性协议,提供了多数派有效判断机制,防止系统故障,满足高可用(回顾上节: 分布式一致性技术实现 );
  • 内置事务模型,更适用于商用数据库场景(参考下个系列,分布式事务管理);
  • 基于MVCC的Base、Detle数据删改支持,支持更高并发数据变更;(参考下个系列,分布式事务管理)

相关文章:

TDDMS分布式存储管理系列文章--分片/分区/分桶详解

友情链接: 星环分布式存储TDDMS大揭秘(一)分布式存储技术推出背景以及当前存在的挑战TDDMS是什么 前情提要 通过上个系列的文章我们了解到了各节点数据副本间通过一致性算法确保每次写入在响应客户端请求之前至少被多数节点(N/2…...

Spring Boot(九十):集成SSE (Server-Sent Events) 服务器实时推送

1 SSE简介 Server-sent Events(SSE) 是一种基于 HTTP 协议的服务器推送技术,它允许服务器主动向客户端发送数据。与 WebSocket 不同,SSE 是单向通信,即服务器可以主动向客户端推送数据,而客户端只能接收数据。 2 SSE特点 单向通信:SSE 是服务器向客户端的单向推送,客户…...

ubuntu22.04安装ROS2 humble

参考: https://zhuanlan.zhihu.com/p/702727186 前言: 笔记本安装了ubuntu20.04安装ros一直失败,于是将系统升级为ununut22.04,然后安装ros,根据上面的教程,目前看来是有可能成功的。 系统升级为ununut…...

力扣第206场周赛

周赛链接:竞赛 - 力扣(LeetCode)全球极客挚爱的技术成长平台​​​​​​ 1. 二进制矩阵中的特殊位置 给定一个 m x n 的二进制矩阵 mat,返回矩阵 mat 中特殊位置的数量。 如果位置 (i, j) 满足 mat[i][j] 1 并且行 i 与列 j 中…...

C++17 主要更新

C17 主要更新 C17 是继 C14 之后的重要标准更新,引入了许多提升开发效率、简化代码和增强性能的特性。以下是 C17 的主要更新,按类别分类: 1. 语言核心特性 结构化绑定(Structured Bindings) 解构元组、结构体或数组…...

k8s master节点部署

一、环境准备 1.主机准备 192.168.10.100 master.com master 192.168.10.101 node1.com node1 192.168.10.102 node2.com node2 互信 时间同步 关闭防火墙 关闭selinux 2.创建/etc/sysctl.d/k8s.conf,添加如下内容 cat > /etc/sysctl.d/k8s.conf <<EOF net.br…...

YOLO学习笔记 | YOLOv8 全流程训练步骤详解(2025年4月更新)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 这里写自定义目录标题 一、数据准备1. 数据标注与格式转换2. 配置文件生…...

centos7.9 升级 gcc

本片文章介绍如何升级gcc&#xff0c;centos7.9 仓库默认的gcc版本为&#xff1a;4.8.5 4.8.5-44) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY…...

Linux基本指令

Linux目录结构 Linux的目录结构是一个树形结构。Windows系统可以拥有多个盘符&#xff0c;如C盘、D盘、E盘。而Linux没有盘符这个概念&#xff0c;只有一个根目录/,所有文件都在它下面。如下图所示&#xff1a; Linux路径的描述方式 在Linux系统中&#xff0c;路径之间的层级…...

Google A2A协议,是为了战略性占领标准?

一、导读 2025 年 4 月 9 日&#xff0c;Google 正式发布了 Agent2Agent&#xff08;A2A&#xff09;协议。 A2A 协议致力于打破智能体之间的隔阂&#xff0c;让它们能够跨越框架和供应商的限制&#xff0c;以一种标准化、开放的方式进行沟通与协作 截止到现在&#xff0c;代…...

每日一题(小白)暴力娱乐篇29

题目比较简单&#xff0c;主要是判断条件这块&#xff0c;一定要注意在奇数的位置和偶数的位置标记&#xff0c;若奇数位为奇数偶数位为偶数才能计数加一&#xff0c;否则都是跳过。 ①接收数据n ②循环n次&#xff0c;拆解n&#xff0c;每次拆解记录ans ③拆解n为若干次x&a…...

瀚天天成闯港交所上市:业绩波动明显,十分依赖少数客户和供应商

撰稿|张君 来源|贝多财经 近日&#xff0c;瀚天天成电子科技&#xff08;厦门&#xff09;股份有限公司&#xff08;下称“瀚天天成”&#xff09;递交招股书&#xff0c;报考港交所主板上市。据贝多财经了解&#xff0c;瀚天天成曾计划在上海证券交易所科创板上市&#xff0…...

全国产压力传感器常见的故障有哪些?

全国产压力传感器常见的故障如哪些呢&#xff1f;来和武汉利又德的小编一起了解一下&#xff0c;主要包括以下几类&#xff1a; 零点漂移 表现&#xff1a;在没有施加压力或处于初始状态时&#xff0c;传感器的输出值偏离了设定的零点。例如&#xff0c;压力为零时&#xff0c…...

计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet

计算机视觉卷积神经网络&#xff08;CNN&#xff09;基础&#xff1a;从LeNet到ResNet 一、前言二、卷积神经网络基础概念​2.1 卷积层​2.1.1 卷积运算原理​2.1.2 卷积核的作用与参数​ 2.2 池化层​2.2.1 最大池化与平均池化​2.2.2 池化层的优势与应用​ 2.3 全连接层​2.3…...

在封装DLL时,避免第三方命名空间的依赖方法[PIMPL模式技术指南]

1. 概述 PIMPL(Pointer to IMPLementation)模式是C++中实现信息隐藏和二进制兼容性的重要设计范式,通过创建实现细节的私有封装层,有效隔离接口与实现。本文档详细阐述其核心原理、现代实现方式和典型应用场景。 2. 核心架构 2.1 经典结构 // 头文件(widget.h) class Wid…...

镜舟科技亮相 2025 中国移动云智算大会,展示数据湖仓一体创新方案

4月10-11日&#xff0c;2025 中国移动云智算大会在苏州金鸡湖国际会议中心成功举办。大会以“由云向智&#xff0c;共绘算网新生态”为主题&#xff0c;汇聚了众多行业领袖与技术专家&#xff0c;共同探讨了算力网络与人工智能的深度融合与未来发展趋势。 作为中国领先的企业级…...

通过Python实现定时重启H3C AP设备

一、背景 因为H3C的AP设备老化&#xff0c;网络出现高延迟、高丢包率&#xff0c;需要隔一段时间去重启AP后恢复。但是由于白天在使用无法进行重启&#xff0c;并且容易遗忘等用户反馈又太晚了&#xff0c;但是AC版本太老没有定时重启功能&#xff0c;于是通过Python做了自动重…...

火山RTC 4 音视频引擎 IRTCVideo,及 音视频引擎事件回调接口 IRTCVideoEventHandler

一、IRTCVideo、IRTCVideoEventHandler 音视频引擎 IRTCVideo&#xff0c;及 音视频引擎事件回调接口 IRTCVideoEventHandler 负责音视频管理、创建房间/获得房间实例 1、创建引擎、及事件回调示例 如&#xff1a; void VideoConfigWidget::initRTCVideo() {m_handler.res…...

Matlab 考虑电机激励力的整车垂向七自由度模型参数研究

1、内容简介 Matlab 201-考虑电机激励力的整车垂向七自由度模型参数研究 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

Matlab 三容水箱系统故障诊断算法研究

1、内容简介 Matlab 190-三容水箱系统故障诊断算法研究 可以交流、咨询、答疑 2、内容说明 略 其次&#xff0c;对 DTS200 三容水箱系统进行机理建模&#xff0c;可分为对象建模和故障 建模&#xff0c;搭建了水箱系统的 SIMULINK 模型并建立了基于 Taylor 展开及 T-…...

Mac学习使用全借鉴模式

Reference https://zhuanlan.zhihu.com/p/923417581.快捷键 macOS 的快捷键组合很多&#xff0c;相应的修饰键就多达 6 个&#xff08;Windows 系统级就 4 个&#xff09;&#xff1a; Command ⌘ Shift ⇧ Option ⌥ Control ⌃ Caps Lock ⇪ Fn 全屏/退出全屏 command con…...

Arrays.asList() 隐藏的陷阱

在Java中&#xff0c;我们经常需要将数组转换为List来方便地进行操作。Arrays.asList()方法是一种常见的方式&#xff0c;但是它存在一个不太常见但需要注意的坑。 本文将深入探讨Arrays.asList()的使用&#xff0c;揭示其中的陷阱&#xff0c;并提供解决方案。 1、Arrays.as…...

Cables 现已正式启动积分计划 Alpha 阶段,开放早期白名单申请

Cables 现已正式启动积分计划&#xff0c;并开放白名单抢先体验通道&#xff0c;这标志着 Cables 平台进入第一阶段的部署&#xff0c;旨在为外汇及现实世界资产&#xff08;RWAs&#xff09;构建首个集成的流动性质押与永续期货 DEX。 Cables 平台的设计目标是通过单一系统实…...

Spring Cloud 远程调用

4.OpenFeign的实现原理是什么&#xff1f; 在使用OpenFeign的时候&#xff0c;主要关心两个注解&#xff0c;EnableFeignClients和FeignClient。整体的流程分为以下几个部分&#xff1a; 启用Feign代理&#xff0c;通过在启动类上添加EnableFeignClients注解&#xff0c;开启F…...

STM32单片机中EXTI的工作原理

目录 1. EXTI概述 2. EXTI的组成部分 3. 工作原理 3.1 引脚配置 3.2 中断触发条件 3.3 中断使能 3.4 中断处理 4. 使用示例 5. 注意事项 结论 在STM32单片机中&#xff0c;EXTI&#xff08;外部中断&#xff09;是一种用于处理外部事件的机制&#xff0c;能够提高对硬…...

排序算法详细介绍对比及备考建议

文章目录 排序算法对比算法逐一介绍1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 选择排序&#xff08;Selection Sort&#xff09;3. 插入排序&#xff08;Insertion Sort&#xff09;4. 希尔排序&#xff08;Shell Sort&#xff09;5. 归并排序&#xff08;Merge Sort&…...

网页布局思路

一、布局思路 1&#xff0c;确定页面的版心(可视区) 2、分析页面中的行模块&#xff0c;以及每个行模块中的列模块。&#xff08;页面布局第一准则&#xff09; 3、一行中的列模块经常用浮动布局&#xff0c;先确定每个列的大小&#xff0c;之后确定列的位置&#xff08;页面…...

CloudFlare Page 如何和 GitHub 创建连接

CloudFlare Page 能够对前端项目进行构建。 他们能支持从 GitHub 上直接拉取代码。 如果 GitHub 上的代码仓库不存在的话&#xff0c;首先需要创建一个连接才可以。 随后会要求登录 GitHub&#xff0c;然后可以在希望访问的组织中进行选择。 随后同意访问赋予权限即可。 Clou…...

Python爬虫第13节-解析库pyquery 的使用

目录 前言 一、pyquery 初始化 1.1 字符串初始化 1.2 URL 初始化 1.3 文件初始化 二、基本 CSS 选择器 三、pyquery 查找节点 3.1 子节点 3.2 父节点 3.3 兄弟节点 四、遍历 五、获取信息 5.1 获取属性 5.2 获取文本 六、节点操作 6.1 addClass 和 removeClass…...

【学习笔记】头文件中定义函数出现重复定义报错

目录 错误复现原因解决方案inlinestatic 扩展参考 错误复现 现在有一个头文件 duplicate_define.h 和两个源文件 duplicate_define_1.cpp 和 duplicate_define_2.cpp。 两个源文件都引入了头文件 duplicate_define.h&#xff0c;且在各自的函数中调用了定义在头文件中的全局函…...

Java 中的零拷贝技术:提升性能的利器

Java 中的零拷贝技术&#xff1a;提升性能的利器 在现代高性能应用中&#xff0c;数据传输的效率至关重要。传统的 I/O 操作通常涉及多次数据拷贝&#xff0c;这会导致性能瓶颈。而零拷贝&#xff08;Zero-Copy&#xff09;技术通过减少数据拷贝次数&#xff0c;显著提升了 I/…...

JavaScript:基本语法

今天我要介绍的新知识点内容为&#xff1a;JavaScript的基本语法以及使用说明。 首先我们先了解一下JS&#xff08;JavaScript简称&#xff09;是什么以及怎么使用JS&#xff1a; 介绍&#xff1a;JavaScript(JS)是一门弱类型的语言&#xff0c;用于给HTML页面上添加动态效果…...

Matlab 三维时频图

1、内容简介 Matlab 202-三维时频图 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

MySQL中动态生成SQL语句去掉所有字段的空格

在MySQL中动态生成SQL语句去掉所有字段的空格 在数据库管理过程中&#xff0c;我们常常会遇到需要对表中字段进行清洗和整理的情况。其中&#xff0c;去掉字段中的空格是一项常见的操作。当表中的字段数量较少时&#xff0c;我们可以手动编写 UPDATE 语句来处理。但如果表中包…...

NO.91十六届蓝桥杯备战|图论基础-图的存储和遍历|邻接矩阵|vector|链式前向星(C++)

图的基本概念 图的定义 图G是由顶点集V和边集E组成&#xff0c;记为G (V, E)&#xff0c;其中V(G)表⽰图G中顶点的有限⾮空集&#xff1b;E(G)表⽰图G中顶点之间的关系&#xff08;边&#xff09;集合。若 V { v 1 , v 2 , … , v n } V \left\{ v_{1},v_{2},\dots,v_{n} …...

树、二叉树、二叉查找树、AVL 树及红黑树的深入解析

树、二叉树、二叉查找树、AVL 树及红黑树的深入解析 1 .树的基本知识1.1 树的定义1.2 基本术语和概念1.3 常见树的结构1.4 树的遍历&#xff08;取决于什么时候访问根节点&#xff09; 2 二叉树2.1 二叉树的定义2.2二叉树与度为2的树的区别2.3二叉树的性质2.4 二叉树分类 3 红黑…...

BUUCTF-web刷题篇(21)

30.hark world 判断注入类型&#xff1a; 输入1报错提示bool&#xff08;false&#xff09;可知是字符型的布尔注入&#xff08;盲注&#xff09; 尝试万能密码 1 or 11 已检测SQL注入&#xff0c;猜测某些关键词或者字符被过滤。 使用FUZZ字典爆破...

Linux 网络基础知识总结

Linux 网络基础知识总结 1. 计算机网络体系结构 • OSI七层模型 由国际化标准组织&#xff08;ISO&#xff09;制定&#xff0c;将网络通信分为七层&#xff1a; • 物理层&#xff1a;比特流传输&#xff08;如网线、光纤&#xff09;。 • 数据链路层&#xff1a;帧传输&am…...

Day 8 上篇:深入理解 Linux 驱动模型中的平台驱动与总线驱动

在 Linux 内核驱动模型中&#xff0c;设备与驱动的组织方式不是随意堆砌&#xff0c;而是基于清晰的分类逻辑进行架构设计的。最核心的架构基础是“设备模型”&#xff08;Device Model&#xff09;&#xff0c;而在此模型之上&#xff0c;各类驱动通过“平台驱动模型”与“总线…...

如何启动spark

解决&#xff1a;spark的bin目录下&#xff0c;无法启动spark问题 [roothadoop7 sbin]# ./start-all.sh ./start-all.sh:行29: /root/install/spark-2.4.0-bin-hadoop2.7/sbin/spark-config.sh: 没有那个文件或目录 ./start-all.sh:行32: /root/install/spark-2.4.0-bin-hadoo…...

Java网络编程干货

1.网络编程是什么 了解 在Java语言中&#xff0c;我们可以使用java.net包下的技术轻松开发出常见的网络应用程序&#xff0c;从而把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统&#x…...

Java实现安卓手机模拟操作

文章目录 第一部分&#xff1a;安卓模拟操作基础1.1 安卓输入系统概述1.1.1 输入事件传递机制1.1.2 输入事件类型 1.2 模拟操作的核心类1.2.1 Instrumentation类1.2.2 KeyEvent类1.2.3 MotionEvent类 1.3 权限要求1.3.1 普通权限1.3.2 特殊权限 第二部分&#xff1a;基础模拟操…...

一文讲清楚PLC、运动控制卡、运动控制器

随着工业技术的发展&#xff0c;工业机器人应用越来越广泛&#xff0c;PLC也不再是简单的可编程逻辑控制器&#xff0c;各个品牌厂家都推出了自己的运动控制型PLC&#xff0c;来实现一些运动控制功能&#xff0c;与此同时&#xff0c;运动控制卡及运动控制器也在如火如荼地发展…...

蓝桥杯备战

#include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(false);cin.tie(0);return 0; } 输入输出加速 ios::sync_with_stdio(false) 作用&#xff1a; 禁用 C 和 C 标准流的同步&#xff0c;使 cin/cout 速度接近 scanf/printf。 适用性&#xff…...

python保留关键字详解

一、什么是保留关键字&#xff1f; 保留关键字是Python语言中具有特殊含义和功能的词汇&#xff0c;这些词汇构成了Python的语法基础。它们不可被重新定义或用作变量名、函数名等标识符&#xff0c;在代码中承担着控制程序逻辑、定义数据结构等重要职责。 二、查看保留关键字…...

NLP中的“触发器”形式

在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;触发器的设计更加依赖于文本特征&#xff0c;而非视觉特征。以下是NLP中常见的触发器类型及其实现方式&#xff1a; 1. 特定词汇或短语 定义&#xff1a;在文本中插入特定的单词、短语或符号。示例&#xff1a; 罕见…...

uView修改样式(持续更新)

场景 通过样式穿透修改uView2.0组件样式&#xff0c;用于app 注意版本不一样方法可能不同 实现 通用 .uni-body{line-height: 0; }u-input ::v-deep .u-input{height: 20.51rpx !important;padding: 0 6.59rpx !important; } ::v-deep .uni-input-input{height:50%;font-s…...

使用 Datadog 和 Slack Alerts 监控 AWS EC2

监控是大多数 IT 专业人员的关键职责之一。如果您最近正在寻找新工作&#xff0c;您可能已经注意到“监控”一词几乎出现在许多组织发布的每份职位描述中。 您可以找到各种监控工具&#xff0c;它们提供一些卓越的功能来简化您的工程工作。然而&#xff0c;Datadog 是大多数组…...

grafana/loki 部署搜集 k8s 集群日志

grafana/loki 和 grafana/loki-stack 的区别 ​Grafana 提供了多个 Helm Chart 用于在 Kubernetes 集群中部署 Loki 及相关组件,其中主要包括 grafana/loki 和 grafana/loki-stack。​它们的主要区别如下:​ 1.grafana/loki Helm Chart: 专注于 Loki 部署: 该 Chart 专门…...

【ESP32S3】GATT Server service table传送数据到调试助手

前言 在初步学习esp32蓝牙的过程中&#xff0c;借鉴了官方的GATT Server Service Table Example&#xff0c;可以在readme中看到&#xff0c;此demo是采用低功耗蓝牙的通用属性服务器来创建订阅服务和特性。如果你接触过MQTT&#xff0c;你会发现GATT Server这一特性和MQTT的订…...