OceanBase企业版集群部署:oatcli命令行方式
OceanBase企业版集群部署:oatcli命令行方式
- 安装包准备
- 服务器准备
- 最低资源配置
- 是否部署ODP组件?
- 仲裁服务器
- 服务器配置
- 操作系统
- 内核参数
- BIOS设置
- 磁盘挂载
- 网卡设置
- 安装OAT部署工具
- 初始化OBServer服务器
- 使用oatcli部署三副本集群
- 安装OceanBase软件
- 初始化OceanBase集群
- 卸载与环境清理
本文介绍了如何通过oatcli命令行方式部署OceanBase企业版集群环境。
数据库版本:OceanBase V4.2.5
OceanBase企业版集群支持图形化部署和命令行部署:
- 图形化部署:需要使用OAT工具部署OCP平台,再通过OCP平台部署数据库。
- 命令行部署:使用oatcli工具部署数据库。
oatcli是管理OceanBase管理者工具(OceanBase Admin Toolkit,简称:OAT)资源的命令行工具。
安装包准备
OceanBase企业版部署需要的软件安装包如下(适用于单机版和多节点集群):
| 组件 | 安装包名称 | 说明 |
|---|---|---|
| oat-all-in-one安装包 | X86_64平台:oat-all-in-one-x86-411.tar | 用于安装OAT |
| OCP和MetaDB的docker镜像 | X86_64平台:ocpxxx.tar.gz、meta_xxxxxx_xxxxxx_x86_xxxxxxxx.tgz | 用于部署OCP、OCP MetaDB、MonitorDB |
| OceanBase RPM包 | X86_64平台:oceanbase-x.x.x.x-xxxxxxxxxxxxxxxxxx.el7.x86_64.rpm | 用于部署OceanBase集群 |
| ODP RPM包(非必须) | X86_64平台:obproxy-x.x.x.x-xxxxxxxxxxxxxx.el7.x86_64.rpm | 用于部署OBProxy代理服务 |
服务器准备
最低资源配置
OceanBase部署服务器应满足的最低配置如下(适用于单机版和多节点集群):
| 组件 | 服务器数量 | 最低配置 | 推荐磁盘类型 |
|---|---|---|---|
| OAT | 1台(可复用OCP服务器) | 2U4G | N/A |
| OCP和MetaDB(图形化部署) | 1台 | 16U32G | 1.5TB、万兆网卡、SSD存储 |
| OceanBase集群 | 单机部署1台(非单机部署3台) | 4U16G。OBServer服务器内存设置建议不超过1T;OBServer 服务器CPU数量建议不超过512核。 | 磁盘中日志盘需要内存的3倍以上;SSD存储 |
| ODP(非必须) | 3台(可复用OBServer节点) | 4U8G | 200G |
注:如果是通过命令行部署(oatcli或obd工具),可以不安装OCP和MetaDB组件。
是否部署ODP组件?
OceanBase数据库代理ODP(OceanBase Database Proxy,又称OBProxy)是OceanBase数据库专用的代理服务器,OceanBase数据库用户的数据会以多副本的形式存放在各个 OBServer节点上,ODP接收用户发出的SQL请求,并将SQL请求转发至最佳目标OBServer节点,最后将执行结果返回给用户。
在部署OceanBase集群后,是否需要部署ODP主要取决于应用场景和需求:
- 如果应用需要对OceanBase集群进行高可用、负载均衡或连接池管理等操作,那么可以考虑部署ODP。ODP可以有效地解决OceanBase集群的连接数和负载均衡等问题,提高应用程序的稳定性和可靠性。
- 如果应用只是简单地连接到OceanBase集群进行查询和操作,而不需要进行高可用、负载均衡或连接池管理等操作,那么可以不部署ODP,直接使用OceanBase提供的客户端库连接到集群,也可以满足应用的需求。
仲裁服务器
如果要使用三台服务器部署两副本的OceanBase集群和仲裁服务,仲裁服务器应满足的最小配置如下:
| 组件 | 最小规格 | 带宽 | 磁盘 |
|---|---|---|---|
| 仲裁服务器(V4.1.0 BP1及以后版本) | 2U4G | 要求输入和输出的数据传输速率都至少为20 Mbps | Clog盘需要至少5GB的磁盘空间。存放日志文件的log目录需要单独预留空间 |
⚠️注:三副本无需部署仲裁服务器。
服务器配置
操作系统
OceanBase数据库支持的主流操作系统及版本信息如下:
| 操作系统 | 版本 | 架构 |
|---|---|---|
| KylinOS | V10 | x86_64(包括海光),ARM_64(鲲鹏、飞腾) |
| CentOS / Red Hat Enterprise Linux | 7.x、8.x | x86_64(包括海光),ARM_64(鲲鹏、飞腾) |
| Debian | 8.3 及以上 | x86_64(包括海光) |
| openEuler | 20.03 LTS SP1/SP2 和 22.10 LTS | x86_64(包括海光),ARM_64(鲲鹏、飞腾) |
更多支持的操作系统及其版本请参考官方文档。、
⭐️ 需要进行一些特殊的操作系统配置如下:
- 在Intel x86架构的环境中:建议修改配置文件
/etc/sysctl.conf,添加配置vm.swappiness = 0。 - 在AMD或者ARM架构的环境中,建议开启Numa。
- 在ARM和海光架构的环境中,建议修改配置文件
/etc/sysctl.conf,添加以下配置:
kernel.numa_balancing = 0
vm.zone_reclaim_mode = 0
vm.swappiness = 0
内核参数
OceanBase服务器推荐的内核参数配置如下:
| 内核参数 | 推荐值 | 说明 |
|---|---|---|
| vm.max_map_count | 655360 | 用于设置一个进程可拥有的最大内存映射区域数量 |
| vm.min_free_kbytes | 2097152 | 用于设置系统保留的最小空闲内存量,以防止内存碎片化。如果服务器物理内存小于等于8GB时,建议保持默认值,无需修改 |
| vm.overcommit_memory | 0 | 用于控制内存过量提交机制,指定当内存不足时是否允许过量提交内存 |
| ulimit.open files | hard/soft nofile 655300 | 用于设置用户可同时打开的最大文件描述符数 |
| ulimit.max_user_processes | hard/soft nproc 655300 | 用于设置用户可以创建的最大进程数 |
| ulimit.core file size | hard/soft core unlimited | 用于设置核心转储文件(core dump)的最大大小 |
| ulimit.stack | hard/soft stack unlimited | 用于设置系统的栈大小的参数 |
| current_clocksource | tsc | 用于显示当前系统使用的时钟源 |
BIOS设置
BIOS需要关闭以下配置:
- Cstate
- Pstate
- EIST
- Power saving
- SMMU(ARM架构)
BIOS需要开启以下配置:
- Automatic Power on After Power Loss: Always on
- Intel Virtualization Technology
- Hyper-threading
- Hardware prefetcher
- VT-d
- SR-IOV
- Turbo Mode
- Energy performance:开启最大performance
磁盘挂载
OCP节点的磁盘挂载要求如下:
| 挂载点 | 容量 | 格式 | 说明 |
|---|---|---|---|
| /home | 100 GB~300 GB | 建议 ext4 或 xfs | 各组件运行日志盘 |
| /data/log1 | 内存大小的 3~4 倍 | 建议 ext4 或 xfs | OCP元数据库日志盘 |
| /data/1 | 取决于所需存储的数据大小 | 建议 ext4 或 xfs | OCP元数据库数据盘 |
| /docker | 200 GB~500 GB | 建议 ext4 或 xfs | Docker根目录 |
⚠️ 注:如果是通过命令行部署(oatcli或obd工具),可以不安装OCP和MetaDB组件。
OBServer节点的磁盘挂载要求如下:
| 挂载点 | 容量 | 格式 | 说明 |
|---|---|---|---|
| /home | 100 GB~300 GB | 建议 ext4 或 xfs | observer安装和运行日志盘 |
| /data/log1 | 内存大小的 3~4 倍 | 建议 ext4 或 xfs | observer事务日志盘 |
| /data/1 | 取决于所需存储的数据大小 | 建议 ext4 或 xfs | observer数据盘 |
网卡设置
建议配置2块万兆网卡:
- bond模式取名
bond0,绑定的模式可以选择mode1或mode4,但建议选择mode4。对于mode4模式,交换机需要配置802.3ad协议。 - 网卡名建议使用
eth0、eth1。
安装OAT部署工具
部署OAT前请检查以下条件是否已满足:
- OAT的默认端口7000未被占用。
- 拥有服务器的root用户权限。
- 已经安装并启动Docker。推荐Docker版本为社区版17.03及以上。如果使用
oat-all-in-one安装包部署OAT,将自动安装Docker环境,无需再单独安装。
- 解压
oat-all-in-one安装包。
tar -xf oat-all-in-one-x86-411.tar
- 以root身份运行安装脚本
install.sh。
sh oat-all-in-one-x86/install.sh
安装过程中需要根据提示依次确认以下信息:
- 请指定Docker的根目录,默认值
/docker,可自定义。 - 请指定OAT数据目录的路径,默认值
/oat_data,可自定义,例如/oceanbase/oat_data。 - 请指定OAT HTTP监听端口,默认值
7000,可自定义。 - 请指定OAT数据库端口,默认值
3306,可自定义。 - 请输入OAT管理员账户密码(设置初始登录密码),可自定义。默认账号和初始密码为
admin/aaAA11__。 - 根据返回的URL访问OAT,验证OAT服务的可用性。
安装完成后,在浏览器中输入OAT的访问地址,验证是否部署成功。
http://oat_server_ip:7000
其中oat_server_ip为部署OAT的服务器的IP地址。
初始化OBServer服务器
使用oatcli初始化OBServer服务器前请检查以下条件是否已满足:
- 已安装OAT工具。
- 拥有OAT服务器的root用户权限。
- 在OAT服务器上,以root身份进入到OAT容器。
sudo docker exec -it oat bash
- 查看oatcli命令的使用方法。
oatcli --help
- 设置OAT API地址、用户名和密码来调用OAT API。
oatcli config set -sxx.xx.xx.xx:7000 -uadmin -p******
-s:api server地址,例如127.0.0.1:7000。-u:用户名。-p:密码。
- 创建机房信息。
# oatcli create idc <NAME> <REGION>
oatcli create idc bj1 beijing
NAME:机房名称。REGION:机房所属的地域。
- 为服务器连接创建SSH凭证。
# oatcli create credential [OPTIONS] NAME AUTH_TYPE:{password|pubkey|external}
oatcli create credential -uroot -p****** root_148 password
NAME:凭证标识名称。示例中凭证名为root_148。AUTH_TYPE:授权类型。password对应密码认证,pubkey对应公钥认证,external表示已配置免密。-u:用户名。默认为root。-p:密码。-k:SSH私钥文件。
- 添加并初始化OBServer服务器。
# oatcli create server [OPTIONS] IPs... INIT_TAG:{observer|obproduct|both}
oatcli create server -ibj1:beijing -croot_148 xx.xx.xx.xx observer
-i:机房名:地域,必须已存在。-c:凭证名,必须已存在。--add-only:仅添加服务器,不执行操作系统配置操作。默认为--no-add-only,即执行操作系统配置操作。--ssh-port:SSH端口,默认为22。非必需。--docker-root-dir:默认为/docker。非必需。--admin-uid-gid:默认为500:500。非必需。--admin-password:admin密码。非必需。IPs:OBServer服务器IP。INIT_TAG:服务器用途。observer为数据库节点,obproduct表示安装OceanBase产品服务,both表示安装OBServer和OceanBase产品服务。
- 查看服务器是否添加完成。
# oatcli describe server [OPTIONS] OBServer_IP
oatcli describe server xx.xx.xx.xx
- 在OAT中获取资源信息。
# oatcli get [OPTIONS] COMMAND [ARGS]...
oatcli get server
component:获取组件信息。credential:获取凭证信息。idc:获取机房信息。image:获取镜像信息。product:获取产品信息。Server:获取服务器信息。
使用oatcli部署三副本集群
在部署OceanBase集群前请检查已经使用oatcli初始化OBServer服务器。
安装OceanBase软件
- 安装OceanBase数据库RPM包。
rpm -ivh oceanbase-4.2.0.0-100000052023073123.el7.x86_64.rpm
OceanBase数据库软件会默认安装在目录/home/admin/oceanbase下。
- 安装OceanBase客户端(非必需)。
rpm -ivh obclient-2.2.1-20221122151945.el7.alios7.x86_64.rpm
如果只连接OceanBase数据库的MySQL租户,也可以通过MySQL客户端(mysql)连接OceanBase数据库。
初始化OceanBase集群
- 清理OceanBase目录(第一次部署不用)。
su - admin
kill -9 `pidof observer`
rm -rf /data/1/$cluster_name
rm -rf /data/log1/$cluster_name
rm -rf /home/admin/oceanbase/store/$cluster_name /home/admin/oceanbase/log/* /home/admin/oceanbase/etc/*config*
ps -ef|grep observer
其中$cluster_name为集群名。
- 初始化OceanBase目录。
OceanBase的数据目录通常建议在独立的磁盘上,然后通过软链接方式链接到软件Home目录下面。其中$cluster_name为集群名。
su - admin
mkdir -p /data/1/$cluster_name/{etc3,sstable,slog}
mkdir -p /data/log1/$cluster_name/{clog,etc2}
mkdir -p /home/admin/oceanbase/store/$cluster_name
for t in {etc3,sstable,slog};do ln -s /data/1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
for t in {clog,etc2};do ln -s /data/log1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
- 启动节点observer进程。
在每个节点的admin用户下,启动observer进程。
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer {-I $ip | -i $devname} -P $rpc_port -p $sql_port \
-z $zone_name -d /home/admin/oceanbase/store/$cluster_name -r '$ip:2882:2881' -c $cluster_id -n $cluster_name \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/$cluster_name/etc3;/data/log1/$cluster_name/etc2"
三副本下,每个节点启动参数并不完全相同。启动observer时只需指定RootService所在的3台(或者多台)机器,不需要在创建集群时指定所有机器;集群创建完成后可以添加新的机器。
启动参数含义:
-I:指定待启动的节点IP。-p:指定服务端口号,一般指定为2881。-P:指定RPC端口号,一般指定为2882。-n:指定集群名称。不同集群不要重复即可。-z:指定启动的observer进程所属的Zone。-d:指定集群主目录,初始化目录时创建的目录。除集群名字$cluster_name外,其他的不要修改。-c:指定集群ID。不同集群不要重复即可。-l:指定日志级别。-r:指定RS列表,格式是$ip:2882:2881,分号分割,表示Root Service信息。-o:指定集群启动参数(配置项)列表,为可选项。其中config_additional_dir用于设置本地存储配置文件的多个目录,为了冗余存储多份配置文件。
假设我们要创建一个三节点的OB集群,集群名为obdemo。
zone1节点启动observer进程:
su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 10.10.10.1 -P 2882 -p 2881 \
-z zone1 -d /home/admin/oceanbase/store/obdemo -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -c 10001 -n obdemo \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"
zone2节点启动observer进程:
su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 10.10.10.2 -P 2882 -p 2881 \
-z zone2 -d /home/admin/oceanbase/store/obdemo -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -c 10001 -n obdemo \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"
zone3节点启动observer进程:
su - admin
cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -I 10.10.10.3 -P 2882 -p 2881 \
-z zone3 -d /home/admin/oceanbase/store/obdemo -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -c 10001 -n obdemo \
-o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"
可以通过下面命令查看observer进程是否启动成功:
netstat -ntlp命令,如果监听到了2881与2882端口,则说明进程启动成功。ps -ef | grep observer命令可以返回observer进程信息。
- 集群bootstrap操作。
通过OBClient命令连接任意一台节点,密码为空。
obclient -h127.0.0.1 -uroot -P2881 -p******obclient> SET SESSION ob_query_timeout=1000000000;
Query OK, 0 rows affectedobclient> ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '10.10.10.1:2882',ZONE 'zone2' SERVER '10.10.10.2:2882',ZONE 'zone3' SERVER '10.10.10.3:2882';
Query OK, 0 rows affected
⚠️ 如果这一步失败报错了,其原因很可能就是observer进程启动参数有不对、observer相关目录权限不对、日志目录空间不足一定比例(跟数据目录合用了大目录,空间被数据目录占用了)、节点时间不同步、节点内存资源不足等。请先排查这些问题点后,然后清理OceanBase目录从头开始部署。
- 验证集群初始化成功。
在完成集群的bootstrap初始化操作后,通过执行SHOW DATABASES;命令进行验证,若查询结果显示数据库列表中存在oceanbase数据库,即可确认集群初始化成功。
- 修改密码。
sys租户的root用户密码默认为空,初始化成功后请修改密码。
ALTER USER root IDENTIFIED BY '******';
卸载与环境清理
- 停止和卸载服务
停止和卸载所有OBServer节点中的服务。
ps -ef|grep observer
kill -9 `pidof observer`rpm -qa|grep oceanbase
sudo rpm -e $rpm_name
rpm -ql $rpm_name
其中,$rpm_name是要卸载的软件包的名称。
- 数据库文件清理
删除旧的数据库文件,包括数据文件、日志文件和其他临时文件。
sudo rm -rf /home/admin/oceanbase/*
sudo rm -rf /data/log1/*
sudo rm -rf /data/1/*
以上清理方式适用于oatcli命令行部署的OceanBase集群,但不适用于使用obd部署的集群。
相关文章:
OceanBase企业版集群部署:oatcli命令行方式
OceanBase企业版集群部署:oatcli命令行方式 安装包准备服务器准备最低资源配置是否部署ODP组件?仲裁服务器 服务器配置操作系统内核参数BIOS设置磁盘挂载网卡设置 安装OAT部署工具初始化OBServer服务器使用oatcli部署三副本集群安装OceanBase软件初始化O…...
SQL 查询中涉及的表及其作用说明
SQL 查询中涉及的表及其作用说明: 涉及的数据库表 表名别名/用途关联关系dbo.s_orderSO(主表)存储订单主信息(订单号、日期、客户等)dbo.s_orderdetailSoD(订单明细)通过 billid SO.billid 关…...
智能手机功耗测试
随着智能手机发展,用户体验对手机的续航功耗要求越来越高。需要对手机进行功耗测试及分解优化,将手机的性能与功耗平衡。低功耗技术推动了手机的用户体验。手机功耗测试可以采用powermonitor或者NI仪表在功耗版上进行测试与优化。作为一个多功能的智能终端,手机的功耗组成极…...
UNIX域套接字(Unix Domain Sockets, UDS) 的两种接口
目录 1. 流式套接字(SOCK_STREAM)特点类比典型使用场景代码示例(伪代码) 2. 数据报套接字(SOCK_DGRAM)特点类比典型使用场景代码示例(伪代码) 3. 两者的核心区别对比4. 为什么 UNIX …...
使用U盘安装 ubuntu 系统
1. 准备U 盘制作镜像 1.1 下载 ubuntu iso https://ubuntu.com/download/ 这里有多个版本以供下载,本文选择桌面版。 1.2 下载rufus https://rufus.ie/downloads/ 1.3 以管理员身份运行 rufus 设备选择你用来制作启动项的U盘,不能选错了;点…...
安全厂商安全理念分析
奇安信(toB企业安全) 安全理念:率先提出 “内生安全” 理念。即把安全能力内置到信息化环境中,通过信息化系统和安全系统的聚合、业务数据和安全数据的聚合、IT 人才和安全人才的聚合,让安全系统像人的免疫系统一样&a…...
Redis如何判断哨兵模式下节点之间数据是否一致
在哨兵模式下判断两个Redis节点的数据一致性,可以通过以下几种方法实现: 一、检查主从复制偏移量 使用INFO replication命令 分别在主节点和从节点执行该命令,比较两者的master_repl_offset(主节点)和slave_repl_offs…...
HarmonyOS-ArkUI V2装饰器: @Provider和@Consumer装饰器:跨组件层级双向同步
作用 我们在之前学习的那些控件中,各有特点,也各有缺陷,至今没有痛痛快快的出现过真正能跨组件的双向绑定的装饰器。 比如 @Local装饰器,不能跨组件@Param装饰器呢,能跨组件传递,但是仅仅就是下一层组件接收参数。另外,它是单向传递,不可被重新赋值。如果您非要改值则…...
oracle 并行度(Parallel Degree)
在Oracle数据库中,并行度(Parallel Degree) 是用于控制并行处理任务的关键配置,旨在通过多进程协作加速大规模数据处 一、并行度的核心概念 并行度(DOP, Degree of Parallelism) 表示一个操作同时使用的并…...
Redis-场景缓存+秒杀+管道+消息队列
缓存一致性 1.两次更新 先更新数据库,再更新缓存;先更新缓存,再更新数据库; 出现不一致问题场景: 先更新数据库,再更新缓存; 先更新缓存,再更新数据库; 两次更新的适…...
系统的安全及应用
仓库做了哪些优化 仓库源换成国内源不使用root用户登录将不必要的开机启动项关闭内核的调优 系统做了哪些安全加固 禁止使用root禁止使用弱命令将常见的 远程连接端口换掉 系统安全及应用 Cpu负载高 java程序 运行异常中病毒? ps aux - - sort %cpu %mem Cpu …...
PostgreSQL内幕探索—基础知识
PostgreSQL内幕探索—基础知识 PostgreSQL(以下简称PG) 起源于 1986 年加州大学伯克利分校的 POSTGRES 项目,最初以对象关系模型为核心,支持高级数据类型和复杂查询功能。 1996 年更名为 PostgreSQL 并开源,逐…...
基于redis 实现我的收藏功能优化详细设计方案
基于redis 实现我的收藏功能优化详细设计方案 一、架构设计 +---------------------+ +---------------------+ | 客户端请求 | | 数据存储层 | | (收藏列表查询) | | (Redis Cluster) | +-------------------…...
WPS复制粘贴错误 ,文件未找到 mathpage.wll
文章目录 1.错误提示图片2.解决方案1.找到MathType.wll文件和MathType Commands 2016.dotm文件并复制2.找到wps安装地址并拷贝上述两个文件到指定目录 3.重启WPS 1.错误提示图片 2.解决方案 1.找到MathType.wll文件和MathType Commands 2016.dotm文件并复制 MathType.wll地址如…...
驱动开发硬核特训 · Day 6 : 深入解析设备模型的数据流与匹配机制 —— 以 i.MX8M 与树莓派为例的实战对比
🔍 B站相应的视屏教程: 📌 内核:博文视频 - 从静态绑定驱动模型到现代设备模型 主题:深入解析设备模型的数据流与匹配机制 —— 以 i.MX8M 与树莓派为例的实战对比 在上一节中,我们从驱动框架的历史演进出…...
【UE5 C++课程系列笔记】35——HTTP基础——HTTP客户端异步请求API接口并解析响应的JSON
目录 前言 步骤 一、 搭建异步蓝图节点框架 二、异步蓝图节点嵌入到引擎的执行流程 三、获取本地时间并异步返回 四、获取网络时间并异步返回 五、源码 前言 本文以请求网络/本地时间API为例,介绍如何实现HTTP异步请求。 步骤 一、 搭建异步蓝图节点框架 …...
手机静态ip地址怎么获取?方法与解析
而在某些特定情境下,我们可能需要为手机设置一个静态IP地址。本文将详细介绍手机静态IP地址详解及获取方法 一、什么是静态IP地址? 静态IP:由用户手动设置的固定IP地址,不会因网络重启或设备重连而改变。 动态IP:由路…...
个人博客系统后端 - 注册登录功能实现指南
一、功能概述 个人博客系统的注册登录功能包括: 用户注册:新用户可以通过提供用户名、密码、邮箱等信息创建账号用户登录:已注册用户可以通过用户名和密码进行身份验证,获取JWT令牌身份验证:使用JWT令牌访问需要认证…...
Python 基础语法汇总
Python 语法 │ ├── 基本结构 │ ├── 语句(Statements) │ │ ├── 表达式语句(如赋值、算术运算) │ │ ├── 控制流语句(if, for, while) │ │ ├── 定义语句(def…...
Linux上位机开发实践(OpenCV算法硬件加速)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 图像处理里面,opencv基本是一个标准模块。但是由于图像处理的特点,如果所有的算法都是cpu来做的话,效率会很低。…...
Spring Boot MongoDB自定义连接池配置
手打不易,如果转摘,请注明出处! 注明原文:http://zhangxiaofan.blog.csdn.net/article/details/144341407 一、引言 在 Spring Boot 应用中使用 MongoDB 时,合理配置连接池可以显著提升数据库访问的性能和稳定性。默…...
Redis与Mysql双写一致性如何保证?
我们在面试的时候redis与mysql双写一致性是一个常考的问题,今天我们就一起探讨一下吧 所谓的一致性就是数据的一致性,在分布式系统中,可以理解为多个节点中数据的值是一致的。 强一致性: 这种一致性级别是最符合用户直觉的&…...
C#核心学习(十六)面向对象--关联知识点(2)string和Stringbuilder
引言 在C#开发中,字符串处理是日常编码的基础需求。然而string和StringBuilder的选择常常引发困惑——何时该用不可变的string?什么场景下必须选择可变的StringBuilder?本文将深入剖析两者的核心差异,并通过完整API对比给出实用建…...
游戏引擎学习第223天
回顾 今天我们正在进行过场动画序列的制作,因此我想深入探讨这个部分。昨天,我们暂时停止了过场动画的制作,距离最终结局还有一些内容没有完成。今天的目标是继续完成这些内容。 我们已经制作了一个过场动画的系列,并把它们集中…...
趣味编程之go与rust的爱恨情仇
声明:此篇文章利用deepseek生成。 第一章:出身之谜 Go(江湖人称"高小戈")是名门之后——谷歌家的三少爷。生来就带着"简单粗暴"的家族基因,口号是**“少写代码多搬砖,并发处理赛神仙”**。它爹Ro…...
DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_基础功能示例(CalendarView01_01)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_基础功能示例(CalendarView01_01)📚…...
数据结构第五版【李春葆】
数据结构教程上机实验指导第5版(李春葆主编).pdf 数据结构教程(第5版)(李春葆).pdf 数据结构教程(第五版)课后习题参考答案(李春葆).pdf 数据结构教…...
LabVIEW配电器自动测试系统
随着航天技术的迅猛发展,航天器供配电系统的结构越来越复杂,对配电器的功能完整性、稳定性和可靠性提出了更高要求。传统人工测试方式难以满足高效率、高精度、可重复的测试需求。本项目开发了一套基于LabVIEW平台的宇航配电器自动测试系统,融…...
PhotoShop学习09
1.弯曲钢笔工具 PhotoShop提供了弯曲钢笔工具可以直观地创建路径,只需要对分段推拉就能够进行修改。弯曲港币工具位于工具面板中的钢笔工具里,它的快捷键为P。 在使用前,可以把填充和描边选为空颜色,并打开路径选项,勾…...
【C++】哈希unordered_map和set的使用以及哈希表,哈希桶的概念以及底层实现
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🌐 C 语言 本文章完整代码在下篇文章开头给出 上篇文章:map和set使用红黑树封装的底层实现 下篇文章:封装…...
