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

【KWDB 创作者计划】深度实操体验 KWDB 2.2.0:从安装到实战的全流程解析以及实操体验

一、引言

KWDB 是一款高性能的分布式数据库,支持事务、强一致性和水平扩展。本文将详细介绍如何通过 Docker 快速部署 KWDB 2.2.0,并基于实际操作演示数据库的核心功能,涵盖环境准备、容器运行、数据操作及集群部署等关键环节。

二、Docker 环境准备

1. 安装 Docker(以 Ubuntu 22.04 为例)

步骤 1:更新系统并安装依赖

sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg

步骤 2:添加 Docker 官方 GPG 密钥

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

步骤 3:配置 Docker 软件源

echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

步骤 4:安装 Docker Engine

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

步骤 5:启动 Docker 并验证

sudo systemctl enable --now docker
docker --version  # 应显示 Docker 版本(如 24.0.6)
sudo docker run hello-world  # 验证 Docker 基础功能

2. 安装 Docker Compose(可选,集群部署用)

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version  # 应显示版本(如 1.29.2)

三、获取 KWDB 2.2.0 镜像

1. 从 Docker Hub 拉取官方镜像

# 拉取稳定版(推荐生产环境)
docker pull kwbasedb/kwbase:2.2.0# 拉取特定版本(替换 <版本号> 为目标版本)
docker pull kwbasedb/kwbase:<版本号># 验证镜像列表
docker images | grep kwbase
# 预期输出:kwbasedb/kwbase          2.2.0     a1b2c3d4e567    2 weeks ago     1.2GB

2. 离线环境加载镜像(若有 .tar 包)

docker load < KaiwuDB.tar  # 加载本地镜像
docker tag <镜像ID> kwbasedb/kwbase:2.2.0  # 重命名镜像标签

3. 私有仓库拉取(企业内网场景)

docker pull private-registry.kaiwudb.com/kwbasedb/kwbase:2.2.0

四、运行 KWDB 单节点(非安全模式,测试环境)

1. 创建数据存储目录

mkdir -p /data/kwdb/data  # 主机端数据卷

2. 启动容器命令

docker run -d \--name kwdb-node \--net host \  # 使用主机网络,方便本地连接-v /data/kwdb/data:/kaiwudb/deploy/kaiwudb-container \  # 挂载数据卷kwbasedb/kwbase:2.2.0 \/kaiwudb/bin/kwbase start-single-node \--insecure \  # 禁用 TLS(测试环境使用,生产环境需启用安全模式)--listen-addr=0.0.0.0:26257 \  # 数据库监听端口--http-addr=0.0.0.0:8080 \  # HTTP 管理端口(用于监控)

3. 关键参数说明

