OpenTenBase简介

OpenTenBase是一个关系型数据库集群平台,提供写入可靠性和多节点数据同步功能。可以在一台或多台主机上配置OpenTenBase,并将数据存储在多个物理主机上。

OpenTenBase架构组件:
  • Coordinator Node (CN):应用程序访问入口,负责数据分布和查询计划。多个节点位于同一位置,每个节点提供相同的数据库视图
  • Datanode Node (DN):每个DN存储用户数据的分区。在功能上,DN节点负责完成CN分发的执行请求
  • GTM Node (Global Transaction Manager):负责集群事务信息的管理,以及集群的全局对象(如序列)

系统要求

硬件要求:
  • 内存:最低4GB RAM
  • 操作系统:OpenCloudOS 9
  • 服务器:腾讯云CVM实例

软件依赖:

gcc make readline-devel zlib-devel openssl-devel uuid-devel bison flex git

环境准备

1. 更新系统并安装依赖包

由于OpenCloudOS支持dnf和yum两种包管理软件,强烈推荐用户更多地使用dnf,我们使用dnf来安装依赖:

# 更新系统
sudo dnf update -y

# 安装OpenTenBase编译依赖
sudo dnf install -y \gcc \gcc-c++ \make \cmake \readline-devel \zlib-devel \openssl-devel \uuid-devel \bison \flex \git \libcurl-devel \libxml2-devel \libxslt-devel \perl-IPC-Run \perl-Test-Simple \tcl-devel \python3-devel \rpm-build \pkgconfig \krb5-devel \openldap-devel

# 下载zstd源码
cd /tmp
wget https://github.com/facebook/zstd/releases/download/v1.5.2/zstd-1.5.2.tar.gz
tar -xzf zstd-1.5.2.tar.gz
cd zstd-1.5.2# 编译安装
make
sudo make install PREFIX=/usr/local# 更新库路径
sudo ldconfig# 设置环境变量
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"

# 下载lz4源码
cd /tmp
wget https://github.com/lz4/lz4/archive/v1.9.4.tar.gz
tar -xzf v1.9.4.tar.gz
cd lz4-1.9.4# 编译安装
make
sudo make install PREFIX=/usr/local# 更新库路径
sudo ldconfig# 设置环境变量
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"

# 首先检查当前的包管理器状态
sudo dnf clean all# 安装libxml2-devel及其依赖包
sudo dnf install -y \libxml2-devel \libxml2 \cmake-filesystem \xz-devel \zlib-devel \pkgconfig# 验证安装
rpm -qa | grep libxml2
# 检查xml2-config命令是否可用
which xml2-config# 检查pkg-config是否能找到libxml-2.0
pkg-config --exists libxml-2.0 && echo "libxml2 found" || echo "libxml2 NOT found"# 查看libxml2的配置信息
xml2-config --version
xml2-config --cflags
xml2-config --libs
sudo dnf search cli11
sudo dnf install -y cli11-devel
2. 创建专用用户

所有需要安装OpenTenBase集群的机器都需要创建专用用户:

# 创建数据目录
sudo mkdir /data# 创建opentenbase用户
sudo useradd -d /data/opentenbase -s /bin/bash -m opentenbase# 设置密码
sudo passwd opentenbase

3. 切换到opentenbase用户
su - opentenbase

源码编译安装

1. 获取源码
cd /data/opentenbase
git clone https://gitee.com/mirrors/OpenTenBase.git

2. 编译源码
# 设置环境变量
export SOURCECODE_PATH=/data/opentenbase/OpenTenBase
export INSTALL_PATH=/data/opentenbase/install

# 进入源码目录
cd ${SOURCECODE_PATH}# 配置编译选项
chmod +x configure*

# 编译和安装
make distclean 2>/dev/null || true
rm -rf /data/opentenbase/install/opentenbase_bin_v2.0
rm -f config.status config.log
# 重新配置,添加SSE4.2支持
CFLAGS="-g -O2 -w -msse4.2 -mcrc32" \
CXXFLAGS="-g -O2 -w -msse4.2 -mcrc32" \
./configure --prefix=/data/opentenbase/install/opentenbase_bin_v2.0 \--enable-user-switch \--with-openssl \--with-ossp-uuid \--with-libxml# 编译
make
make install# 编译contrib模块
chmod +x contrib/pgxc_ctl/make_signature
cd contrib
make
make install

