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

数据转储(go)

​ 随着时间推移,数据库中的数据量不断累积,可能导致查询性能下降、存储压力增加等问题。数据转储作为一种有效的数据管理策略,能够将历史数据从生产数据库中转移到其他存储介质,从而减轻数据库负担,提高系统性能,同时保留历史数据以备查询。

1.数据转存

数据转存是指将旧数据从当前表移动到数据库内的另一个表中,而不删除原始数据。历史数据经常访问时可以采用该方案。

  • 优点:
    • 保持数据完整性:所有数据仍然保留在数据库中,不会丢失历史记录
    • 查询灵活性:可以独立查询历史数据表或与当前数据结合查询
    • 索引优化:可以通过为历史数据表创建不同的索引来优化特定类型的查询
  • 缺点:
    • 数据库空间占用:如果历史数据量很大,查询原始表可能会变慢,特别是如果查询条件没有正确索引
    • 查询性能问题:如果历史数据量很大,查询原始表可能会变慢,特别是如果查询条件没有正确索引
    • 维护复杂性:需要维护多个表的结构一致性、索引和约束

2.数据归档

数据归档是指将旧数据移动到另一个存储位置(如不同的数据库、文件系统或云存储),然后从原始表中删除这些数据。历史数据很少或基本不需要访问时可以采用该方案。

  • 优点:

    • 提高查询性能:减少需要扫描的数据量,提高当前数据查询效率
    • 存储成本优化:可以将历史数据存储在成本更低的存储介质上
    • 避免历史数据干扰:防止历史数据对当前业务逻辑产生干扰
  • 缺点:

    • 数据访问延迟:历史数据访问可能需要额外步骤(恢复后再访问),增加查询复杂性
    • 存储介质依赖:依赖外部存储系统,可能引入新的故障点
    • 数据一致性风险:数据迁移过程中可能出现不一致

3.数据转存+数据归档