参数说明
--insecure禁用安全连接,简化测试环境配置(生产环境需通过 --certs-dir 配置证书)
--listen-addr数据库服务监听地址,0.0.0.0 表示接受所有来源连接
--http-addr暴露 HTTP 接口,用于访问监控页面(如 http://localhost:8080
--store容器内数据存储路径,需与主机挂载的卷路径一致

五、连接数据库与实战操作

1. 使用官方 CLI 工具连接(容器内)

进入容器并启动 CLI
docker exec -it kwdb-node /bin/bash
export LD_LIBRARY_PATH=/kaiwudb/lib
/kaiwudb/bin/kwbase sql --insecure --host=localhost:26257
示例:基础 SQL 操作
-- 创建数据库
CREATE DATABASE test_db;
USE test_db;-- 创建表(含主键)
CREATE TABLE users (id INT PRIMARY KEY,name STRING,age INT
);-- 插入数据
INSERT INTO users (id, name, age) VALUES (1, 'Alice', 30), (2, 'Bob', 25);-- 查询数据
SELECT * FROM users WHERE age > 25;-- 更新数据
UPDATE users SET age = 26 WHERE name = 'Bob';-- 删除数据
DELETE FROM users WHERE id = 1;

2. 主机端连接(通过端口映射)

直接访问本地端口(假设容器使用主机网络)
# 安装 CLI 工具(主机端,需提前下载 kwbase 二进制文件)
kwbase sql --insecure --host=localhost:26257

3. 编程接口实战(以 Go 为例)

依赖配置(go.mod
require (gitee.com/kwbasedb/kwbase/pkg/client v2.2.0
)
代码示例:CRUD 操作
package mainimport ("context""fmt""log""gitee.com/kwbasedb/kwbase/pkg/client"
)func main() {ctx := context.Background()conn, err := client.Connect(ctx, "postgresql://localhost:26257/test_db?sslmode=disable")if err != nil {log.Fatalf("连接失败: %v", err)}defer conn.Close(ctx)// 插入数据_, err = conn.Exec(ctx, "INSERT INTO users (id, name, age) VALUES ($1, $2, $3)", 3, "Charlie", 35)if err != nil {log.Fatalf("插入失败: %v", err)}// 查询数据rows, err := conn.Query(ctx, "SELECT name, age FROM users WHERE age > $1", 25)if err != nil {log.Fatalf("查询失败: %v", err)}defer rows.Close()for rows.Next() {var name stringvar age intif err := rows.Scan(&name, &age); err != nil {log.Fatalf("扫描行失败: %v", err)}fmt.Printf("用户: %s, 年龄: %d\n", name, age)}
}

六、集群部署(进阶操作,基于 Docker Compose)

1. 编写 docker-compose.yml

version: '3.3'
services:node1:image: kwbasedb/kwbase:2.2.0hostname: node1network_mode: hostprivileged: truevolumes:- /data/kwdb/node1:/kaiwudb/deploy/kaiwudb-containercommand: - /kaiwudb/bin/kwbase- start- --insecure- --listen-addr=0.0.0.0:26257- --advertise-addr=localhost:26257  # 节点间通信地址- --store=/kaiwudb/deploy/kaiwudb-containernode2:image: kwbasedb/kwbase:2.2.0hostname: node2network_mode: hostprivileged: truevolumes:- /data/kwdb/node2:/kaiwudb/deploy/kaiwudb-containercommand: - /kaiwudb/bin/kwbase- start- --insecure- --listen-addr=0.0.0.0:26258- --advertise-addr=localhost:26258- --store=/kaiwudb/deploy/kaiwudb-container- --join=localhost:26257  # 加入第一个节点(集群引导)

2. 启动集群

docker-compose up -d

3. 验证集群状态

# 进入任一节点容器
docker exec -it kwdb-node1 /bin/bash
/kaiwudb/bin/kwbase sql --insecure --host=localhost:26257# 执行集群状态查询
SELECT * FROM system.jobs;

七、停止与清理

1. 停止单节点容器

docker stop kwdb-node
docker rm kwdb-node

2. 停止集群

docker-compose down

3. 清除数据(谨慎操作)

rm -rf /data/kwdb/data  # 主机端数据卷

八、生产环境注意事项

1. 启用安全模式

# 挂载证书目录(需提前生成证书)
-v /path/to/certs:/kaiwudb/certs# 启动命令添加安全参数
--certs-dir=/kaiwudb/certs \
--tlscert=/kaiwudb/certs/client.crt \
--tlskey=/kaiwudb/certs/client.key \
--tlsca=/kaiwudb/certs/ca.crt

2. 资源限制

# 限制 CPU 和内存(根据硬件配置调整)
--cpus=4 \
--memory=8g

3. 监控与日志

  • 通过 --http-addr 访问监控页面(如 http://localhost:8080/metrics)。
  • 容器日志查看:docker logs kwdb-node

4. 版本兼容性

确保 Docker 版本与 KWDB 镜像兼容,参考官方文档推荐的环境配置(如 Docker 20.10+)。

九、总结

通过 Docker 部署 KWDB 2.2.0 能够快速搭建单节点或集群环境,适用于开发测试和生产场景。本文覆盖了从环境准备到实战操作的全流程,包括 SQL 交互和编程接口使用。在生产环境中,需注意安全配置、资源管理和监控,以确保数据库的稳定运行。如需进一步探索分布式特性(如自动分片、故障转移),可参考 KWDB 官方文档的高级集群管理指南。

KWDB 核心模块实操体验:从测试工具到分布式功能实战

一、测试工具链实操:精准控制测试环境

1. 时间控制工具:TestingSetNow

场景:在测试中模拟特定时间,避免依赖系统时钟
代码片段

// pkg/util/metric/metric.go
func TestingSetNow(f func() time.Time) func() {origNow := nownow = freturn func() {now = origNow}
}

实操步骤

  • 步骤 1:定义模拟时间函数

  •   mockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)restore := metric.TestingSetNow(func() time.Time { return mockTime })defer restore()
  • 步骤 2:验证时间生效

  •   assert.Equal(t, mockTime, metric.Now()) // 应返回true

    价值:确保时间敏感逻辑(如租约过期、定时任务)的测试结果稳定。

    2. 临时目录创建:TempDir

    场景:测试中创建临时文件 / 目录,避免污染真实环境
    代码片段

    // pkg/testutils/dir.go
    func TempDir(t testing.TB) (string, func()) {dir, err := ioutil.TempDir("", fileutil.EscapeFilename(t.Name()))// ... 错误处理及清理逻辑
    }

    实操步骤

  • 步骤 1:生成临时目录

      tempDir, cleanup := testutils.TempDir(t)defer cleanup()
  • 步骤 2:写入测试文件

      filePath := filepath.Join(tempDir, "test.txt")ioutil.WriteFile(filePath, []byte("test data"), 0644)

    最佳实践:使用defer确保测试后自动清理,避免磁盘残留。

    二、分布式核心功能:租约管理实战

     租约接口:leaseManager

    场景:分布式系统中实现资源互斥访问(如 DDL 操作)
    代码片段

    // pkg/sqlmigrations/migrations.go
    type leaseManager interface {AcquireLease(ctx context.Context, key roachpb.Key) (*leasemanager.Lease, error)ExtendLease(ctx context.Context, l *leasemanager.Lease) errorReleaseLease(ctx context.Context, l *leasemanager.Lease) errorTimeRemaining(l *leasemanager.Lease) time.Duration
    }

    实现示例

    // 假设使用Raft租约机制
    func (lm *raftLeaseManager) AcquireLease(ctx context.Context, key roachpb.Key) (*leasemanager.Lease, error) {// 1. 向Raft集群发起租约申请resp, err := lm.raftClient.Send(ctx, &roachpb.LeaseAcquireRequest{Key: key})if err != nil {return nil, err}// 2. 创建租约对象return &leasemanager.Lease{Key:       key,LeaseID:   resp.LeaseID,Expiration: resp.Expiration,}, nil
    }

    操作流程

  • 获取租约:通过唯一键(如roachpb.Key("/ddl/table1"))申请租约
  • 续租:在租约过期前调用ExtendLease(通常在后台 goroutine 中定时执行)
  • 释放租约:操作完成后主动释放,避免资源泄漏

三、时间序列数据处理:查询与降采样

降采样测试:TestQueryDownsampling

场景:验证时间序列数据降采样逻辑的正确性
代码片段(关键测试逻辑):

// pkg/ts/query_test.go
query := tm.makeQuery("test.metric", resolution1ns, 0, 60)
query.SampleDurationNanos = 10 // 设置采样间隔10ns
query.assertSuccess(6, 2)      // 预期6个时间点,2个数据源

实操步骤

  • 步骤 1:准备测试数据

  •   tm.storeTimeSeriesData(resolution1ns, []tspb.TimeSeriesData{tsd("test.metric", "source1", tsdp(1, 100), tsdp(5, 500)), // 多个数据点})
  • 步骤 2:执行降采样查询

      query := tm.makeQuery("test.metric", resolution1ns, 0, 10)query.SampleDurationNanos = 5 // 按5ns间隔聚合query.assertNoError()         // 验证查询无错误query.assertResultCount(2)    // 验证聚合后的数据点数量

    核心断言

  • assertError:验证非法参数(如采样间隔小于分辨率)的错误处理

  • assertSuccess:验证正常场景下的结果正确性

四、集群元数据管理:分区与索引格式化

表结构格式化:FormatTable

场景:调试时打印表结构细节(列、索引、外键等)
代码片段

// pkg/sql/opt/cat/utils.go
func FormatTable(cat Catalog, tab Table, tp treeprinter.Node) {// 打印列定义for i := 0; i < tab.DeletableColumnCount(); i++ {formatColumn(tab.Column(i), IsMutationColumn(tab, i), &buf)child.Child(buf.String())}// 打印索引和外键for i := 0; i < tab.DeletableIndexCount(); i++ { formatCatalogIndex(...) }
}

使用示例

// 在测试中打印表结构
cat := testCatalog.New()
table := cat.Table("test_db", "users")
treeprinter := treeprinter.New("Table Structure")
FormatTable(cat, table, treeprinter)
fmt.Println(treeprinter.String())

输出示例

Table Structure
├── COLUMN id (INT, PRIMARY KEY)
├── COLUMN name (STRING)
├── INDEX idx_age (AGE)
└── FOREIGN KEY (user_id) REFERENCES orders(user_id)

五、生产级测试最佳实践

1. 资源隔离:Docker Compose 集群测试

场景:在隔离环境中测试集群节点间通信与数据同步
步骤

1.编写 docker-compose.yml(参考前文集群部署部分)

2.启动集群

docker-compose up -d

3.验证租约机制

2. 性能测试:并发写入压力测试

工具:使用kwbase-bench工具生成负载
命令示例

kwbase-bench write --concurrency=100 --duration=30s "postgresql://localhost:26257/test_db?sslmode=disable"

关注点

  • 租约竞争导致的重试次数(通过system.jobs表监控)
  • 分区均衡性(通过http://localhost:8080/tablets查看分区分布)

六、总结:从代码到实战的关键链路

  1. 测试工具:利用TestingSetNowTempDir等提升测试可靠性
  2. 核心接口:通过leaseManager实现分布式互斥,确保操作原子性
  3. 数据处理:降采样测试验证时间序列查询的准确性与效率
  4. 集群管理:格式化工具辅助元数据调试,Docker 环境实现隔离测试

通过以上实操,可快速掌握 KWDB 核心模块的开发与测试技巧,为分布式数据库的深度优化与故障排查奠定基础。

相关文章:

【KWDB 创作者计划】深度实操体验 KWDB 2.2.0:从安装到实战的全流程解析以及实操体验

一、引言 KWDB 是一款高性能的分布式数据库&#xff0c;支持事务、强一致性和水平扩展。本文将详细介绍如何通过 Docker 快速部署 KWDB 2.2.0&#xff0c;并基于实际操作演示数据库的核心功能&#xff0c;涵盖环境准备、容器运行、数据操作及集群部署等关键环节。 二、Docker…...

ASP.NET Core中SqlSugar基本使用

创建数据模型 public class News{[SugarColumn(IsIdentity true, IsPrimaryKey true)]public int Id { get; set; }//nvarchar带中文比较好[SugarColumn(ColumnDataType "nvarchar(30)")]public string Title { get; set; }[SugarColumn(ColumnDataType "te…...

【软考-系统架构设计师】设计模式三大类型解析

设计模式三大类型深度解析 一、创建型模式&#xff08;Creational Patterns&#xff09; 核心目标&#xff1a;解耦对象的创建与使用过程&#xff0c;提供灵活的对象生成机制&#xff0c;降低系统对具体类的依赖。 适用场景&#xff1a;需要动态创建对象、隐藏对象创建细节或…...

正则表达式在爬虫中的应用:匹配 HTML 和 JSON 的技巧

在爬虫开发中&#xff0c;正则表达式是一种强大的工具&#xff0c;可以帮助我们从复杂的文本中提取所需信息。无论是处理 HTML 页面还是 JSON 数据&#xff0c;正则表达式都能发挥重要作用。本文将深入探讨正则表达式在爬虫中的应用&#xff0c;包括如何匹配 HTML 和 JSON 数据…...

LaTeX文章写法

文章目录 模板1、无序列表格式2、对齐2.1、section对齐 模板 文章模板 %\documentclass[a4paper,12pt]{article} % 选择 A4 纸张和 12pt 字体大小 \documentclass[12pt,a4paper]{ctexart}% 加载必要的宏包 \usepackage{fontspec} % 支持字体设置 \usepackage{xeCJK} …...

电力变压器油的<油质气象色谱>指标分析

目录 1.变压器油质化验指标分析 2.变压器油质化验原理及流程 变压器油质气象色谱&#xff08;气相色谱&#xff0c;Gas Chromatography, GC&#xff09;检测是一种通过分离和定量分析油中溶解气体成分的技术&#xff0c;用于诊断变压器内部故障。其核心原理基于不同气体在流动…...

赋能能源 | 智慧数据,构建更高效智能的储能管理系统

行业背景 随着新能源产业的快速发展&#xff0c;大规模储能系统在电力调峰、调频及可再生能源消纳等领域的重要性日益凸显。 储能电站作为核心基础设施&#xff0c;其能量管理系统&#xff08;EMS&#xff09;需要处理海量实时数据&#xff0c;包括电池状态、功率变化、环境监…...

AWS中国区服务部署与ICP备案全流程指南:从0到1实现合规上线

导语: 在中国大陆地区使用AWS服务,不仅需要了解AWS的基本操作,还需要熟悉中国特有的法规要求。本文将为您提供一个全面的指南,涵盖AWS中国区账号创建、服务部署、ICP备案申请,以及合规运营的全过程。无论您是AWS新手还是经验丰富的开发者,这篇文章都将为您在AWS中国区的journey…...

android系统使用FFmpeng集成OpenSL音频录制和播放

目录 一、背景 二、方案 三、代码实现 3.1 初始化OpenSL 3.2 设置播放回掉 3.3 使用FFmpeg计算出转换后的样本数目 一、背景 FFmpeg不能够操作Android的硬件设备&#xff0c;所以要在Android系统上面播放音频的话需要另找办法 二、方案 Android 环境下音频播放通常有两…...

顺序表和链表,时间和空间复杂度--数据结构初阶(1)(C/C++)

文章目录 前言时间复杂度和空间复杂度理论部分习题部分 顺序表和链表理论部分作业部分 前言 这期的话会给大家讲解复杂度&#xff0c;顺序表和链表的一些知识和习题部分(重点是习题部分&#xff0c;因为这几个理念都比较简单) 时间复杂度和空间复杂度 理论部分 时间复杂度和…...

【C++面向对象】封装(下):探索C++运算符重载设计精髓

&#x1f525;个人主页 &#x1f525; &#x1f608;所属专栏&#x1f608; 每文一诗 &#x1f4aa;&#x1f3fc; 年年岁岁花相似&#xff0c;岁岁年年人不同 —— 唐/刘希夷《代悲白头翁》 译文&#xff1a;年年岁岁繁花依旧&#xff0c;岁岁年年看花之人却不相同 目录 C运…...

分布式存储数据恢复—hbase和hive数据库文件被删除如何恢复数据?

分布式存储数据恢复环境&#xff1a; 16台某品牌R730xd服务器节点&#xff0c;每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障&#xff1a; 数据库底层文件被误删除&#xff0c;数据库不能使用。要求恢复hbase和hive数据库。 北亚企安数据恢复…...

【并行分布计算】Hadoop伪分布搭建

Hadoop伪分布搭建 1. 修改core-site.xml fs.defaultFS设置的是HDFS的地址&#xff0c;设置运行在本地的9000端口上 hadoop.tmp.dir设置的是临时目录&#xff0c;如果没有设置的话默认在/tmp/hadoop-${user.name}中&#xff0c;系统重启后会导致数据丢失&#xff0c;因此修改这…...

Redis面试——常用命令

一、String &#xff08;1&#xff09;设置值相关命令 1.1.1 SET 功能&#xff1a;设置一个键值对&#xff0c;如果键已存在则覆盖旧值语法&#xff1a; SET key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds&#xff1a;设置键的过期时间为 seconds 秒 PX milli…...

告别定时任务!用Dagster监听器实现秒级数据响应自动化

在数据管道开发中&#xff0c;我们经常面临需要根据外部事件触发计算任务的场景。传统基于时间的调度方式存在资源浪费和时效性不足的问题。本文将通过Dagster的**传感器&#xff08;Sensor&#xff09;**功能&#xff0c;演示如何构建事件驱动的数据处理流程。 场景模拟&…...

测试用例的生命周期:从诞生到退役的全过程管理

测试用例不是一成不变的标本 在敏捷开发时代&#xff0c;测试用例就像有机生命体一样会经历完整的生命周期。据Microsoft Research调查&#xff0c;良好管理的测试用例可使缺陷发现率提升40%&#xff0c;而缺乏管理的用例库在6个月后失效比例高达65%&#xff0c;本文将深入解析…...

【并行分布计算】Hadoop单机分布搭建

Hadoop单机分布搭建 环境&#xff1a;VMware Workstation虚拟机centos7镜像MobaXterm远程连接工具 为了使机器都处于同一个局域网中&#xff0c;先要修改机器的ip地址分配方式为固定ip&#xff0c;并为其固定分配一个ip地址。 [rootlocalhost ~]# vi /etc/sysconfig/network-…...

Android studio前沿开发--利用socket服务器连接AI实现前后端交互(全站首发思路)

我们在前几期学习了利用socket进行前后端的交互&#xff0c;但那只是基础性知识&#xff0c;这次&#xff0c;通过参考讯飞星火的java参考文档&#xff0c;再结合之前所学的socket服务&#xff0c;成功实现了通过后端将AI的调用实现在了自己的APP中。 本次的学习内容 1.真机的…...

Redis的下载安装和使用(超详细)

目录 一、所需的安装包资源小编放下述网盘了&#xff0c;提取码&#xff1a;wshf 二、双击打开文件redis.desktop.manager.exe 三、点击next后&#xff0c;再点击i agree 四、点击箭头指向&#xff0c;选择安装路径&#xff0c;然后点击Install进行安装 五、安装完后依次点…...

手机状态:UML 状态图(State Diagram)的解析与绘画

目录 一、UML 状态图&#xff08;State Diagram&#xff09;是什么 二、题目原型 三、手机状态图的解析 状态转换的触发条件 四、状态图的构建与解读 图的解读 五、状态图的实际应用 六、总结与展望 一、UML 状态图&#xff08;State Diagram&#xff09;是什么 UML …...

MyBatisPlus-QueryWrapper的exists方法拼接SQL中的EXISTS子句

在 MyBatis-Plus 中,QueryWrapper 的 exists 方法用于拼接 SQL 中的 EXISTS 子句,通常用于构 建子查询条件。以下是具体用法和示例: ​​1. 基本语法​​ // 判断是否存在符合条件的记录 queryWrapper.exists(String existsSql); queryWrapper.notExists(String existsSq…...

HarmonyOS-ArkUI: 自定义组件冻结功能@ComonentV2 freezeWhenInactive属性

引 @ComponentV2 装饰器是可以接收参数的,叫freezeWhenInactive, 顾名思义,就是当组件变成Inactive的时候,冻结。其默认值是false。所以如果您没有传参数时,默认不冻结。 冻结到底是一种什么状态呢?说简单点就是状态变量不响应更新。@Monitor修饰的那些状态变量更新检测…...

【问题】一招解决vscode输出和终端不一致的困扰

背景&#xff08;闲话Trae&#xff09; Trae是挺好&#xff0c;用了几天&#xff0c;发现它时不时检查文件&#xff0c;一检测就转悠半天&#xff0c;为此我把当前环境清空&#xff0c;就留一个正在调的程序&#xff0c;结果还照样检测&#xff0c;虽然没影响什么&#xff0c;…...

【CODESYS学习笔记001】MODBUS-TCP 与 标准TCP通信的优缺点对比

1. MODBUS-TCP 优点&#xff1a; 1. 标准化协议 - 基于工业标准&#xff08;RFC标准&#xff09;&#xff0c;兼容性强&#xff0c;几乎所有PLC和工业设备都支持。 - 固定功能码&#xff08;如0x03读寄存器、0x10写寄存器&#xff09;&#xff0c;开发简单。 2. 数据格…...

⭐ Unity 使用Odin Inspector增强编辑器的功能:UIManager脚本实例

先看一下测试效果&#xff1a; 在Unity开发中&#xff0c;Odin Inspector已经成为了一个非常受欢迎的工具&#xff0c;它通过增强编辑器的功能&#xff0c;使得开发者在工作中更加高效&#xff0c;尤其是在处理复杂数据和自定义编辑器方面。今天&#xff0c;我们将通过一个简…...

Linux网络协议栈深度解析:从数据封装到子网划分的底层架构

知识点5 1、封装和解封装的流程 封装数据报文&#xff1a;发送数据 解封装数据报文&#xff1a;接收报文 以后我们的网络编程过程中&#xff0c;只需要告知IP与端口号&#xff0c;链路层的MAC地址 有协议栈帮我们提供。 2、链路层报文格式&#xff08;mac报文&#xff09; …...

Java与MySQL数据库连接的JDBC驱动配置教程

系列文章目录 Java JDBC编程 文章目录 系列文章目录前言一、JDBC简介&#xff1a;二、mysql-connector-java驱动详解&#xff1a; 驱动版本特性介绍&#xff1a; 三、JDBC驱动安装与配置&#xff1a; 1.IDE项目设置:2.命令行安装&#xff1a;3.使用Maven或Gradle &#xff1a;…...

光伏产品研发项目如何降本增效?8Manage 项目管理软件在复合材料制造的应用

在复合材料制造领域&#xff0c;特别是光伏PECVD石墨舟和燃料电池石墨双极板等高精尖产品的研发过程中&#xff0c;高效的项目管理直接决定了产品开发周期、质量和市场竞争力。然而&#xff0c;许多企业在项目立项、进度跟踪、资源分配和质量控制等环节面临挑战。 针对这些痛点…...

矫平机:工业制造中的“板材整形师“

在机械制造车间此起彼伏的轰鸣声中&#xff0c;一卷卷冷轧钢卷正经历着神奇的蜕变。经过开卷、矫平、剪切等工序&#xff0c;原本蜷曲的金属板材变得平整如镜&#xff0c;这些改变都源于生产线上一个关键设备——矫平机。这台被称作"板材整形师"的精密机械&#xff0…...

数据江湖:Node.js 与 SQLite3 的轻量之道

前言 在这个“万码奔腾”的时代,想在江湖中闯出一片天地,不光要有剑(JavaScript),还得有招式(数据库)!本篇秘籍便是教你如何用 Node.js + SQLite3 打造一座小而美的“数据藏经阁”。初学者可轻松上手,高手可在细节中悟出更深的“数据库心法”。 简介 SQLite 在前端…...

4.15BUUCTF Ez_bypass,HardSQL,AreUSerialz,BabyUpload,CheckIn

[MRCTF2020]Ez_bypass 打开环境&#xff0c;看源码 include flag.php; $flagMRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}; if(isset($_GET[gg])&&isset($_GET[id])) {$id$_GET[id];$gg$_GET[gg];if (md5($id) md5($gg) && $id ! $gg) {echo You got the first step;i…...

【HarmonyOS NEXT+AI】问答 03:找不到 DevEco Studio Cangjie Plugin 下载链接?

【HarmonyOS NEXTAI】问答 03&#xff1a;找不到 DevEco Studio Cangjie Plugin 下载链接&#xff1f; 在 "HarmonyOS NEXTAI 大模型打造智能助手 APP (仓颉版)" 课程里面&#xff0c;有学员提到了这样一个问题&#xff1a;我在华为开发者社区官网找不到 DevEco Stu…...

使用 reverse-sourcemap 工具反编译 Vue 项目

要使用 reverse-sourcemap 工具反编译 Vue 项目&#xff0c;可以按照以下步骤操作&#xff1a; 步骤一&#xff1a;安装 reverse-sourcemap 首先&#xff0c;需要全局安装 reverse-sourcemap 工具。在命令行中执行以下命令&#xff1a; npm install --global reverse-sourcem…...

通信安全员历年考试重难点有哪些?

通信安全员考试的重难点紧密围绕行业特性和法规更新展开&#xff0c;需结合最新政策与实践案例综合掌握。以下是基于历年考试趋势及 2025 年新规的深度解析&#xff1a; 一、核心法规与标准体系&#xff08;占比 30%-40%&#xff09; 1. 安全生产法与行业规定 《安全生产法》…...

C++(OpenCV)实现MATLAB的edge(I, “sobel“)边缘检测

文章目录 方案分析具体代码实现关键步骤说明注意事项 为了实现类似于MATLAB的edge(I, "sobel")函数的C代码&#xff0c;我们需要复现其完整的边缘检测流程&#xff0c;包括梯度计算、非极大值抑制和阈值处理。以下是具体的方案及代码实现&#xff1a; 方案分析 图像…...

uniapp通过uni.addInterceptor实现路由拦截

注&#xff1a;此拦截不能首次拦截路由跳转的方法&#xff08;switchTab, navigateTo, reLaunch, redirectTo&#xff09;&#xff0c;拦截request请求api可以 1. app.vue 代码 import { onLaunch} from dcloudio/uni-appimport permission from ./utils/permissiononLaunch(…...

vue2.x Echart label根据数据长度选择不同的间隔显示

折线图需要在各个点上方展示数据&#xff0c;但是数据数字的位数可能达到5~8位&#xff0c;需要根据密度进行间隔展示。例如&#xff0c;如果数据长度小于7&#xff0c;则每一项都展示&#xff0c;如果在7~10之间&#xff0c;2位展示一项&#xff0c;如果大于10&#xff0c;那么…...

Wifi密码查看软件V1.0

⭐本软件用于查看电脑连接过所有WiFi密码&#xff0c;不具备破解功能。 可在忘记WiFi密码或他人输入密码自己不知道的情况下使用。 ⭐⭐为便于快速分享&#xff0c;加入双击【密码】列可将WIFI密码复制在粘贴板。 ⭐⭐⭐双击【名称】列可生成用于手机连接的二维码进行显示&…...

Hyperf (Swoole)的多进程 + 单线程协程、Gin (Go)Go的单进程 + 多 goroutine 解说

1. 核心概念解析 (1) Hyperf (Swoole): 多进程 单线程协程 Swoole 并发模型详解 Swoole 的并发模型基于多进程架构&#xff0c;每个进程是单线程的&#xff0c;线程内运行多个协程。以下是其结构的关键点&#xff1a; 多进程&#xff1a;Swoole 应用程序启动时&#xff0c;…...

国内网络设备厂商名单(List of Domestic Network Equipment Manufacturers)

国内网络设备厂商名单 运维工程师必须广泛熟悉国内外各大厂商的设备&#xff0c;深入掌握其应用场景、功能特点及优势。这不仅有助于在故障排查时迅速定位问题&#xff0c;还能在系统设计、优化与升级中做出更合理的决策。对设备特性的精准把握&#xff0c;能够显著提升运维效…...

基础元器件-电感(2025.4.17)

1.电感是电磁感应器件&#xff0c;它是储能元器件。 2.电感表示形式&#xff08;直标法和色标法&#xff09; 3.电感读取基准是mH&#xff0c;3R3指的是3.3mH&#xff0c;R代表小数点。 4.电感特性&#xff1a;通直流阻交流 5.电感的分类 注&#xff1a;用电容或者电感滤波是…...

高通手机抓取sniffer log的方法

方法如下&#xff1a; adb root adb remount adb shell echo 4 >/sys/module/wlan/parameters/con_mode //不同的高通基线这块目录存在差异性 ifconfig wlan0 up iwpriv wlan0 setMonChan 149 2 //设置信道和bandwitdh tcpdump -i wlan0 -v -w /data/chan149.pcap 生成…...

React 设计艺术:如何精确拆分组件接口,实现接口隔离原则

接口隔离原则 接口隔离原则&#xff08;Interface Segregation Principle&#xff0c;简称 ISP&#xff09;也是面向对象设计中的重要原则之一。它的核心思想是&#xff0c;一个类不应该依赖它不需要的接口。在 React 开发中&#xff0c;遵循接口隔离原则可以提高代码的可维护性…...

BFS DFS ----习题

题目1 答案1 #include <bits/stdc.h>using namespace std;const int N 210; int n,k; int arr[N]; int res 0;void dfs(int x,int start,int nowsum) {if (nowsum > n) return ;if(x>k){if(nowsum n) res;return ;}for(int i start;nowsumi*(k-x1)<n;i){a…...

第十七届“华中杯”大学生数学建模挑战赛题目A题 晶硅片产销策略优化 完整成品 代码 模型 思路 分享

近年来&#xff0c;高纯度晶硅片需求的增长引发了更激烈的市场竞争。晶硅片企业需要在成本控制、利润优化和供需管理之间取得平衡&#xff0c;以提高经营效率和市场竞争力。晶硅片的生产是一个高能耗、高成本的过程&#xff0c;企业效益会受到原材料价格波动、市场需求变化以及…...

java 设计模式之单例模式

简介 单例模式&#xff1a;一个类有且仅有一个实例&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有一个对象被创建。 特点&#xff1a;类构造器私有、持有自己实例、对外提供获取实例的静态方法。 单例模式的实现方式 饿汉式 类被加载时&#xff0c;就会实例…...

新能源汽车能量流测试的传感器融合技术应用指南

第一部分&#xff1a;核心原理模块化拆解 模块1&#xff1a;多源传感器物理层融合 关键技术&#xff1a; 高精度同步采集架构 采用PXIe-8840控制器同步定时模块&#xff08;NI PXIe-6674T&#xff09;&#xff0c;实现CAN/LIN/模拟量信号的μs级同步光纤电压传感器&#xff0…...

高级java每日一道面试题-2025年4月11日-微服务篇[Nacos篇]-Nacos使用的数据库及其数据同步机制是什么?

如果有遗漏,评论区告诉我进行补充 面试官: Nacos使用的数据库及其数据同步机制是什么&#xff1f; 我回答: Nacos 使用的数据库及其数据同步机制详解 在微服务架构中&#xff0c;Nacos 作为服务注册与配置管理的核心组件&#xff0c;其数据存储和同步机制对系统的高可用性和…...

音视频相关协议和技术内容

视频编解码&#xff1a; H264&#xff08;AVC,MPEG-4 Part 10&#xff09; 高压缩率&#xff0c;支持多种分辨率和帧率&#xff0c;用于在线流媒体、会议、数字电视 编码过程&#xff1a; 分块处理&#xff0c;将视频帧划分为宏块&#xff08;16x16&#xff09;使用帧预测和…...

SpringBoot整合Rabbitmq(包括docker配置Rabbitmq的详细过程)

一、什么是mq MQ(message queue)&#xff0c;从字面意思上看就个 FIFO 先入先出的队列&#xff0c;只不过队列中存放的内容是 message 而已&#xff0c;它是一种具有接收数据、存储数据、发送数据等功能的技术服务。 在互联网架构中&#xff0c;MQ 是一种非常常见的上下游“逻…...