集中式单节点集群配置

1. 配置环境变量
# 编辑bashrc文件
vim ~/.bashrc# 添加以下内容:
export OPENTENBASE_HOME=/data/opentenbase/install/opentenbase_bin_v2.0
export PATH=$OPENTENBASE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:${LD_LIBRARY_PATH}
export LC_ALL=C# 生效环境变量
source ~/.bashrc

2. 创建集群配置目录
mkdir /data/opentenbase/pgxc_ctl
cd /data/opentenbase/pgxc_ctl

3. 创建集中式配置文件
cat > /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf << 'EOF'
#!/usr/bin/env bash#---- OVERALL -----------------------------------------------------------------------------
pgxcOwner=opentenbase
pgxcUser=$pgxcOwner
tmpDir=/tmp
localTmpDir=$tmpDir
configBackup=y
configBackupHost=localhost
configBackupDir=$HOME/pgxc
configBackupFile=pgxc_ctl.bak#---- GTM --------------------------------------------------------------------------------
gtmName=gtm
gtmMasterServer=localhost
gtmMasterPort=6666
gtmMasterDir=/data/opentenbase/data/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=none# GTM Slave - disabled
gtmSlave=n
gtmSlaveName=gtmSlave
gtmSlaveServer=none
gtmSlavePort=20001
gtmSlaveDir=none
gtmSlaveSpecificExtraConfig=none# GTM Proxy - disabled  
gtmProxy=n
gtmProxyNames=()
gtmProxyServers=()
gtmProxyPorts=()
gtmProxyDirs=()
gtmPxyExtraConfig=none
gtmPxySpecificExtraConfig=()#---- Coordinators --------------------------------------------------------------------
coordMasterDir=/data/opentenbase/data/coord_master
coordSlaveDir=/data/opentenbase/data/coord_slave
coordArchLogDir=/data/opentenbase/data/coord_archlog# 协调器配置数组 - 所有数组必须有相同数量的元素
coordNames=(cn001)
coordPorts=(30004)
poolerPorts=(30014)
coordForwardPorts=(30024)
coordPgHbaEntries=(0.0.0.0/0)# Master Coordinators
coordMasterServers=(localhost)  
coordMasterDirs=(/data/opentenbase/data/coord_master/cn001)
coordMaxWALsender=5
coordMaxWALSenders=(5)# Coordinator Slave - disabled
coordSlave=n
coordSlaveSync=n
coordSlaveServers=(none)
coordSlavePorts=(30005)
coordSlavePoolerPorts=(30015)
coordSlaveForwardPorts=(30025)
coordSlaveDirs=(none)
coordArchLogDirs=(none)# Configuration files
coordExtraConfig=none
coordSpecificExtraConfig=(none)
coordSpecificExtraPgHba=(none)#---- Datanodes -----------------------------------------------------------------------  
datanodeMasterDir=/data/opentenbase/data/dn_master
datanodeSlaveDir=/data/opentenbase/data/dn_slave
datanodeArchLogDir=/data/opentenbase/data/datanode_archlog# 数据节点配置数组 - 所有数组必须有相同数量的元素
primaryDatanode=dn001
datanodeNames=(dn001)
datanodePorts=(20008)
datanodePoolerPorts=(20018)
datanodeForwardPorts=(20028)
datanodePgHbaEntries=(0.0.0.0/0)# Master Datanodes
datanodeMasterServers=(localhost)
datanodeMasterDirs=(/data/opentenbase/data/dn_master/dn001)
datanodeMaxWalSender=5
datanodeMaxWALSenders=(5)# Datanode Slave - disabled
datanodeSlave=n
datanodeSlaveServers=(none)
datanodeSlavePorts=(20009)
datanodeSlavePoolerPorts=(20019)
datanodeSlaveForwardPorts=(20029)
datanodeSlaveDirs=(none)
datanodeArchLogDirs=(none)# Configuration files
datanodeExtraConfig=none  
datanodeSpecificExtraConfig=(none)
datanodeSpecificExtraPgHba=(none)# WAL Archive - disabled
walArchive=n
EOF
# 检查配置文件语法
bash -n /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf
echo "配置文件语法检查结果: $?"# 查看文件内容确认
head -20 /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf

检查环境变量

# 检查当前环境变量
echo $PATH
echo $OPENTENBASE_HOME
which initdb
which gtm_ctl

重新设置环境变量

# 退出pgxc_ctl
quit# 重新设置环境变量
export OPENTENBASE_HOME=/data/opentenbase/install/opentenbase_bin_v2.0
export PATH=$OPENTENBASE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:${LD_LIBRARY_PATH}
export LC_ALL=C# 验证命令是否可用
which initdb
which gtm_ctl
which pg_ctl

永久保存环境变量

# 编辑 .bashrc 文件
vim ~/.bashrc# 添加以下内容到文件末尾:
export OPENTENBASE_HOME=/data/opentenbase/install/opentenbase_bin_v2.0
export PATH=$OPENTENBASE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:${LD_LIBRARY_PATH}
export LC_ALL=C# 重新加载环境变量
source ~/.bashrc

重新创建完整的配置文件

# 删除不完整的配置文件
rm /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf# 重新创建完整配置文件
cat > /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf << 'EOF'
#!/usr/bin/env bash#---- OVERALL -----------------------------------------------------------------------------
pgxcOwner=opentenbase
pgxcUser=$pgxcOwner
tmpDir=/tmp
localTmpDir=$tmpDir
configBackup=y
configBackupHost=localhost
configBackupDir=$HOME/pgxc
configBackupFile=pgxc_ctl.bak#---- GTM --------------------------------------------------------------------------------
gtmName=gtm
gtmMasterServer=localhost
gtmMasterPort=6666
gtmMasterDir=/data/opentenbase/data/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=nonegtmSlave=n
gtmSlaveName=gtmSlave
gtmSlaveServer=none
gtmSlavePort=20001
gtmSlaveDir=none
gtmSlaveSpecificExtraConfig=nonegtmProxy=n
gtmProxyNames=()
gtmProxyServers=()
gtmProxyPorts=()
gtmProxyDirs=()
gtmPxyExtraConfig=none
gtmPxySpecificExtraConfig=()#---- Coordinators --------------------------------------------------------------------
coordMasterDir=/data/opentenbase/data/coord_master
coordSlaveDir=/data/opentenbase/data/coord_slave
coordArchLogDir=/data/opentenbase/data/coord_archlogcoordNames=(cn001)
coordPorts=(30004)
poolerPorts=(30014)
coordForwardPorts=(30024)
coordPgHbaEntries=(0.0.0.0/0)coordMasterServers=(localhost)
coordMasterDirs=(/data/opentenbase/data/coord_master/cn001)
coordMaxWALsender=5
coordMaxWALSenders=(5)coordSlave=n
coordSlaveSync=n
coordSlaveServers=(none)
coordSlavePorts=(30005)
coordSlavePoolerPorts=(30015)
coordSlaveForwardPorts=(30025)
coordSlaveDirs=(none)
coordArchLogDirs=(none)coordExtraConfig=none
coordSpecificExtraConfig=(none)
coordSpecificExtraPgHba=(none)#---- Datanodes -----------------------------------------------------------------------
datanodeMasterDir=/data/opentenbase/data/dn_master
datanodeSlaveDir=/data/opentenbase/data/dn_slave
datanodeArchLogDir=/data/opentenbase/data/datanode_archlogprimaryDatanode=dn001
datanodeNames=(dn001)
datanodePorts=(20008)
datanodePoolerPorts=(20018)
datanodeForwardPorts=(20028)
datanodePgHbaEntries=(0.0.0.0/0)datanodeMasterServers=(localhost)
datanodeMasterDirs=(/data/opentenbase/data/dn_master/dn001)
datanodeMaxWalSender=5
datanodeMaxWALSenders=(5)datanodeSlave=n
datanodeSlaveServers=(none)
datanodeSlavePorts=(20009)
datanodeSlavePoolerPorts=(20019)
datanodeSlaveForwardPorts=(20029)
datanodeSlaveDirs=(none)
datanodeArchLogDirs=(none)datanodeExtraConfig=none
datanodeSpecificExtraConfig=(none)
datanodeSpecificExtraPgHba=(none)walArchive=n
EOF