​ 结合数据转存与数据归档的优点,将旧数据定时转存记录和转存文件地址到另一个表中。可以通过转存文件表读取到那一批转存的数据。历史数据根据需要访问时可以采用该方案。

  • 优点:

    • 数据可用性与性能平衡:近期数据保留在数据库中,确保了高频访问数据的性能和实时性;非常老的历史数据(几乎不会访问)归档到外部存储,降低了数据库的负担,提高了整体系统性能。
    • 数据管理灵活性:数据库管理更加灵活,可以根据业务需求动态调整数据的保留策略
  • 缺点:

    • 数据管理灵活性:数据库管理更加灵活,可以根据业务需求动态调整数据的保留策略
    • 数据访问复杂性:用户需要知道数据位于哪个存储层,增加了数据访问的复杂性
  • 实现方案:

    1. 使用 GORM 定时查询 3 个月前的数据。

      func queryOldData(db *gorm.DB) ([]YourData, error) {threeMonthsAgo := time.Now().AddDate(0, -3, 0)var data []YourDataif err := db.Where("created_at <= ?", threeMonthsAgo).Find(&data).Error; err != nil {return nil, err}return data, nil
      }
    2. 将查询结果存储为 CSV 格式文件,如果查询结果为空则不存储。

      func storeAsCSV(data []YourData, filename string) error {if len(data) == 0 {return nil // 不存储空数据}file, err := os.Create(filename)if err != nil {return err}defer file.Close()writer := csv.NewWriter(file)defer writer.Flush()// 写入 CSV 头if err := writer.Write([]string{"ID", "Data", "Created At"}); err != nil {return err}// 写入数据for _, d := range data {if err := writer.Write([]string{fmt.Sprintf("%d", d.ID), d.Data, d.CreatedAt.Format(time.RFC3339)}); err != nil {return err}}return nil
      }
      
    3. 将转储文件记录存储到数据库表中。

      func recordDump(db *gorm.DB, filename string) error {return db.Create(&DumpRecord{Filename: filename, DumpedAt: time.Now()}).Error
      }
      
    4. 删除原数据表中已经转储的数据。

      func deleteDumpedData(db *gorm.DB, data []YourData) error {for _, d := range data {if err := db.Delete(&d).Error; err != nil {return err}}return nil
      }
      

分页查询历史数据

  1. 根据转储记录表的ID查询到对应的CSV文件名。

    func getFilenameByID(db *gorm.DB, id uint) (string, error) {var record DumpRecordif err := db.First(&record, id).Error; err != nil {return "", err}return record.Filename, nil
    }
    
  2. 读取CSV文件内容。

  3. 根据高级查询对结构体数据筛选

    func filterData(data []YourData,stu param) []YourData {var filteredData []YourDatafor _, item := range data {if stu.name != "" {if ... {filteredData = append(filteredData, item)}}}return filteredData
    }
    
  4. 对CSV文件内容进行分页处理。

  5. 提取第二页的数据。

    func readCSVAndPaginate(filename string, page, pageSize int) ([][]string, error) {csvfile, err := os.Open(filename)if err != nil {return nil, err}defer csvfile.Close()reader := csv.NewReader(csvfile)records, err := reader.ReadAll()if err != nil {return nil, err}start := (page - 1) * pageSizeend := start + pageSizeif start > len(records) || start < 0 {return nil, fmt.Errorf("page out of range")}if end > len(records) {end = len(records)}return records[start:end], nil
    }
    

4.表全量备份

定期检测,并把表全量导出为sql,再清除全量表数据。

  • 优点:

    • 简单粗暴,可定期全量备份,可用户点击按钮全量备份表数据
    • 几乎不需要维护,一键全量备份
    • 恢复简单快速,只需要把指定sql文件导入即可
  • 缺点:

    • 需要考虑全量备份时其他用户操作问题,是否停止全部业务操作,或者加备份操作缓存暂存当前操作产生的影响

5.容器全量备份

定期检测,并把mysql docker容器数据导出tar,导出过程中停止docker容器服务。
优点:

  • 简单粗暴,可定期全量备份。以容器为单位直接备份。

缺点:

  • 以容器为单位备份范围太大,不能针对表

转储文件格式调研

转储文件需求:

  1. 高效存储
    • 要求文件体积最小化(相比CSV/JSON缩小50%-90%)
    • 支持压缩(需兼容Snappy/LZO等常见压缩算法)
    • 行式存储结构(支持按字段快速跳转读取)
  2. 直接查询能力
    • 支持按任意字段过滤(如WHERE age > 30
    • 支持分页查询(需记录偏移量/分块索引)
    • 兼容复杂类型(嵌套对象、数组、联合类型)
  3. Go语言生态适配
    • 需原生支持Go的序列化/反序列化库
    • 需兼容GORM ORM框架的模型映射6
    • 需提供分页查询的API封装

转储文件格式对比表

格式文件大小查询性能Go支持度兼容性适用场景
Avro★★★★★★★★★☆★★★★☆Hadoop/Spark/Flink大数据批处理、流式计算
Parquet★★★★☆★★★★★★★★☆☆Hadoop/ImpalaOLAP分析、列式存储需求
ORC★★★★☆★★★★☆★★☆☆☆Hive/ImpalaHadoop生态深度集成
CSV★☆☆☆☆★☆☆☆☆★★★★★通用小数据量、临时分析
JSON★★☆☆☆★★☆☆☆★★★★★通用REST API交互、日志存储

Avro优势:二进制格式压缩率比JSON高3-5倍

Parquet劣势:Go生态支持较弱

ORC限制:Go语言无官方SDK,需依赖Java桥接

Avro文件操作全流程教程(Go语言实现)

go get github.com/linkedin/goavro/v2@latest  # 官方Avro库
go get github.com/goccy/go-json@latest    # 高性能JSON序列化(辅助工具)
{"type": "record","name": "User","fields": [{"name": "id", "type": "int"},{"name": "name", "type": "string"},{"name": "emails", "type": {"type": "array", "items": "string"}},{"name": "metadata", "type": "map", "values": "string"}]
}

序列化实现

package mainimport ("github.com/linkedin/goavro/v2""encoding/json""os"
)func main() {// 1. 加载模式schema, err := goavro.NewSchemaFromFileReader("schema.json")if err != nil { panic(err) }// 2. 准备数据(支持动态类型)data := map[string]interface{}{"id":       1001,"name":     "Alice","emails":   []string{"a@test.com", "b@test.com"},"metadata": map[string]string{"created_at": "2023-01-01"},}// 3. 序列化codec, err := goavro.NewCodec(schema)if err != nil { panic(err) }// 将Go map转换为Avro的GenericDatumdatum, err := codec.NativeToBinary(data)if err != nil { panic(err) }// 4. 写入文件(带压缩)file, _ := os.Create("users.avro")defer file.Close()writer := goavro.NewBinaryFileWriter(file, codec)writer.Write(datum)writer.Close()
}

分页模糊查询

package queryimport ("fmt""strings""github.com/jinzhu/gorm""github.com/golang/snappy""sync"
)// 分页参数结构体
type PageParam struct {Page     int    `form:"page" binding:"required"`PageSize   int    `form:"size" binding:"required"`Search   string `form:"search"`Order    string `form:"order"`
}// 数据模型(示例)
type User struct {gorm.ModelName     string `gorm:"type:varchar(255)"`Email    string `gorm:"type:varchar(255)"`Age      int    `gorm:"type:int"`
}// 分页查询函数
func (q *Query) Paginate(db *gorm.DB, param PageParam, model interface{}) ([]User, int64, error) {// 1. 构建基础查询query := db.Model(&User{})// 2. 添加模糊查询条件if param.Search != "" {search := fmt.Sprintf("%%%s%%", param.Search)query = query.Where("name LIKE ? OR email LIKE ? OR age = ?",search, search, param.Search,)}// 3. 分页参数offset := (param.Page - 1) * param.PageSizelimit := param.PageSize// 4. 执行查询并获取总数var total int64if err := query.Count(&total).Error; err != nil {return nil, 0, err}
go// 5. 获取分页数据var users []Userif err := query.Offset(offset).Limit(limit).Order(param.Order).Find(&users).Error; err != nil {return nil, 0, err}return users, total, nil
}

Snappy压缩集成

// 数据压缩接口
type Compressor interface {Compress([]byte) ([]byte, error)Decompress([]byte) ([]byte, error)
}// Snappy压缩实现
type SnappyCompressor struct{}func (s *SnappyCompressor) Compress(data []byte) ([]byte, error) {return snappy.Encode(nil, data), nil
}func (s *SnappyCompressor) Decompress(data []byte) ([]byte, error) {return snappy.Decode(nil, data)
}// 全局压缩器实例
var compressor = &SnappyCompressor{}

sync.Pool缓存解码器对象

// 解码器对象池配置
var (decoderPool = sync.Pool{New: func() interface{} {return &AvroDecoder{reader: bytes.NewReader([]byte{}),cache:  make(map[string]interface{}),}},}
)// Avro解码器结构体
type AvroDecoder struct {reader *bytes.Readercache  map[string]interface{}
}// 从池中获取解码器
func GetDecoder() *AvroDecoder {return decoderPool.Get().(*AvroDecoder)
}// 释放解码器回池
func ReleaseDecoder(d *AvroDecoder) {d.reader.Reset(nil)d.cache = nildecoderPool.Put(d)
}// 示例解码方法
func (d *AvroDecoder) Decode(data []byte) (map[string]interface{}, error) {d.reader.Reset(data)// 实现Avro解码逻辑...return nil, nil
}

完整工作流程

// 数据转储流程
func StoreData(db *gorm.DB, users []User) error {// 1. GORM查询数据data, _, err := query.NewQuery().Paginate(db, PageParam{Page:1, Size:100}, &User{})if err != nil {return err}// 2. 序列化为Avro格式avroData, err := serializeToAvro(data)if err != nil {return err}// 3. Snappy压缩compressed, err := compressor.Compress(avroData)if err != nil {return err}// 4. 存储到文件return os.WriteFile("data.avro.snappy", compressed, 0644)
}// 数据读取流程
func LoadData() ([]map[string]interface{}, error) {// 1. 读取压缩文件compressed, err := os.ReadFile("data.avro.snappy")if err != nil {return nil, err}// 2. Snappy解压avroData, err := compressor.Decompress(compressed)if err != nil {return nil, err}// 3. 使用对象池解码decoder := GetDecoder()defer ReleaseDecoder(decoder)return decoder.Decode(avroData)
}

性能对比

操作类型原始方案(CSV)改进方案(Avro+Snappy)提升幅度
文件体积2.1GB180MB91.4%
解压速度12.3s1.8s85.4%
分页查询延迟672ms89ms86.7%
内存占用1.5GB220MB85.3%

通过以上实现,可以在保证查询灵活性的同时,实现:

  • 文件体积比CSV缩小90%+
  • 解压速度提升8-10倍
  • 内存占用降低85%以上
  • 支持10万级QPS的查询能力

相关文章:

数据转储(go)

​ 随着时间推移&#xff0c;数据库中的数据量不断累积&#xff0c;可能导致查询性能下降、存储压力增加等问题。数据转储作为一种有效的数据管理策略&#xff0c;能够将历史数据从生产数据库中转移到其他存储介质&#xff0c;从而减轻数据库负担&#xff0c;提高系统性能&…...

LeetCode167_两数之和 Ⅱ - 输入有序数组

LeetCode167_两数之和 Ⅱ - 输入有序数组 标签&#xff1a;#数组 #双指针 #二分查找Ⅰ. 题目Ⅱ. 示例 0. 个人方法官方题解一&#xff1a;二分查找官方题解二&#xff1a;双指针 标签&#xff1a;#数组 #双指针 #二分查找 Ⅰ. 题目 给你一个下标从 1 开始的整数数组 numbers …...

【AI平台】n8n入门5:创建MCP服务,及vscode调用MCP测试

前言 用n8n搭建一个MCP服务&#xff0c;然后用开发环境的MCP测试工具&#xff0c;测试调用一下。例子简单&#xff0c;只为了解原理。在开发环境&#xff0c;安装测试mcp服务的工具&#xff0c;vscode和Trae操作类似&#xff0c;而且在一个机器上的话&#xff0c;安装的插件公…...

第六部分:实战项目与拓展

欢迎来到 OpenCV 教程的第六部分&#xff01;你已经走过了从像素操作到特征提取、再到基础目标检测的旅程。现在&#xff0c;我们将迎接更激动人心的挑战&#xff1a;将这些技术结合起来&#xff0c;构建更贴近实际应用的系统。 本部分将带领你从更高层面思考如何设计一个计算…...

SQL Server连接异常 证书链是由不受信任的颁发机构颁发的

使用SQL Server连接数据库时报错如下&#xff1a; 标题: 连接到服务器 ------------------------------ 无法连接到 DESKTOP-N2KOQ8J\SQLEXPRESS。 ------------------------------ 其他信息: A connection was successfully established with the server, but then an erro…...

WebGL图形编程实战【5】:层次构建 × Shader初始化深度剖析

层次结构模型 三维模型和现实中的人类或机器人不一样&#xff0c;它的部件并没有真正连接在一起。如果直接转动上臂&#xff0c;那么肘部以下的部分&#xff0c;包括前臂、手掌和手指&#xff0c;只会留在原地&#xff0c;这样手臂就断开了。 所以&#xff0c;当上臂绕肩关节转…...

126. 单词接龙 II

题目 按字典 wordList 完成从单词 beginWord 到单词 endWord 转化&#xff0c;一个表示此过程的 转换序列 是形式上像 beginWord -> s1 -> s2 -> ... -> sk 这样的单词序列&#xff0c;并满足&#xff1a; 每对相邻的单词之间仅有单个字母不同。转换过程中的每个…...

【LeetCode Hot100】二叉树篇

前言 本文用于整理LeetCode Hot100中题目解答&#xff0c;因题目比较简单且更多是为了面试快速写出正确思路&#xff0c;只做简单题意解读和一句话题解方便记忆。但代码会全部给出&#xff0c;方便大家整理代码思路。 94. 二叉树的中序遍历 一句话题意 返回二叉树中序遍历的数…...

MySQL基础关键_002_DQL

目 录 一、初始化 二、简单查询 1.部分语法规则 2.查询一个字段 &#xff08;1&#xff09;查询员工编号 &#xff08;2&#xff09;查询员工姓名 3.查询多个字段 &#xff08;1&#xff09;查询员工编号、姓名 &#xff08;2&#xff09;查询部门编号、名称、位置 …...

游戏引擎学习第249天:清理调试宏

欢迎大家&#xff0c;让我们直接进入调试代码的改进工作 接下来&#xff0c;我们来看一下上次停留的位置。如果我没记错的话&#xff0c;上一场直播的结尾我有提到一些我想做的事情&#xff0c;并且在代码中留下了一个待办事项。所以也许我们今天首先做的就是解决这个问题。但…...

TwinCAT数据类型,%MX,%MD这些特殊符号

在 TwinCAT&#xff08;Beckhoff PLC 编程环境&#xff09;中&#xff0c;%MX、%MD 等符号是 IEC 61131-3 标准的地址表示法&#xff0c;用于直接访问 PLC 的物理 I/O 或内存区域。这些符号通常用于 变量声明 或 直接寻址&#xff0c;特别是在 TwinCAT 2 和 传统 PLC 编程 中较…...

力扣——20有效的括号

目录 1.题目描述&#xff1a; 2.算法思路&#xff1a; 3.代码展示: 1.题目描述&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须…...

正点原子STM32H743单片机实现ADC多通道检测

目标 使用STM32CubeMX工具&#xff0c;配置ADC相关参数&#xff0c;实现在STM32H743单片机上获取ADC多通道电压值。共14个ADC引脚&#xff0c;ADC2有5个&#xff0c;ADC3有9个&#xff0c;全部设置单通道 ADC引脚 PF3PF4PF5PF10PC0PC2PC3PH2PH3PA3PB0PB1PA4PA5PA6 STM32cube…...

前端封装WebSocket工具n

Web API 提供的 WebSocket 类&#xff0c;封装一个 Socket 类 // socket.js import modal from /plugins/modal const baseURL import.meta.env.VITE_APP_BASE_WS; const EventTypes [open, close, message, error, reconnect]; const DEFAULT_CHECK_TIME 55 * 1000; // 心…...

Docker进入MySQL之后如何用sql文件初始化数据

关闭Docker-compose.yml里面所有容器 docker compose -f docker_compose.yml down后台形式开启Docker-compose.yml所有容器 docker compose -f docker_compose.yml up -d罗列出所有启动过的&#xff08;包括退出过的&#xff09;容器 docker ps -a进入指定容器ID内部 docke…...

Docker搜索镜像报错

科学上网最方便。。。。 尝试一&#xff1a; 报错处理 Error response from daemon: Get https://index.docker.io/v1/search?qmysql&n25: dial tcp 31.13.84.2:443: i/o timeout 国内从 DockerHub 拉取镜像有时会遇到困难&#xff0c;此时可以配置镜像加速器。Docke…...

【Unity笔记】基于距离驱动的参数映射器 InverseDistanceMapper 设计与实现

需求&#xff1a; 当用户距离目标位置越近&#xff0c;参数值越大。 可用于控制场景亮度、动画进度、交互强度等多种效果。 一、需求背景&#xff1a;如何让“距离”成为设计的一部分&#xff1f; 在虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;乃…...

【Spring AI】Java结合ollama实现大模型调用

在较新的Java版本中&#xff0c;编译器已经支持了接入各种AI模型工具进行开发&#xff0c;这篇文章我会介绍如何利用Spring AI进行大模型的调用的基础方法。 环境准备 由于这篇文章是结合ollama进行演示&#xff0c;所以在开始前需要先安装ollama服务&#xff0c;这个的具体步…...

docker制作python大模型镜像(miniconda环境),工程改造记录

**环境说明&#xff1a;**从系统镜像开始打造python大模型镜像&#xff0c;之前是人工手动装的方式&#xff0c;并且模型和依赖在公网中&#xff0c;对于离线交付环境不太友好&#xff0c;所以打造的离线化交付版本 Dockerfile: FROM centos:7.9 ENV PYTHONIOENCODINGutf-8 E…...

在油气地震资料积分法偏移成像中,起伏地表处理

在油气地震资料积分法偏移成像中&#xff0c;起伏地表情况会带来波场传播路径畸变、静校正问题以及成像精度下降等挑战。以下是处理起伏地表的常用方法和技术要点&#xff1a; 1. 静校正预处理 高程静校正&#xff1a;将地表各接收点校正到统一基准面&#xff08;浮动基准面或…...

经典算法 独立任务最优调度问题

独立任务最优调度问题 题目描述 用2 台处理机A 和B 处理n 个作业。设第i 个作业交给机器A 处理时需要时间ai &#xff0c;若由机器B 来处理&#xff0c;则需要时间bi 。由于各作业的特点和机器的性能关系&#xff0c;很可能对于某些i&#xff0c;有ai >bi&#xff0c;而对…...

在TensorFlow中,`Dense`和`Activation`是深度学习模型构建里常用的层

在TensorFlow中&#xff0c;Dense和Activation是深度学习模型构建里常用的层&#xff0c;下面就详细解释它们的使用语法和含义。 1. Dense层 含义 Dense层也就是全连接层&#xff0c;这是神经网络里最基础的层。在全连接层中&#xff0c;每一个输入神经元都和输出神经元相连…...

基于 Rancher 部署 Kubernetes 集群的工程实践指南

一、现状分析 在当今的云计算和容器化领域&#xff0c;Kubernetes&#xff08;K8S&#xff09;已经成为了容器编排和管理的事实标准。根据 Gartner 的数据&#xff0c;超过 70% 的企业在生产环境中使用 K8S 来管理容器化应用。然而&#xff0c;K8S 的安装和管理对于许多企业来…...

Seaborn

1. Seaborn概述&#xff1a;Seaborn是基于Matplotlib的Python数据可视化库&#xff0c;专注绘制统计图形。它简化可视化流程&#xff0c;提供高级接口与美观默认主题&#xff0c;能以少量代码实现复杂图形绘制。 2. 安装与导入&#xff1a;安装Seaborn可使用 pip install seabo…...

0基础FWT详解2(巩固)

FWT巩固1 FWT巩固1卡常技巧巩固习题luogu6097CF662Cluogu4221FWT巩固1 在 上篇文章 中,我们学习了 F W T FWT FWT,本文将带读者一起做几道题,巩固对 F W T FWT FWT 的使用 卡常技巧 一个常数大的 F W T FWT FWT 是非常不利于做题的,所以我们需要卡常。 作者简单总结…...

阿里云 ECS 服务器进阶指南:存储扩展、成本优化与架构设计

一、弹性存储架构&#xff1a;块存储深度解析与挂载实践 &#xff08;一&#xff09;块存储类型与技术特性 阿里云块存储作为 ECS 核心存储方案&#xff0c;提供三种主流类型&#xff1a; ESSD 云盘 性能等级&#xff1a;PL0/PL1/PL2/PL3&#xff0c;最高支持 100 万 IOPS …...

运维打铁: 存储方案全解析

文章目录 一、引言二、思维导图三、常见存储方案介绍3.1 直接附加存储&#xff08;DAS&#xff0c;Direct Attached Storage&#xff09;1. 原理2. 优缺点3. 适用场景 3.2 网络附加存储&#xff08;NAS&#xff0c;Network Attached Storage&#xff09;1. 原理2. 优缺点3. 适用…...

Semtech公司简介以及主流产品

Semtech 公司是一家美国的半导体公司&#xff0c;总部位于加利福尼亚州卡马里洛。以下是其简介和主流产品介绍&#xff1a; 公司简介 成立时间与地点&#xff1a;1960 年成立于加利福尼亚州纽伯里帕克。发展历程&#xff1a;最初为军事和航空航天公司提供零部件&#xff0c;1…...

flutter 专题 五十六 Google 2020开发者大会Flutter专题

由于疫情的原因&#xff0c;今年的Google 开发者大会 (Google Developer Summit) 在线上举行&#xff0c;本次大会以“代码不止”为主题&#xff0c;全面介绍了产品更新以及一系列面向本地开发者的技术支持内容。我比较关注的是移动开发&#xff0c;在本次大会上&#xff0c;关…...

93. 后台线程与主线程更新UI Maui例子 C#例子

在.NET MAUI开发中&#xff0c;多线程是常见的需求&#xff0c;但UI更新必须在主线程上执行。今天&#xff0c;我们来探讨一个简单而优雅的解决方案&#xff1a;MainThread.InvokeOnMainThreadAsync。 一、背景 在跨平台应用开发中&#xff0c;后台线程常用于执行耗时操作&am…...

5.运输层

5. 运输层 1. 概述 第2~4章依次介绍了计算机网络体系结构中的物理层、数据链路层和网络层&#xff0c;它们共同解决了将主机通过异构网络互联起来所面临的问题&#xff0c;实现了主机到主机的通信然而在计算机网络中实际进行通信的真正实体&#xff0c;是位于通信两端主机中的…...

ActiveMQ 可靠性保障:消息确认与重发机制(二)

ActiveMQ 重发机制 重发机制的原理与触发条件 ActiveMQ 的重发机制是确保消息可靠传输的重要手段。当消息发送到 ActiveMQ 服务器后&#xff0c;如果消费者由于某些原因未能成功处理消息&#xff0c;ActiveMQ 会依据配置的重发策略&#xff0c;将消息重新放入队列或主题中&am…...

Vue+tdesign t-input-number 设置长度和显示X号

一、需求 Vuetdesign t-input-number 想要设置input的maxlen和显示X号 二、实现 t-input&#xff0c;可以直接使用maxlength和clearable属性 <t-input v-model"value" clearable maxlength10 placeholder"请输入" clear"onClear" blur&q…...

机器学习|通过线性回归了解算法流程

1.线性回归引入 2.决策函数 3. 损失函数 4.目标函数 5.目标函数优化问题 6.过拟合 7.正则化...

两向量平行公式、向量与平面平行公式、两平面平行公式;两向量垂直公式、向量与平面垂直公式、两平面垂直公式

目录 一、两向量平行公式​ 二、向量与平面平行公式​ 三、两平面平行公式​ 四、两向量垂直公式​ 五、向量与平面垂直公式​ 六、两平面垂直公式​ 观察与总结 一、两向量平行公式 二、向量与平面平行公式 三、两平面平行公式 四、两向量垂直公式 五、向量与平…...

vscode 个性化

vscode 个性化 设置 吸顶效果 使用前使用后 设置方法 VS Code 的粘性滚动预览 - 类似于 Excel 的冻结首行 插件 代码片段分享 - CodeSnap 使用方式 CtrlShiftP输入CodeSnap 唤起插件选择代码 行内报错提示 - Error Lens 使用前使用后 VSCode Error Lens插件介绍&…...

OpenHarmony-简单的HDF驱动

学习于&#xff1a;https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/driver/driver-hdf-manage.md 首先&#xff0c;OpenHarmony系统里的HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架&#xff0c;已经规范设备驱动的模型、设备节点的配置与统一的…...

Copilot重磅更新:引用文件夹创建Word文档

大家好&#xff0c;AI技术笔记为您带来一则好消息&#xff1a; 根据广大用户的反馈&#xff0c;Microsoft 365 Copilot在Word中的引用能力全面升级啦&#xff01; 不管是撰写、审阅还是定稿文档&#xff0c;现在你可以更快、更高效地引用更多资料&#xff01; ✨三大重磅改进…...

SQL Server数据库提权的几种方法——提权教程

SQL Server数据库提权的几种方法——提权教程 一、简介 在利用系统溢出漏洞没有效果的情况下,可以采用数据库进行提权。 数据库提权的前提条件: 1、服务器开启数据库服务 2、获取到最高权限用户密码 (除Access数据库外,其他数据库基本都存在数据库提权的可能) 二、使用x…...

解决在Mac上无法使用“ll”命令

在 macOS 上&#xff0c;ll 命令是一个常见的别名&#xff0c;它通常是指向 ls -l 的。但是&#xff0c;如果你看到 zsh: command not found: ll&#xff0c;这意味着你当前的 zsh 配置中没有设置 ll 作为别名。 解决方法&#xff1a; 1. 使用 ls -l 命令 如果只是想查看目录…...

Dockerfile最佳实践:构建高效、安全的容器镜像

一、前言 Dockerfile是一个文本文档,它包含用户可以在命令行上调用的所有指令,每一条指令构建一层镜像。在日常开发中我们常常需要自己编写Dockerfile来构建镜像,而构建一个精巧、实用且高品质的镜像对运行环境来说尤为重要。下面我们来排一排如何构建这样的镜像。 二、目…...

mac电脑pytest生成测试报告

时隔了好久再写代码&#xff0c;感觉我之前的积累都白费了&#xff0c;全部忘记了&#xff0c;看来每一步都有记录对于我来说才是最好的。 最近又要重新搞接口自动化&#xff0c;然而是在mac电脑&#xff0c;对于我长期使用windows的人来说真的是个考验&#xff0c;对此次过程…...

鸿蒙 应用开发 项目资源结构及资源访问

三层工程结构 模块分类 使用...

C#学习第20天:垃圾回收

什么是垃圾回收&#xff1f; 定义&#xff1a;垃圾回收是一种自动内存管理机制&#xff0c;负责回收不再使用的对象所占用的内存。目的&#xff1a;通过自动化内存回收&#xff0c;减少内存泄漏的风险&#xff0c;并简化开发者的工作。 垃圾回收的核心概念 1. 垃圾回收器的工…...

C#学习笔记 项目引用添加异常

这个问题出现多次了 我觉得有必要记录一下 场景 同一个解决方案下添加了多个项目 我想在单元测试项目中引用一下项目1&#xff0c;按照步骤&#xff1a;添加引用- 项目- 浏览- 在指定目录下找到项目的工程文件XXXSystem.csproj- 确定 然后就触发了异常 解决方案 首先 清理解决…...

使用模块中的`XPath`语法提取非结构化数据

想要在代码中使用Xpath进行处理&#xff0c;就需要模块lxml 模块安装 pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simplelxml的使用 使用lxml转化为Element对象 from lxml import etreetext <div> <ul> <li class"item-1"><a …...

复杂度和顺序表(双指针方法)

目录 目录 目录 前言&#xff1a; 一、时间复杂度和空间复杂度 1.1概念 1.2规则 二、顺序表 2.1静态顺序表 2.2动态顺序表 三、双指针法 四、总结 前言&#xff1a; 时间复杂度和空间复杂度是用于判断算法好坏的指标&#xff0c;程序性能的核心指标。时间复杂度主要衡…...

day006-实战练习题-参考答案

老男孩教育-99期-实战练习题 1. 你作为"老男孩教育99期云计算"新晋运维工程师&#xff0c;在入职首日遭遇紧急事件&#xff1a; "生产环境3台Web服务器突发性能告警&#xff0c;技术总监要求你立即完成&#xff1a; 快速建立故障诊断工作区收集关键系统指标分…...

批量删除OpenStack实例

在Linux终端实现批量删除OpenStack实例&#xff0c;支持并发删除、安全确认、重试机制、优先清理运行中实例 #!/bin/bash # # 增强版 OpenStack 删除实例脚本 # 功能&#xff1a;支持并发删除、安全确认、重试机制、优先清理运行中实例 # 更新&#xff1a;2025年4月30日 # ##…...

楼宇智能化一、二章【期末复习】

一章、楼宇概述 智能建筑的定义:以建筑物为平台,基于对各类智能化信息的综合应用,集架构、系统、应用、管理及优化组合为一体,具有感知、传输、记忆、推理、判断和决策的综合智慧能力,形成以人、建筑、环境互为协调的整合体,为人们提供安全、高效、便利及可持续发展功能…...