OceanBase企业版单机部署:obd命令行方式
OceanBase企业版单机部署:obd命令行方式
- 安装包准备
- 服务器准备
- 最低资源配置
- 是否部署ODP组件?
- 仲裁服务器
- 服务器配置
- 操作系统
- 内核参数
- BIOS设置
- 磁盘挂载
- 网卡设置
- obd部署前配置
- obd部署单机版
- 安装obd
- 配置obd
- 部署OB集群
- 部署后检查
- 环境清理与集群销毁
本文介绍了如何通过命令行方式部署OceanBase企业版单机环境。
数据库版本:OceanBase V4.2.5
OceanBase企业版单机支持图形化部署和命令行部署:
- 图形化部署:需要使用obd工具部署OCP平台,再通过OCP平台部署数据库。
- 命令行部署:直接使用obd工具部署数据库。
安装包准备
🐘 单机版 V4.2.5支持通过以下统一的安装包部署:
部署方式 | 安装包名称 |
---|---|
obd工具部署 | oceanbase-standalone-all-in-one.tar.gz |
OCP平台部署 | oceanbase-ocp-standalone-all-in-one.tar.gz |
服务器准备
最低资源配置
🐘 单机版 V4.2.5部署服务器应满足的最低配置如下:
组件 | 服务器数量 | 最低配置 | 推荐磁盘类型 |
---|---|---|---|
OceanBase集群和obd | 1台 | 4U8G | SSD存储、推荐万兆网卡 |
OCP和MetaDB(图形化部署) | 1台 | 16U32G | SSD存储、推荐万兆网卡 |
⚠️ 注:命令行部署无需安装OCP和MetaDB组件。
是否部署ODP组件?
OceanBase数据库代理ODP(OceanBase Database Proxy,又称OBProxy)是OceanBase数据库专用的代理服务器,OceanBase数据库用户的数据会以多副本的形式存放在各个 OBServer节点上,ODP接收用户发出的SQL请求,并将SQL请求转发至最佳目标OBServer节点,最后将执行结果返回给用户。
🐘 单机版 V4.2.5部署无需部署ODP组件。
仲裁服务器
🐘 单机版 V4.2.5部署无需仲裁服务器。
服务器配置
操作系统
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
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节点的磁盘挂载要求如下:
挂载点 | 容量 | 格式 | 说明 |
---|---|---|---|
/oceanbase | 100 GB~300 GB | 建议 ext4 或 xfs | observer安装和运行日志盘 |
/obredo | 内存大小的 3~4 倍 | 建议 ext4 或 xfs | observer事务日志盘 |
/obdata | 取决于所需存储的数据大小 | 建议 ext4 或 xfs | observer数据盘 |
网卡设置
建议配置2块万兆网卡:
- bond模式取名
bond0
,绑定的模式可以选择mode1
或mode4
,但建议选择mode4。对于mode4模式,交换机需要配置802.3ad
协议。 - 网卡名建议使用
eth0
、eth1
。
obd部署前配置
- 检查操作系统和资源信息。
# 操作系统版本
cat /etc/os-release
cat /etc/redhat-release
nkvers# 内核版本为 3.10.0 及以上
uname -r # 内存
free -g# 磁盘
df -Th# 网卡
ifconfig
- 配置时钟源。
通过OCP部署单机版、或者部署多节点集群,需要配置时钟源。
如果通过命令行方式部署单机版,则可以跳过时钟源配置。
- 配置内核参数。
在所有节点的/etc/sysctl.conf
配置文件中添加以下内容:
# for oceanbase
## 修改内核异步 I/O 限制
fs.aio-max-nr = 1048576## 网络优化
net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_slow_start_after_idle=0vm.swappiness = 0
vm.min_free_kbytes = 2097152
vm.overcommit_memory = 0fs.file-max = 6573688
fs.pipe-user-pages-soft = 0# 修改进程可以拥有的虚拟内存区域数量
vm.max_map_count = 655360# 此处为 OceanBase 数据库的 data 目录
kernel.core_pattern = /obdata/core-%e-%p-%t
最后通过sysctl -p
命令使得配置修改生效。
- 配置用户资源限制。
在所有节点的/etc/security/limits.conf
配置文件中添加以下内容:
root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft stack unlimited
* hard stack unlimited
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited
检查/etc/security/limits.d/20-nproc.conf
文件中是否存在nproc的配置,若存在需同步修改该文件中nproc的值。
- 关闭防火墙和SELinux。
关闭防火墙:
systemctl disable firewalld
systemctl stop firewalld
systemctl status firewalld
关闭SELinux:
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
sestatus
- 磁盘规划。
OceanBase数据库的服务器依赖数据盘、事务日志盘和OceanBase数据库的安装盘。建议将数据分别挂载至三块磁盘。
- OceanBase数据库安装盘的路径由配置参数
home_path
指定。 - OceanBase数据库的运行日志位于
${home_path}/log
下。运行日志会不断增长,并且OceanBase数据库无法自动删除运行日志,因此需要定时删除运行日志。 - 事务日志盘的路径由配置参数
redo_dir
指定。建议将事务日志盘的大小设置为OceanBase数据库内存的3倍到4倍及以上。 - 数据盘用来存储基线数据,路径由配置参数
data_dir
指定。在首次启动OceanBase集群时,将自动创建${data_dir}/{sstable,slog}
。
示例(在obd部署时通过yaml文件配置):
home_path: /oceanbase
redo_dir: /obredo
data_dir: /obdata
- 创建部署用户。
推荐使用obadmin用户部署OceanBase数据库。
创建obadmin用户:
groupadd obadmin
useradd -U obadmin -d /home/obadmin -s /bin/bash
chown -R obadmin:obadmin /home/obadmin
passwd obadmin
为obadmin用户添加sudo权限:
echo 'obadmin ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
授予obadmin用户对数据库相关目录的权限:
chown -R obadmin:obadmin /oceanbase
chown -R obadmin:obadmin /obdata
chown -R obadmin:obadmin /obredo
obd部署单机版
- ⭐️ 部署环境:CentOS Linux 7.9 x86_64
- ⭐️ 安装包:
oceanbase-standalone-all-in-one.tar.gz
- ⭐️ 部署用户:obadmin用户(需要有sudo权限)
安装obd
解压安装包:
tar -xzf oceanbase-standalone-all-in-one.tar.gz
安装obd和OBClient:
cd standalone-all-in-one/
sudo bash bin/install_obd.sh
该脚本会安装obd和obclient,并将安装目录下rpms目录中的所有安装包复制到obd的本地镜像库中,同时关闭远程镜像库。执行成功后输出如下,需要复制并执行输出中的 source命令来应用环境配置。
Disable remote ok
Trace ID: 7bd73a1a-0e08-11f0-b275-00163e49899d
If you want to view detailed obd logs, please run: obd display-trace 7bd73a1a-0e08-11f0-b275-00163e49899dadd auto set env logic to profile: /root/.bash_profileExecute this command to apply the environment config:` source ~/.oceanbase-all-in-one/bin/env.sh `
配置obd
- 创建yaml格式的配置文件
obtest.yaml
:
user:username: obadmin# password: ********key_file: /home/obadmin/.ssh/id_rsa
oceanbase-standalone:servers:- ip: 10.10.10.1global:cluster_id: 1# please set memory limit to a suitable value which is matching resource. memory_limit: 64G # The maximum running memory for an observersystem_memory: 30G # The reserved system memory. system_memory is reserved for general tenants.datafile_size: 192G # Size of the data file. datafile_next: 200Gdatafile_maxsize: 1Tlog_disk_size: 192G # The size of disk space used by the clog files.enable_syslog_wf: false # Print system logs whose levels are higher than WARNING to a separate log file. The default value is true.max_syslog_file_count: 4 # The maximum number of reserved log files before enabling auto recycling. The default value is 0.# observer cluster name, consistent with obproxy's cluster_nameappname: obtestmysql_port: 2881 # External port for OceanBase Database. The default value is 2881. DO NOT change this value after the cluster is started.rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882. DO NOT change this value after the cluster is started.obshell_port: 2886 # Operation and maintenance port for OceanBase Database.# The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.home_path: /oceanbase# The directory for data storage. The default value is $home_path/store.data_dir: /obdata# The directory for clog. The default value is the same as the data_dir value.redo_dir: /obredoroot_password: ****** # root user password, can be emptyzone: zone1
📖 obd配置参数介绍:
username
:OceanBase集群部署用户。部署前需要确保该用户已存在。password
:password和key_file
均用于验证用户,通常只需要填写一个。servers
:每台机器都需要使用- ip:
的格式指定。memory_limit
:observer进程能从环境中获取的最大内存,未配置的情况下以memory_limit_percentage
配置项为准。默认值是0。system_memory
:保留的系统内存,该参数值会占用memory_limit
的内存,未配置的情况下OceanBase数据库会自适应。默认值是0M。datafile_size
:指定对应节点数据文件(block_file)大小,未配置的情况下以datafile_disk_percentage
配置项为准。默认值是0。datafile_next
:控制磁盘空间的增长步长,用于设置自动扩容。默认值是0。datafile_maxsize
:限制磁盘空间的最大可用上限,用于设置自动扩容。log_disk_size
:用于设置Redo日志磁盘的大小,未配置的情况下以log_disk_percentage
配置项为准。默认值是0。enable_syslog_wf
:设置是否把WARN以上级别的系统日志打印到一个单独的日志文件中。默认值是true。max_syslog_file_count
:设置在回收日志文件之前可以容纳的日志文件数量。值为0时表示不自动清理。默认值是0。appname
:OceaBase集群名称,默认是obcluster
。mysql_port
:设置SQL服务协议端口号,默认为2881。rpc_port
:设置远程访问的协议端口号,是observer进程跟其他节点进程之间的RPC通信端口,默认为2882。obshell_port
:设置OceanBase数据库运维端口,默认为2886。home_path
:OceanBase数据库安装路径,需确保部署用户拥有该目录的读写权限。data_dir
:设置存储SSTable等数据的目录,需确保部署用户拥有该目录的读写权限。建议配置为独立的磁盘。默认为$home_path/store
。redo_dir
:clog事务日志的目录,默认与data_dir
值相同,需确保部署用户拥有该目录的读写权限。建议配置为独立的磁盘。root_password
:OceanBase集群的超级管理员(root@sys
)的密码,建议设置复杂的密码。
- 如果需要添加监控,增加下面的监控配置:
obagent:depends:- oceanbase-standaloneservers:- ip: 10.10.10.1global:home_path: /oceanbase/obagentmonagent_http_port: 8088mgragent_http_port: 8089
prometheus:depends:- obagentservers:- 10.10.10.1global:# The working directory for prometheus. prometheus is started under this directory. This is a required field.home_path: /oceanbase/prometheusport: 9090
grafana:depends:- prometheusservers:- 10.10.10.1global:home_path: /oceanbase/grafanalogin_password: '********' # Grafana login password.port: 3000
注意obagent
与oceanbase-standalone
保持相同的行前缩进。
📖 监控配置参数介绍
servers
:每台机器都需要使用- ip:
的格式指定。obagent
组件下的servers配置需和oceanbase
组件下保持一致。home_path
:组件的安装路径。monagent_http_port
:OBAgent监控服务端口。默认为8088。mgragent_http_port
:OBAgent管理服务端口。默认为8089。prometheus.port
:Prometheus监听端口。默认为9090。grafana.port
:访问Grafana要使用的http端口。默认为3000。login_password
:Grafana的登录密码。
部署OB集群
- 部署OceanBase集群(单节点)。
# obd cluster deploy <deploy_name> -c <yaml_path>
obd cluster deploy obtest -c obtest.yaml
- 启动OceanBase集群(单节点)。
# obd cluster start <deploy_name>
obd cluster start obtest
部署后检查
使用OBClient客户端连接数据库集群:
# obclient -h<IP> -P<PORT> -u<user_name>@<tenant_name> -p -c -A
obclient -h10.10.10.1 -P2881 -uroot@sys -p -c -A
-h
:OBServer节点IP。-u
:连接用户。-P
:连接端口,对应mysql_port
配置项。-p
:连接密码。-c
:表示在OBClient运行环境中不要忽略注释(不影响Hint)。-A
:表示在OBClient连接数据库时不自动获取统计信息。
检查集群:
# 查看集群列表
obd cluster list# 查看集群状态
# obd cluster display <deploy_name>
obd cluster display obtest
环境清理与集群销毁
在清理旧的单机版环境之前,建议先进行数据备份。
- 查看单机版的状态。
obd cluster list
- 查看是否存在备租户。
# obd cluster tenant show <deploy_name> -g
obd cluster tenant show obtest -g
- 主备租户解耦(可选)。
若单机版中的租户存在备租户,销毁单机版时会报错,此时可以选择为主备租户解耦,也可以选择强制执行销毁命令,单机版销毁后备租户将无法使用。
执行如下命令查看备租户的主备关系:
obd cluster tenant show clusterC -g# 假设输出如下
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant base info |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
| tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
| sys | SYS | MYSQL | RANDOM | 1.0 | 1.0 | 2.0G | 9223372036854775807 | 9223372036854775807 | 2.0G | 1 | PRIMARY |
| C_a | USER | MYSQL | RANDOM | 2.0 | 2.0 | 4.0G | 10000 | 10000 | 5.0G | 2 | STANDBY |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| standby tenant standby info |
+---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
| standby_tenant_name | tenant_status | sync_status | sync_scn_timestamp | err_code | error_comment | switchover_status | switchover_epoch | log_mode |
+---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
| C_a | NORMAL | NORMAL | 2023-09-14 09:39:32.423752 | 0 | | NORMAL | 0 | NOARCHIVELOG |
+---------------------+---------------+-------------+----------------------------+----------+---------------+-------------------+------------------+--------------+
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| standby tenant`s primary info |
+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| standby_tenant_name | primary_tenant_info |
+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| C_a | IP_LIST=10.10.10.1:3881;10.10.10.2:3881;10.10.10.3:3881,USER=standbyro@B_a,PASSWORD=******,TENANT_ID=1002,CLUSTER_ID=1694681525,COMPATIBILITY_MODE=MYSQL,IS_ENCRYPTED=false |
+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
query primary-standby relation okprimary-standby relation topology graphclusterA:A_a
└── clusterB:B_a└── clusterC:C_a
为备租户C_a
执行解耦:
obd cluster tenant decouple clusterC C_a --tenant-root-password=******
执行Decouple操作后,对应的备租户会和主租户解耦,备租户角色会变换为PRIMARY。
再次查看原备租户的主备关系:
obd cluster tenant show clusterC -g# C_a 租户的tenant_role变为PRIMARY
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tenant base info |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
| tenant_name | tenant_type | compatibility_mode | primary_zone | max_cpu | min_cpu | memory_size | max_iops | min_iops | log_disk_size | iops_weight | tenant_role |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
| sys | SYS | MYSQL | RANDOM | 1.0 | 1.0 | 2.0G | 9223372036854775807 | 9223372036854775807 | 2.0G | 1 | PRIMARY |
| C_a | USER | MYSQL | RANDOM | 2.0 | 2.0 | 4.0G | 10000 | 10000 | 5.0G | 2 | PRIMARY |
+-------------+-------------+--------------------+--------------+---------+---------+-------------+---------------------+---------------------+---------------+-------------+-------------+
query primary-standby relation ok
- 销毁单机版数据库。
destroy命令不可逆,会在停止OBServer进程的同时清除数据库文件。因此执行以下命令前,请先确认单机版已经不再使用,并且需要备份的数据已经完成备份。
# obd cluster destroy <deploy_name> -f [--igs]
obd cluster destroy obtest -f [--igs]
-f
:表示检查到工作目录下有运行中的进程时,会强制停止进程,销毁单机版。--igs
:表示检查到单机版中租户在其他单机版中存在备租户时,强制执行obd cluster destroy
命令。
相关文章:
OceanBase企业版单机部署:obd命令行方式
OceanBase企业版单机部署:obd命令行方式 安装包准备服务器准备最低资源配置是否部署ODP组件?仲裁服务器 服务器配置操作系统内核参数BIOS设置磁盘挂载网卡设置 obd部署前配置obd部署单机版安装obd配置obd部署OB集群部署后检查 环境清理与集群销毁 本文介…...
KWDB创作者计划—KWDB认知引擎:数据流动架构与时空感知计算的范式突破
引言:数据智能的第三范式 在数字化转型进入深水区的2025年,企业数据系统正面临三重悖论:数据规模指数级增长与实时决策需求之间的矛盾、多模态数据孤岛与业务连续性要求之间的冲突、静态存储范式与动态场景适配之间的鸿沟。KWDB(K…...
车载通信系统中基于ISO26262的功能安全与抗辐照协同设计研究
摘要:随着智能网联汽车的快速发展,车载通信系统正面临着功能安全与抗辐照设计的双重挑战。在高可靠性要求的车载应用场景下,如何实现功能安全标准与抗辐照技术的协同优化,构建满足ISO26262安全完整性等级要求的可靠通信架构&#…...
Oracle OCP认证考试考点详解083系列03
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 11. 第11题: 题目 解析及答案: 关于 RMAN(恢复管理器)多路复用备份集,以下哪…...
Spring
一.Ioc&DI 1.类的五种控制反转注解 这五个注解作用都一样,只是意义不一样,用来提高代码的可读性。 Controller:控制层,接收请求,对请求进⾏处理,并进⾏响应。 Servie:业务逻辑层࿰…...
基于开源链动2+1模式、AI智能名片与S2B2C商城小程序源码的体验式关系深化与商业转化研究
摘要:本文探讨了通过体验过程中的共同经历强化关系,促使KOC(关键意见消费者)为品牌背书的机制,并深入分析了开源链动21模式、AI智能名片以及S2B2C商城小程序源码在其中的创新应用。研究发现,这些新模式和技…...
【区块链安全 | 第三十九篇】合约审计之delegatecall(一)
文章目录 外部调用函数calldelegatecall call 与 delegatecall 的区别示例部署后初始状态调用B.testCall()函数调用B.testDelegatecall()函数区别总结 漏洞代码代码审计攻击代码攻击原理解析攻击流程修复建议审计思路 外部调用函数 在 Solidity 中,常见的两种底层外…...
Kingbase 常用运维命令总结
一、数据库连接与基础操作 连接指定服务器数据库 ksql -h 主机IP -p 端口号 -U 用户名 -d 数据库名 -W # 示例:连接 IP 为 192.168.1.100 的数据库 ksql -h 192.168.1.100 -p 54321 -U system -d test -W 断开数据库连接 \q 或 exit 查看数据库列表及详细信息…...
从零开始的C++编程 2(类和对象下)
目录 1.构造函数初始化列表 2.类型转换 3.static成员 4.友元 5.内部类 6.匿名对象 1.构造函数初始化列表 ①之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化…...
Java---抽象类与接口
抽象类与接口 前言一、抽象类1.抽象类的概念2.抽象类的语法3.抽象类的特点4.抽象类的操作5.抽象类的作用 二、接口1.接口的概念2.接口语法3.接口的使用与特性4.实现多个接口5.接口之间的继承6.接口的实例(1).对象大小的比较(1).Comparable接口(2).Comparator接口 (2).实现类的克…...
玩转Docker | 使用Docker部署linkding书签管理工具
玩转Docker | 使用Docker部署linkding书签管理工具 前言一、linkding介绍简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署linkding服务下载镜像创建容器检查容器状态检查服务端口设置登录账号与密码安全设置四、访问linkding服务访问linkding…...
K8s 集群网络疑难杂症:解决 CNI 网络接口宕机告警的完整指南
引言 在 Kubernetes 集群运维过程中,网络问题往往是最棘手的故障之一。当你收到一条 [CRITICAL] 网络接口宕机 (172.18.109.55:9100) 的告警,并且告警内容显示 172.18.109.55:9100 的网络接口 cni0 已宕机5分钟 时,这通常意味着你的 Kubernetes 集群中有一个节点的容器网络…...
程序员/运维绘图工具---Mermaid
效果 介绍 Mermaid 是一种基于文本的图表生成工具,通过类似 Markdown 的简洁语法快速创建流程图、甘特图、类图等各类专业图表 应用场景 程序员绘图 系统架构图&代码逻辑可视化 项目管理图 数据可视化 AI辅助生成:LLM生成mermaid代码然后去渲染成…...
《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-用MATLAB画一朵会动的3D玫瑰:从零开始的浪漫编程之旅
《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-🌹用MATLAB画一朵会动的3D玫瑰:从零开始的浪漫编程之旅 你是否想过用代码创造一朵永不凋谢的玫瑰?今天,我将带你走进MATLAB的奇妙世界,用数学公式和编…...
激光院董事长龚赤坤到北京研发中心检查指导工作
4月11日,激光院党委书记、董事长龚赤坤到北京研发中心检查指导工作。 龚赤坤详细了解了北京研发中心的建设情况和科研进展,充分肯定所取得的成绩,对发展寄予厚望,龚赤坤指出北京研发中心的成立正处于激光院加速发展与产业进化的关…...
AbortController:让异步操作随时说停就停
AbortController:让异步操作随时说停就停 一、什么是 AbortController? AbortController 是 JavaScript 在浏览器和部分 Node.js 环境中提供的全局类,用来中止正在进行或待完成的异步操作(如 fetch() 请求、事件监听、可写流、数…...
leetcode572 另一棵树的子树
1.与100、101解法相同 递归: class Solution { private:bool compare(TreeNode* p, TreeNode* q){if(!p && !q) return true;else if(!p || !q) return false;else if(p->val ! q->val) return false;bool leftside compare(p->left, q->lef…...
再看 MPTCP 时的思考
2022 年夏,居家办公时,第一次接手 mptcp 就觉得它不靠谱,以至于我后来搞了 mpudp for DC,再后来我调研了很多 mptcp-based 方案,发现它们都是向善而来,最终灰头土脸而终。mptcp 实则一个坑,业内…...
将三维非平面点集拆分为平面面片的MATLAB实现
将三维非平面点集拆分为平面面片的MATLAB实现 要将三维空间中不在同一平面上的点集拆分为多个平面面片,可以采用以下几种方法: 1. 三角剖分法 (Delaunay Triangulation) 最简单的方法是将点集进行三角剖分,因为三个点总是共面的࿱…...
Python(10.2)Python可变与不可变类型内存机制解密:从底层原理到工程实践
目录 一、类型特性引发的内存现象1.1 电商促销活动事故分析1.2 内存机制核心差异 二、内存地址追踪实验2.1 基础类型验证2.2 复合对象实验 三、深度拷贝内存分析3.1 浅拷贝陷阱3.2 深拷贝实现 四、函数参数传递机制4.1 默认参数陷阱4.2 安全参数模式 五、内存优化最佳实践5.1 字…...
华为hcie证书的有效期怎么判断?
在ICT行业,华为HCIE证书堪称含金量极高的“敲门砖”,拥有它往往意味着在职场上更上一层楼。然而,很多人在辛苦考取HCIE证书后,却对其有效期相关事宜一知半解。今天,咱们就来好好唠唠华为HCIE证书的有效期怎么判断这个关…...
【前端】CSS Grid 布局详解
CSS Grid 布局详解(通俗易懂版) 一、概述 CSS Grid 是一种二维布局系统,可以同时控制行和列,相比 Flex(一维布局),更适合用在整体页面布局或复杂模块结构中。 二、基础概念 Grid 容器&#x…...
物美“外贸转内销”极速绿色通道正式开启
「TMT星球」获悉,在国家“提振消费、扩大内需”及“内外贸一体化”战略指引下,物美集团依托自身零售生态优势,打造“云超绿通”专项通道,助力中国优质外贸企业实现“出口转内销”的高效转型,通过极速绿通、线上线下全渠…...
【说明书#1】Node.js 和 npm安装与使用
系统提示 npm 不是内部或外部命令,也不是可运行的程序或批处理文件,也就是 npm 命令无法识别。这个错误通常是因为 Node.js 和 npm 没有正确安装,或者它们的路径没有添加到系统的环境变量中。 解决方法如下: 1. 安装 Node.js 和 npm: 如果你还没有安装 Node.js,可以从…...
【触想智能】安卓工业平板电脑和普通商业平板电脑的区别
安卓工业平板电脑是基于ARM架构开发的一种工业平板电脑,它在自助终端、智能制造、产线车间、智慧物流、商业金融等诸多领域有着广泛的应用。 触想安卓工业平板电脑TPC-A2系列 安卓工业平板电脑和普通商业平板电脑在一些方面存在一些区别,包括设计、硬件规…...
Java基于SSM的课程答疑微信小程序【附源码、文档说明】
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...
模板引擎语法-变量
模板引擎语法-变量 文章目录 模板引擎语法-变量(一)在Django框架模板中使用变量的代码实例(二)在Django框架模板中使用变量对象属性的代码实例(三)在Django框架模板中使用变量显示列表 (一&…...
1260 最大公约数
1260 最大公约数 ⭐️难度:中等 🌟考点:GCD 📖 📚 import java.util.Scanner; import java.util.Arrays;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int t …...
Node.js中net模块详解
Node.js 中 net 模块 API 详解 Node.js 的 net 模块提供了基于 TCP/IP 的网络功能,用于创建 TCP 服务器和客户端。以下是 net 模块的所有 API 详解: 1. 创建 TCP 服务器 const net require(net);// 1. 基本服务器 const server net.createServer((s…...
【从零开始学习JVM | 第三篇】虚拟机的垃圾回收学习(一)
堆空间的基本结构 Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。 Java 堆是垃圾收集器管理的主要区域,因此也被称作 GC 堆(Garbage Collected Heap&am…...
intellj idea 2024.1
参考资料 激活 https://www.microcharon.com/tech/5.htmlja-netfilter-all下载地址:https://drive.microcharon.com/OneDrive/Software/JetBrains%20ja-netfilter-all%20Build%202024.1.11.zip 步骤及问题 下载后:安全前确保旧版本的idea已经卸载。安…...
redis之缓存击穿
一、前言 本期我们聊一下缓存击穿,其实缓存击穿和缓存穿透很相似,区别就是,缓存穿透是一些黑客故意请求压根不存在的数据从而达到拖垮系统的目的,是恶意的,有针对性的。缓存击穿的情况是,数据确实存在&…...
Node.js中path模块详解
Node.js path 模块全部 API 详解 Node.js 的 path 模块提供了处理文件路径的工具函数,支持跨平台路径操作。以下是 path 模块的所有 API 详解: 1. 路径解析与操作 const path require(path);// 1. 路径连接 const fullPath path.join(__dirname, fi…...
重构艺术 | 内联与查询替代临时变量
重构艺术 | 内联与查询替代临时变量 在代码重构的殿堂里,临时变量常常扮演着双面角色:既是代码清晰的助力器,也可能成为代码腐败的温床。本文将深入探讨两种处理临时变量的重要手法:内联临时变量(Inline Temp…...
数据分析-数据预处理
数据分析-数据预处理 处理重复值 duplicated( )查找重复值 import pandas as pd apd.DataFrame(data[[A,19],[B,19],[C,20],[A,19],[C,20]],columns[name,age]) print(a) print(--------------------------) aa.duplicated() print(a)只判断全局不判断每个 any() import p…...
Java基础 4.12
1.方法的重载(OverLoad) 基本介绍 Java中允许同一个类,多个同名方法的存在,但要求形参列表不一致! 如 System.out.println(); out是PrintStream类型 重载的好处 减轻了起名的麻烦减轻了记名的麻烦 2.重载的快速入…...
PostgreSQL有类似oracle的move表吗
PostgreSQL有类似oracle的move表吗 PostgreSQL 提供了类似 Oracle MOVE 表功能的重组操作,但实现方式和具体命令有所不同。以下是详细对比和 PostgreSQL 中的实现方案: 一 Oracle MOVE 与 PostgreSQL 对比 特性Oracle MOVEPostgreSQL 等效操作主要用途…...
AUTO-RAG: AUTONOMOUS RETRIEVAL-AUGMENTED GENERATION FOR LARGE LANGUAGE MODELS
Auto-RAG:用于大型语言模型的自主检索增强生成 单位:中科院计算所 代码: https://github.com/ictnlp/Auto-RAG 拟解决问题:通过手动构建规则或者few-shot prompting产生的额外推理开销。 贡献:提出一种以LLM决策为中…...
ABC-CNN-GRU-Attention、CNN-GRU-Attention、ABC-CNN-GRU和CNN-GRU四类对比模型多变量时序预测
人工蜂群算法四模型对比!ABC-CNN-GRU-Attention系列四模型多变量时序预测 目录 人工蜂群算法四模型对比!ABC-CNN-GRU-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 本研究针对多变量时间序列预测任务…...
ssh 免密登录服务器(vscode +ssh 免密登录)
每次打开vscode连接服务器都需要输入密码,特别繁琐。 然后自己在网上翻阅了一下教程,发现说的内容比较啰嗦,而且个人感觉非常有误导性倾向。 因此自己直接干脆写一个简便易懂的教程算了。 (以经过本人亲测,真实可靠&am…...
Elasticsearch 系列专题 - 第七篇:实战项目
理论学习固然重要,但实战才能真正巩固知识。本篇将通过两个项目,带你从需求分析到实现,体验 Elasticsearch 在真实场景中的应用。 1. 项目一:日志分析系统 1.1 需求分析与架构设计 需求: 实时采集服务器日志。按时间和日志级别(INFO、ERROR)分析。可视化错误趋势。架构…...
C++初阶-类和对象(上)
本章内容相对于之后的类和对象中和下都比较简单,但是整体还是有些难度的。 目录 1.类的定义 1.1类定义格式 1.2访问限定符 1.3类域 2.实例化 2.1实例化概念 2.2对象大小 3.this指针 4.练习 4.1选择题1 4.2选择题2 5.总结 1.类的定义 1.1类定义格式 &am…...
(十九)安卓开发中的Application类的使用详解
在 Android 开发中,Application 类是一个全局的单例类,代表应用进程本身。它常用于初始化全局资源、维护应用级别的状态和注册全局生命周期回调。以下是详细讲解和代码示例: 一、自定义 Application 类 1. 创建子类 public class MyApplica…...
算法思想之位运算(一)
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之位运算(一) 发布时间:2025.4.12 隶属专栏:算法 目录 滑动窗口算法介绍六大基础位运算符常用模板总结 例题位1的个数题目链接题目描述算法思路代码实现 比特位计数题目链接题目描述…...
十八、TCP多线程、多进程并发服务器
1、TCP多线程并发服务器 服务端: #include<stdio.h> #include <arpa/inet.h> #include<stdlib.h> #include<string.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <pthread.h>…...
『生成内容溯源系统』详解
生成内容溯源系统详解 1. 定义与核心目标 生成内容溯源系统(Generative Content Provenance System)是指能够追踪AI生成内容的来源、生成过程、版权归属及修改历史的技术体系。其核心目标是: 验证真实性:证明内容由特定AI模型生…...
mac 解压 nsz 文件
nsz 地址 下载 nsz PIP 套餐 使用以下命令安装仅限 Console 的版本: pip3 install --upgrade nsz使用以下命令安装 GUI 版本: pip3 install --upgrade nsz[gui]解压 nsz 文件 nsz -D 文件路径...
Python进阶(3):函数(接上篇)
上一篇我们初步介绍python中函数的定义与调用 Python进阶(2):函数-CSDN博客 这里继续: 关键字参数: 形参1实参1,形参2实参2,...... 关键字参数是指使用形式参数的名字来确定输入的参数值。通过该方式指定实际参数时,不再需要与形式参数的位置完全一致。只要将参数名写正确…...
卒/兵过河前的判断和走法触发器优化
兵(卒):兵(卒)在未过河前,只能向前一步步走,过河以后,除不能后退外,允许左右移动,但也只能一次一步。 迷你世界地图已上传 优化...
生物信息Rust-01
前言-为什么想学Rust? 一直想多学一门编译语言,主要有几个原因吧(1. 看到一位老师实验室要求需要掌握一门编译语言;2. 自己享想试着开发一些实用的生信工具,感觉自己现在相比于数据分析,探索生物学层面的意…...