验证配置文件

# 检查配置文件语法
bash -n /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf
echo "语法检查结果: $?"# 查看文件完整性
wc -l /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf
tail -10 /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf

配置SSH免密登录

# 生成SSH密钥(如果还没有)
if [ ! -f ~/.ssh/id_rsa ]; thenssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
fi# 配置本地免密登录
ssh-copy-id opentenbase@localhost
# 或者手动添加
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

测试SSH连接

# 测试SSH连接是否正常
ssh opentenbase@localhost "echo 'SSH connection test successful'"

重新运行pgxc_ctl

# 现在重新运行pgxc_ctl
pgxc_ctl# 在pgxc_ctl中执行:
deploy all
init all
start all
monitor all

4. 部署和初始化集群
# 启动pgxc_ctl工具
pgxc_ctl# 在pgxc_ctl命令行中执行:
deploy all
init all
# 退出pgxc_ctl
exit# 设置opentenbase用户的SSH密钥认证
su - opentenbase# 生成SSH密钥对
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""# 将公钥添加到authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh# 测试SSH连接(应该不需要密码)
ssh opentenbase@127.0.0.1 "echo 'SSH连接测试成功'"MQgnDKIwotjP9+vkGc9jehXXIzfXSJ2+ZAnFP5IDvIc.

5. 验证集群状态
# 在pgxc_ctl中检查集群状态
monitor all

正常情况下应该显示:

Running: gtm master
Running: coordinator master cn001
Running: datanode master dn001

配置防火墙(可选)

如果启用了防火墙,需要开放相应端口:

# 开放GTM端口
sudo firewall-cmd --permanent --add-port=50001/tcp# 开放Coordinator端口
sudo firewall-cmd --permanent --add-port=30004/tcp
sudo firewall-cmd --permanent --add-port=31110/tcp# 开放Datanode端口
sudo firewall-cmd --permanent --add-port=40004/tcp
sudo firewall-cmd --permanent --add-port=41110/tcp# 重新加载防火墙规则
sudo firewall-cmd --reload

数据库初始化和使用

1. 连接数据库
psql -h localhost -p 30004 -d postgres -U opentenbase

2. 创建必要的节点组和分片组

OpenTenBase使用数据节点组来增加节点管理的灵活性。需要创建一个默认组来使用,因此需要提前创建。通常,所有数据节点都会被添加到默认组中:

-- 创建默认节点组
CREATE DEFAULT NODE GROUP default_group WITH (dn001);-- 创建分片组
CREATE SHARDING GROUP TO GROUP default_group;
3. 创建数据库和表
-- 创建测试数据库
CREATE DATABASE testdb;-- 创建用户
CREATE USER testuser WITH PASSWORD 'testpass';-- 授权
ALTER DATABASE testdb OWNER TO testuser;-- 切换到测试数据库
\c testdb testuser-- 创建分片表
CREATE TABLE test_table(id BIGINT,name TEXT,created_time TIMESTAMP DEFAULT NOW()
) DISTRIBUTE BY SHARD(id);-- 插入测试数据
INSERT INTO test_table(id, name) VALUES 
(1, 'OpenTenBase'),
(2, 'TencentCloud'),
(3, 'OpenCloudOS');-- 查询测试
SELECT * FROM test_table;

集群管理

1. 启动集群
pgxc_ctl
start all
2. 停止集群
pgxc_ctl
stop all
3. 清理集群(重新初始化时使用)
pgxc_ctl
clean all

故障排查

1. 查看日志

如果初始化失败,可以查看日志:

# 查看pgxc_ctl日志
ls ~/pgxc_ctl/pgxc_log/
cat ~/pgxc_ctl/pgxc_log/最新的日志文件# 查看各组件日志
ls /data/opentenbase/data/gtm/pg_log/
ls /data/opentenbase/data/coord/pg_log/
ls /data/opentenbase/data/dn001/pg_log/
2. 常见问题解决
  • 权限问题:确保opentenbase用户对所有数据目录有读写权限
  • 端口冲突:检查配置的端口是否被其他服务占用
  • 内存不足:调整shared_buffers等内存参数
  • 网络问题:检查防火墙和网络连接

性能优化建议

1. 内存优化

根据服务器配置调整postgresql.conf中的内存参数:

shared_buffers = 25% of RAM    # 例如8GB内存设置为2GB
effective_cache_size = 75% of RAM
work_mem = 4MB
maintenance_work_mem = 64MB
2. 连接优化
max_connections = 200          # 根据应用需求调整
max_pool_size = 1000          # 连接池大小
3. 日志优化
log_min_duration_statement = 1000  # 记录执行时间超过1秒的查询
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机视觉】Pixel逐像素分类Mask掩码分类理解摘要

目标检测和实例分割是计算机视觉的基本任务。目标检测的传统方法中通常利用边界框技术进行对象定位&#xff0c;然后利用逐像素分类为这些本地化实例分配类。但是当处理同一类的重叠对象时&#xff0c;或者在每个图像的对象数量不同的情况下&#xff0c;这些方法通常会出现问题…

C++之stack类的代码及其逻辑详解

1. stack介绍及使用方法stack是一种后进先出的数据结构&#xff0c;所以在C的STL库中也同样遵循了这一点&#xff0c;我们在使用的时候不支持随机访问或迭代器遍历。注意事项调用 top() 或 pop() 前需确保栈非空&#xff0c;否则可能引发未定义行为。stack 没有 clear() 函数&a…

Spring Cache实现简化缓存功能开发

一. 介绍Spring Cache 是 Spring 框架提供的缓存抽象层&#xff0c;它简化了在应用中添加缓存功能的开发工作。通过 Spring Cache&#xff0c;开发者无需关注具体缓存实现的细节&#xff0c;只需通过注解就能快速实现方法级别的缓存管理。核心特点1. 与具体缓存实现解耦&#x…

Lombok(简化Java当中的开发)

Lombok概述 以前的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString/构造方法;打印日志;I/O流的关闭操作等等,这些代码既没有技术含量,又影响着代码的美观,Lombok应运而生。 LomBok可以通过注解,帮助开发人员消除JAVA中尤其是POJO类中的冗长代码。 使…

【DeepSeek】公司内网部署离线deepseek+docker+ragflow本地模型实战

企业内部可能有些数据比较敏感&#xff0c;不能连接互联网。本次实验操作是将deepseek完全离线后迁移至内网使用&#xff0c;实验基于Windows server 2022 datacenter系统安装deepseek、docker、ragflow。 目录使用VMware新建WIN2022虚拟机一、安装DeepSeek模型二.安装Docker使…

【软考架构】面向服务的体系结构(SOA)深度解析

面向服务的体系结构&#xff08;SOA&#xff09;深度解析 面向服务的体系结构&#xff08;Service-Oriented Architecture, SOA&#xff09;是一种以服务为核心的软件架构范式&#xff0c;通过标准化接口实现异构系统间的高效集成与协作。以下从概念定义、发展脉络、技术演进、…

centos7中MySQL 5.7.32 到 5.7.44 升级指南:基于官方二进制包的原地替换式升级

目录前言1. 升级概述1.1 升级背景1.2 升级目的1.3 升级方法概述1.4 升级策略与注意事项2. 升级准备2.1 备份工作2.2 下载目标版本2.3 停止 MySQL 服务3. 替换二进制文件3.1 解压官方二进制包3.2 替换核心二进制文件3.3 更新共享库4. 执行升级并验证4.1 启动 MySQL 服务4.2 监控…

数学七夕花礼(MATLAB版)

前言参考的视频在抖音&#xff0c;电脑版的抖音一直登录不了&#xff0c;用手机分享的链接如下所示。4.35 Iv.FH yTl:/ 04/04 复制打开抖音&#x1f440;数学送的七夕花礼&#xff0c;记得查收噢.# 七夕花礼请查收 ... https://v.douyin.com/H-YpOJCyQyg/rho4sin(8theta)公式&a…

LeetCode - 21. 合并两个有序链表

题目 21. 合并两个有序链表 思路 我会采用双指针的方法&#xff0c;同时遍历两个链表&#xff0c;比较当前节点的值&#xff0c;将较小的节点添加到结果链表中。 具体思路是这样的&#xff1a; 首先创建一个哑节点(dummy node)作为合并后链表的头部&#xff0c;这样可以简…

ES01-环境安装

ES01-环境安装 文章目录ES01-环境安装1-参考网址2-知识总结1-参考网址 elasticsearch官网地址&#xff1a;https://www.elastic.co/安装elasticsearch9.0.0参考&#xff1a;https://zhuanlan.zhihu.com/p/1920780524991017021安装elasticsearch9.0.0参考&#xff1a;http://ww…

UI前端大数据可视化实战策略:如何设计符合用户认知的数据可视化界面?

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!UI前端大数据可视化实战策略&#xff1a;如何设计符合用户认知的数据可视化界面&#xff1f;数…

学习python第15天

其实前面学的根本不记得了&#xff0c;小丑.jpg&#xff0c;如果真的面试问到了估计也是一脸懵今日任务&#xff1a;JSON先认识一下JSON和JSONL文件记得之前在面试KIMI的时候&#xff0c;面试官就给我出了JSONL和EXCEL转换的手撕代码题&#xff0c;而那个时候&#xff0c;我连什…

Spring框架集成Kakfa的方式

Spring框架集成Kakfa的方式 springboot集成kafka的方式 添加maven依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version> </dependency&g…

【蓝桥杯 2024 省 Python B】缴纳过路费

【蓝桥杯 2024 省 Python B】缴纳过路费 蓝桥杯专栏&#xff1a;2024 省 Python B 算法竞赛&#xff1a;图论&#xff0c;生成树&#xff0c;并查集&#xff0c;组合计数&#xff0c;kruskal 最小生成树&#xff0c;乘法原理 题目链接&#xff1a;洛谷 【蓝桥杯 2024 省 Python…

个性化导航新体验:cpolar让Dashy支持语音控制

文章目录简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问用 cpolar 让 Dashy 管理个人导航站就是这么简单&#xff01;三步轻松搞定&#xff1a;在电脑上安装 Dashy&#xff0c;拖拽添加常用网站&#xff0c;运行 cpolar 生成远程访问链接。这个方法不仅免费&…

SQL学习记录

基本的&#xff0c;增、删&#xff0c;改insert into table_name (列1, 列2,...) VALUES (值1, 值2,....)Delete from 表 where keyvalueupdate 表 set keyvalue,keyvalue where keyvalue查用的最多whereSELECT prod_name, prod_price FROM Products WHERE vend idDLLO1OR ve…

零基础学C++,函数篇~

C基础学习&#xff08;DAY_06&#xff09;函数1. 函数的定义与使用2. 函数参数传递3. 变量的声明周期4. 函数的其他特性5. 函数的嵌套与递归函数 1. 函数的定义与使用 ​ 在设计程序时&#xff0c;如果一段代码重复进行某种操作或者完成一个特定的功能&#xff0c;就应该将这…

react+vite+ts 组件模板

1.创建项目npm create vitelatest my-app --template react-ts2.配置项目 tsconfig.json{"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"lib": ["ES2020", "DOM", "D…

C语言 - 输出参数详解:从简单示例到 alloc_chrdev_region

C语言中的输出参数详解&#xff1a;以 alloc_chrdev_region 为例 在学习 C 语言函数调用时&#xff0c;我们常常接触到“输入参数”&#xff0c;比如把一个数字传给函数&#xff0c;让函数帮我们算出结果。但有时候可能会发现&#xff0c;有些函数除了返回值之外&#xff0c;还…

机器视觉学习-day09-图像矫正

1 仿射变换与透视变换1.1 仿射变换之前在图像旋转实验中已经接触过仿射变换&#xff0c;仿射变换是一个二维坐标系到另一个二维坐标系的过程&#xff0c;在仿射变换中符合直线的平直性和平行性。1.2 透视变换透视变换是把一个图像投影到一个新的视平面的过程。在现实世界中&…