【存储】cosbench对象存储测试工具

目录

简略说明

原理

用法

详细说明

简介

用法

一 安装

二 简单验证

三 编写配置文件

四 提交配置文件下IO

五 测试结果查看

结果概览

查看详情

每秒钟的io情况查看

工作负载配置

参数配置(controller和driver)

查看错误的方法和错误记录

查看错误的方法

错误记录

简略说明

COSBench是一个用于测试对象存储系统的分布式基准测试工具

原理

存储集群建立网关,cosbench连接网关,根据用户提交的xxx.xml向集群下IO(网关地址,key,和怎么下IO在配置文件xxx.xml中配置了)

用法

1,安装:

下载cosbench:https://github.com/intel-cloud/cosbench工具,放到压力机上,解压。

(COSBench0.4.2.c4.zip资源-CSDN文库)

2,启动cosbench服务:

sh start-all.sh

这个时候就可以访问你启动的cosbench了: http://<IP>:19088/controller/index.html     #<IP>替换成实际地址

3,编写xml配置文件

(集群提前创建好网关,客户端(key))样例如下,文章后面会教你怎么写。

4,提交任务(xml配文件)

 在主页  http://<IP>:19088/controller/index.html 点击submit new workloads,然后选择你编写的xml配置文件,提交,cosbench就开始向你xml里面知道网关,按xml里面定义的操作,向集群下IO

详细说明

简介

COSBench是Intel团队基于java开发,对云存储的测试工具,全称是Cloud object Storage Bench

cosbench 由两个主要组件组成Driver和Controller。

Driver(Load Generator,打工的):

        负责生成工作负载,向目标对象存储发出操作(读取用户的xml配置,向集群下IO);性能统计。可通过http://:18088/driver/index.html访问

Controller(工头):

        负责协调drivers集体执行工作,收集和汇总聚合来自driver实例的运行时状态或基准测试结果。(就是比如你要多台服务器做压力机,在一台机器做Controller,Controller根据配置控制多台压力机下某个集群下IO)

        两个组件可以混合部署在一个节点上,也可以分开来部署.(比如,我们如果只有一台服务器做压力机,那我们就Controller和Driver都在这台机器上启动,这台机器既是工头又是打工的,自己控制自己下IO)

下图是,一个服务器做Controller,控制两台机器下IO)

做工头(Controller)的服务器启动start-Controller.sh脚本,做打工(driver)的服务器启动start-driver.sh脚本,(只有一台服务的情况)即做工头(Controller)又打工(driver)的,即启动start-all.sh

工头控制那些打工的,通过conf/controller.conf文件配置,如下,只有一个打工的driver1:

更详细的配置见后面的《参数配置(controller和driver)》

用法

一 安装

1、 下载COSBench工具

下载地址为:https://github.com/intel-cloud/cosbench,下载最新的包

(COSBench0.4.2.c4.zip资源-CSDN文库)

2、 将包放至linux任意目录中,进行解压unzip xxx.zip

3、 解压后,里面有说明文档:COSBenchUserGuide.pdf

4、 安装依赖java 和curl

yum install java curl

(COSBench底层调用了linux nc来做数据分析,所以如果linux没装nc的需要手工安装nc)

2、文件说明

官方英文使用文档(超详细,可以翻翻看)

[root@ceph-node1 0.4.2.c4]# ll *.pdf3rd-party-licenses.pdfCOSBenchAdaptorDevGuide.pdf
COSBenchUserGuide.pdf服务调用脚本说明[root@ceph-node1 0.4.2.c4]# ll *.sh
cli.sh              #通过命令行操作cosbench
cosbench-start.sh   #其他启动脚本调用的脚本
cosbench-stop.sh    #其他启动脚本调用的脚本
start-all.sh          #在当前节点启动driver和controller组件
stop-all.sh           #在当前节点停止driver和controller组件
start-controller.sh   #在当前节点启动controller
start-driver.sh       #在当前节点启动driver
stop-controller.sh    #在当前节点关闭controller
stop-driver.sh        #在当前节点关闭driver

二 简单验证

启动cosbench

启动前为了保证driver和controller之间交互正常,需要关闭HTTP代理

[root@ceph-node1 0.4.2.c4]# unset http_proxy

启动controller和driver (服务器即做工头又做打工的)

[root@ceph-node10.4.2.c4]# sh start-all.sh

  验证

 controller在初始化时读取conf/controller.conf配置文件启动控制器服务,看配置文件可知controller的访问地址是http://<IP>:19088/controller/index.html

访问http://<IP>:19088/controller/index.html验证。

三 编写配置文件

cosbench使用负载配置文件向对象存储下发测试任务。

负载配置文件含如下参数:

  1. 网关节点ip和端口,或者高可用组的vip和端口,或者域名和端口;
  2. 对象存储用户的ak/sk;

在conf目录下有很多配置样例,详细说明,见后面的《工作负载配置》

四 提交配置文件下IO

有两种方法:

1,命令行:

bash cli.sh submit conf/s3-config-sample.xml 

访问http://<IP>:19088/controller/index.html 就可以看到执行情况

2,web界面提交

 在主页  http://<IP>:19088/controller/index.html 点击submit new workloads,然后选择xml配置文件

五 测试结果查看

结果概览

每个阶段执行完后,可以在web界面看到iops、带段等结果:

General Report这一栏,每个值的含义如下:

  • Op-Type : 操作类型
  • Op-Count : 操作总数
  • Byte-Count : 操作产生的Byte
  • Avg-ResTime:平均时延,它为存储服务处理请求的时间,包含数据传输时间,一般小文件(比如KB级别)我们也会关注这个值,此值越低,小文件的IOPS越好
  • Avg-ProcTime:平均处理时间,它为存储服务处理请求的时间,不包含数据传输时间
  • Throughput:吞吐量,当我们的文件粒度为1M及以下时,着重关注这个值,描述了当前文件粒度下的读写等性能(IOPS)
  • Bandwidth:带宽,当我们的文件粒度为1M以上时,着重关注这个值,描述了当前文件粒度下的读写等性能(MB/s等单位)
  • Succ-Ratio:请求成功率,这里一般都要求100%

也可以在任务ID,在cosbench安装目录的archive子目录中看到测试结果:

每个任务ID对应的目录下,都按照阶段生成了相应的csv文件,下载对应的csv文件用execel查看即可:

查看详情

每秒钟的io情况查看

如查看wid=w12&sid=s2-prepare 的每秒钟IO

在将 http://10.255.136.7:19088/controller/stage.html?wid=w12&sid=s2-prepare 中的stage.html 改成 timeline.html ,回车即可

工作负载配置

在conf目录下有很多配置样例

  进入conf目录下,查看s3-config-sample.xml配置文件内容如下:

 配置参数和说明:

<?xml version="1.0" encoding="utf-8"?>

<!--workload name : 测试时显示的任务名称,可自定义;description : 描述信息-->

<workload name="s3-sample" description="sample benchmark for s3">

    <!--storage type: 存储类型,这里配置为s3即可-->

    <storage type="s3" config="accesskey='填访问key';secretkey='填安全key';proxyhost='填代理ip或域名,可以不使用代理';proxyport='如果用了代理,填代理端口';endpoint='填对象存储系统的网关的地址http:/ip:端口';" />

    <!--workflow工作流,workstage name:cosbench是分阶段按顺序执行,每个阶段的名字-->

    <workflow>

            <workstage name="init">

                <!--workers:该阶段开启多少工作线程;config:存储桶bucket的名称前缀;containers:轮询数,如本例创建以s3testqwer为前缀,后缀分别为12bucket-->

                <work type="init" workers="1" config="cprefix=s3testqwer;containers=r(1,2)" />

            </workstage>

            

             <!--prepare阶段,配置写入的数据;workers\config\containersinit阶段相同;objects:一轮写入多少个对象以及object的大小-->

            <workstage name="prepare">

                                     <!--一个worker处理该阶段,r就是range,轮询1,2两个容器(桶),前缀是s3testqwer,每个容器写入10个 objecter,尺寸是64KB-->

                <work type="prepare" workers="1" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,10);sizes=c(64)KB" />

            </workstage>

             <!--main阶段:测试阶段;runtime:运行的时间,默认为秒-->

            <workstage name="main">

                <work name="main" workers="8" runtime="30">

                     <!--op type:操作类型readwritedelete;ratio操作占比,read的比例为80%,write的比例为20%; -->

                    <operation type="read" ratio="80" config="cprefix=s3testqwer;containers=u(1,2);objects=u(1,10)" />

                    <operation type="write" ratio="20" config="cprefix=s3testqwer;containers=u(1,2);objects=u(11,20);sizes=c(64)KB" />

                </work>

            </workstage>

             <!--清理阶段:主要是删除bucket中的数据,保证测试后的数据不会保留在集群中-->

            <workstage name="cleanup">

                <work type="cleanup" workers="1" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,20)" />

            </workstage>

            

            <!--dispose阶段:删除bucket-->

            <workstage name="dispose">

                <work type="dispose" workers="1" config="cprefix=s3testqwer;containers=r(1,2)" />

            </workstage>

    </workflow>

</workload>

workload name : 测试时显示的任务名称,这里可以自行定义

description : 描述信息,这里可以自己定义

storage type: 存储类型,这里配置为s3即可

config : 对该类型的配置,

workstage name : 

    cosbench是分阶段按顺序执行,此处为init初始化阶段,主要是进行bucket的创建,

    workers表示执行该阶段的时候开启多少个工作线程,创建bucket通过不会计算为性能,所以单线程也可以;

    config处配置的是存储桶bucket的名称前缀;

    containers表示轮询数,上例中将会创建以s3testqwer为前缀,后缀分别为1和2的bucket

prepare阶段 : 

    配置为bucket写入的数据,workers和config以及containers与init阶段相同,除此之外还需要配置objects,表示一轮写入多少个对象,以及object的大小。

main阶段 :

     这里是进行测试的阶段,runtime表示运行的时间,时间默认为秒

    operation type : 操作类型,可以是read、write、delete等。

    ratio表示该操作所占有操作的比例,例如上面的例子中测试读写,read的比例为80%,write的比例为20%; 

    config中配置bucket的前缀后缀信息。注意write的sizes可以根据实际测试进行修改

cleanup阶段 :

     这个阶段是进行环境的清理,主要是删除bucket中的数据,保证测试后的数据不会保留在集群中

dispose阶段 : 

这个阶段是删除bucket

 

参数配置(controller和driver)

 测试案例配置

 cosbench工具使用按照流程可分为以下几个步骤:参数配置--服务启动--提交测试--分析结果

示例使用三个节点联机测试,配置示意如下:

调整时差,客户机和集群的时差不要太大。

4.1 参数配置

        controller和driver依赖不同系统配置来启动服务,在启动controller和driver服务时,需要先行定义角色配置

一、controller配置

        controller在初始化时读取conf/controller.conf配置文件启动控制器服务

[root@node241 0.4.2.c4]# cat conf/controller.conf

[controller]

concurrency=1

drivers=3

log_level=INFO

log_file=log/system.log

archive_dir=archive

 

[driver1]

name=driver1

url=http://66.66.66.241:18088/driver

 

[driver2]

name=driver2

url=http://66.66.66.242:18088/driver

 

[driver3]

name=driver3

url=http://66.66.66.243:18088/driver

 [controller]

concurrency:默认值为1,表示可以同时执行的工作负载数量

drivers:默认值为1,表示此controller控制的driver数量

log_level:默认值为INFO,可选值为TRACE、DEBUG、INFO、WARN、ERROR,表示日志打印等级

log_file:默认值为log/system.log,表示日志文件存放位置

archive_dir:默认值为archive,表示工作负载结果存放位置,当参数值为archive,则工作负载结果存放于0.4.2/archive目录内

 [driver#x]

        当有多个driver时,第{n}个driver命名为[driver{n}]

name:用于标识driver节点的标签,名称可以自定义

url:访问driver节点的地址

二、driver配置

  driver在初始化时读取conf/driver.conf配置文件启动负载器服务。

[root@node241 0.4.2.c4]# cat conf/driver.conf 

[driver]

name=127.0.0.1:18088

url=http://127.0.0.1:18088/driver

查看错误的方法和错误记录

查看错误的方法

1,点击download-log 下载log

查看下载下来log内容

1、main阶段failed

点击“view details”,找到Mission ID:

在cosbench安装目录的log/mission目录下,找到该mission id对应的日志文件,从日志文件中查看报错:

错误记录

Status Code: 500

Status Code: 5002024-03-11 20:36:36,483 [ERROR] [AbstractOperator] - worker 13 fail to perform operation s3testqwer25com.intel.cosbench.api.storage.StorageException: com.amazonaws.services.s3.model.AmazonS3Exception: We encountered an internal error, please try again.: cause(save bucket metadata to ns failed!s3testqwer25) (Service: Amazon S3; Status Code: 500; Error Code: InternalError; Request ID: 17BBB600BD8B7581), S3 Extended Request ID: 1a6d04ea-b557-4018-9ced-cc23e3798466at com.intel.cosbench.api.S3Stor.S3Storage.createContainer(S3Storage.java:149)at com.intel.cosbench.driver.operator.Preparer.doInit(Preparer.java:113)at com.intel.cosbench.driver.operator.Preparer.operate(Preparer.java:87)at com.intel.cosbench.driver.operator.AbstractOperator.operate(AbstractOperator.java:76)at com.intel.cosbench.driver.operator.Initializer.operate(Initializer.java:1)at com.intel.cosbench.driver.agent.WorkAgent.performOperation(WorkAgent.java:197)at com.intel.cosbench.driver.agent.WorkAgent.doWork(WorkAgent.java:177)at com.intel.cosbench.driver.agent.WorkAgent.execute(WorkAgent.java:134)at com.intel.cosbench.driver.agent.AbstractAgent.call(AbstractAgent.java:44)at com.intel.cosbench.driver.agent.AbstractAgent.call(AbstractAgent.java:1)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)

原因
1,对象数据池没有创建

which: no nc in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

如果不安装nc,会报错

which: no nc in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

Ncat: Connection refused.

No appropriate tool found to detect cosbench driver status.

        如果不安装java,会报

Ncat: Connection refused.

启动失败

摘自:尝试在CentOS 7上启动cosbench遭遇的一些问题 - 之一 - 中道学友 - 博客园 (cnblogs.com)

尝试启动cosbench,遭遇报错:

[root]hopisdtmelabs14# cat driver-boot.log                                                                                                                                      /tmp/cosbench/0.4.2/log
java.net.BindException: Address already in use (Bind failed)at java.net.PlainSocketImpl.socketBind(Native Method)at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)at java.net.ServerSocket.bind(ServerSocket.java:375)at java.net.ServerSocket.<init>(ServerSocket.java:237)at java.net.ServerSocket.<init>(ServerSocket.java:128)at org.eclipse.osgi.framework.internal.core.ConsoleManager.startConsole(ConsoleManager.java:186)at org.eclipse.osgi.framework.internal.core.ConsoleManager.startConsole(ConsoleManager.java:132)at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:269)at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:175)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)at org.eclipse.equinox.launcher.Main.run(Main.java:1410)at org.eclipse.equinox.launcher.Main.main(Main.java:1386)!SESSION 2020-06-03 06:04:23.609 -----------------------------------------------eclipse.buildId=unknown
java.version=1.8.0_181
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Command-line arguments:  -console 18089
!ENTRY org.eclipse.osgi 4 0 2020-06-03 06:04:24.132
!MESSAGE Bundle plugins/cosbench-castor not found.

看起来像是网络端口18089已经被占用了,杀掉那些进程,问题解决。

如何找到占用18089端口的进程?举例如下:

# netstat -tulpn | grep 18089                                                                                                                                /tmp/cosbench/cos/conftcp6       0      0 :::18089                :::*                    LISTEN      4090/java# ps aux | grep java                                                                                                                                         /tmp/cosbench/cos/confroot      4090  0.0  0.4 21453452 315076 ?     Sl   10:39   0:18 java -Dcosbench.tomcat.config=conf/driver-tomcat-server.xml -server -cp main/org.eclipse.equinox.launcher_1.2.0.v20110502.jar org.eclipse.equinox.launcher.Main -configuration conf/.driver -console 18089root      4822  0.3  0.3 20319980 262324 pts/0 Sl   21:13   0:07 java -Dcosbench.tomcat.config=conf/controller-tomcat-server.xml -server -cp main/org.eclipse.equinox.launcher_1.2.0.v20110502.jar org.eclipse.equinox.launcher.Main -configuration conf/.controller -console 19089root      4965  0.0  0.0 112828  2316 pts/0    S+   21:46   0:00 grep --color=auto java

可以看出来在上面的例子中,4090就是占用了18089端口的进程号了,通过ps aux 还能看到详细的命令行参数。

但cosbench driver 还是启动不了。

[root]hopisdtmelabs14# bash ./start-driver.sh                                                                                                                                          /tmp/cosbench/cosLaunching osgi framwork ...
Successfully launched osgi framework!
Booting cosbench driver ...
which: no nc in (/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/tme/bin:/usr/local/tme/tme_portal/perf_web/bin)
No appropriate tool found to detect cosbench driver status.

看报错,应该是nc(ncat)这个软件没有安装。可是通过yum还没法正常安装。我通过下面的命令解决了这个问题:

​
# yum -y install wget
# wget  https://nmap.org/dist/ncat-7.80-1.x86_64.rpm
# yum localinstall ncat-7.80-1.x86_64.rpm
# cd /usr/bin
# ln -s ncat nc

装好了nc之后,还是有错误。

# bash ./start-driver.sh                                                                                                                                          /tmp/cosbench/cosLaunching osgi framwork ...
Successfully launched osgi framework!
Booting cosbench driver ...
...........................................................
Starting    cosbench-log_0.4.2    [ERROR]
...........................................................
Starting    cosbench-tomcat_0.4.2    [ERROR]
..........................................................
Starting    cosbench-config_0.4.2    [ERROR]
...........................................................
Starting    cosbench-http_0.4.2    [ERROR]

我怀疑是我的java的版本过高,所以卸掉java 8, 安装java 7。

# rpm -aq | grep -i jdk                                                                                                                                           /tmp/cosbench/cosjava-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
copy-jdk-configs-3.3-10.el7_5.noarch
java-1.8.0-openjdk-headless-1.8.0.181-3.b13.el7_5.x86_64# rpm -e java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
# rpm -e java-1.8.0-openjdk-headless-1.8.0.181-3.b13.el7_5.x86_64
# yum remove java

安装java 7.

#yum install java-1.7.0-openjdk

结果遇到了报错,说有两个软件包太旧了,达不到安装的要求。

尝试安装更新,结果还是报错,无法更新。

[Errno 14] HTTP/HTTPS Error 404

于是执行下面的命令,对yum进行修复。

#yum clean all

#rm -rf /var/cache/yum/*

之后java 7也成功安装了。

但还是报错:

# cat driver-boot.log                                                                                                                                         /tmp/cosbench/cos/log
Listening on port 0.0.0.0/0.0.0.0:18089 ...
!SESSION 2020-06-03 10:12:59.683 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_261
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Command-line arguments:  -console 18089
!ENTRY org.eclipse.osgi 4 0 2020-06-03 10:13:00.367
!MESSAGE Bundle plugins/cosbench-castor not found.
!ENTRY org.eclipse.osgi 4 0 2020-06-03 10:13:00.368
!MESSAGE Bundle plugins/cosbench-log4j not found.
!ENTRY org.eclipse.osgi 4 0 2020-06-03 10:13:00.368
!MESSAGE Bundle plugins/cosbench-log@6:start not found.
!ENTRY org.eclipse.osgi 4 0 2020-06-03 10:13:00.369
!MESSAGE Bundle plugins/cosbench-config@6:start not found.……

Github的cosbench的站点里的issue#383里的步骤(具体步骤描述在这篇文章),即删掉cosbench-start.sh里的一行(如下),我也试过了,并没有解决问题。

TOOL_PARAMS="-i 0" -----Delete this line

经过查询,找到了这篇文章,推荐不要使用正式版的0.4.2,推荐试试0.4.2.c4, 于是下载了更早的一个版本0.4.2.c4。

问题解决了,终于成功启动了cosbench driver。

# bash ./start-driver.sh                                                                                                                                     /tmp/cosbench/0.4.2.c4
Launching osgi framwork ...
Successfully launched osgi framework!
Booting cosbench driver ...
.
Starting    cosbench-log_0.4.2    [OK]
.
Starting   cosbench-tomcat_0.4.2    [OK]
Starting    cosbench-config_0.4.2    [OK]
Starting    cosbench-http_0.4.2    [OK]
Starting    cosbench-cdmi-util_0.4.2    [OK]
Starting    cosbench-core_0.4.2    [OK]
Starting    cosbench-core-web_0.4.2    [OK]
Starting    cosbench-api_0.4.2    [OK]
Starting    cosbench-mock_0.4.2    [OK]
Starting    cosbench-ampli_0.4.2    [OK]
Starting    cosbench-swift_0.4.2    [OK]
Starting    cosbench-keystone_0.4.2    [OK]
Starting    cosbench-httpauth_0.4.2    [OK]
Starting    cosbench-s3_0.4.2    [OK]
Starting    cosbench-librados_0.4.2    [OK]
Starting    cosbench-scality_0.4.2    [OK]
Starting    cosbench-cdmi-swift_0.4.2    [OK]
Starting    cosbench-cdmi-base_0.4.2    [OK]
Starting    cosbench-driver_0.4.2    [OK]
Starting    cosbench-driver-web_0.4.2    [OK]
Successfully started cosbench driver!
Listening on port 0.0.0.0/0.0.0.0:18089 ...
Persistence bundle starting...
Persistence bundle started.
----------------------------------------------
!!! Service will listen on web port: 18088 !!!
----------------------------------------------

不知道为什么,在CentOS 7上运行0.4.2 明显的有问题,却还不被修复,结果还要去使用稍早的版本release candidate 4, 这个事儿弄的挺恶心的。

To the English readers:
I document the process and issues here in detail, hope other people hit on the same issue can see it, and save time.

参考资料


================How to check if port is in use on Linux or Unix
https://www.cyberciti.biz/faq/unix-linux-check-if-port-is-in-use-command/
NETCAT THE MULTI-PURPOSE NETWORKING TOOL
landoflinux.com
Uninstall JDK rpm to reinstall
centos - Uninstall JDK rpm to reinstall - Unix & Linux Stack Exchange
yum-errors
https://wiki.centos.org/yum-errors
CosBench on Red Hat Linux
http://www.vtechdiary.com/2018/09/cosbench-on-red-hat-linux.html
Can't start the system #380
Can't start the system · Issue #380 · intel-cloud/cosbench · GitHub​

参考资料

使用COSBench工具對ceph s3接口進行壓力測試--續 - JavaShuo

尝试在CentOS 7上启动cosbench遭遇的一些问题 - 之一 - 中道学友 - 博客园 (cnblogs.com)

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

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

相关文章

spring boot3单模块项目工程搭建-上(个人开发模板)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 上文衔接 常规目录创建 common目录 exception.handle目录 result.handle目录 controller目录 service…

基本的SELECT语句及DESC显示表结构

1. SELECT ... 例 : 2. SELECT ... FROM ... (1). SELECT ... : 标识选择哪些列. (2). FROM ... : 标识从哪个表中选取. (3). *通配符 : 选择表中全部列. 例 : 3.列的别名 (1). 空一格. (2). 在列和别名间加入关键字AS. (3). 别名可以使用双引号&#xff0c;以便于在…

二、python+前端 实现MinIO分片上传

python前端 实现MinIO分片上传 一、背景二、流程图三、代码 一、背景 问题一&#xff1a;前端 -> 后端 ->对象存储 的上传流程&#xff0c;耗费带宽。 解决方案&#xff1a;上传流程需要转化为 前端 -> 对象存储&#xff0c;节省上传带宽 问题二&#xff1a;如果使用…

使用spring boot集成shardingsphere分库分表简易测试

根据如下pom整上一个spring-boot项目&#xff0c;spring-boot版本用2.3.5&#xff0c;shardingsphere用5.1.1。 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://ww…

学习微服务nacos遇到的问题

在学习微服务注册到nacos的时候&#xff0c;所有过程都正确了&#xff0c;注册也成功了&#xff0c;但是访问不了调用的地址报错出现问题。 一、引入依赖 在cloud-demo父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依赖 1、springboot <pa…

数据结构 - 顺序表

一. 线性表的概念 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的…

回归预测 | Matlab实现BO-RF贝叶斯优化随机森林多变量回归预测

回归预测 | Matlab实现BO-RF贝叶斯优化随机森林多变量回归预测 目录 回归预测 | Matlab实现BO-RF贝叶斯优化随机森林多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BO-RF贝叶斯优化随机森林多变量回归预测&#xff1b; 2.输入7个特征&#xf…

【Linux】学习记录_14_线程

14 线程 14.1 线程和进程 进程是资源管理的最小单位&#xff0c;每个进程都有数据段、代码段和堆栈段&#xff0c;进程切换时都有复杂的上下文切换等动作。进程切换上下文时&#xff0c; 需要重新映射虚拟地址空间、进出OS内核、寄存器切换&#xff0c;还会干扰处理器的缓存机…

探索NDWI:归一化水体指数的意义与应用

随着遥感技术的不断发展&#xff0c;NDWI&#xff08;Normalized Difference Water Index&#xff0c;归一化水体指数&#xff09;作为一种重要的植被指数&#xff0c;被广泛应用于水资源管理、湿地监测和环境保护等领域。本文将介绍NDWI的意义、计算方法以及在不同领域的应用。…

kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ consumer实战

1、上一节课我们学习了MQTT producer 生产者步骤&#xff0c;MQTT consumer消费者步骤。该步骤可以从支持MRQTT协议的中间件获取数据&#xff0c;该步骤和kafka consumer 一样可以处理实时数据交互&#xff0c;如下图所示&#xff1a; 2、双击步骤打开MQTT consumer 配置窗口&a…

golang学习笔记(net/http库基本使用)

关于net/http库 我们先看看标准库net/http如何处理一个请求。 import ("fmt""log""net/http" )var count 0func main() {http.HandleFunc("/", handler)http.HandleFunc("/count", counter)log.Fatal(http.ListenAndServ…

ChatGPT研究论文提示词集合2-【形成假设、设计研究方法】

点击下方▼▼▼▼链接直达AIPaperPass &#xff01; AIPaperPass - AI论文写作指导平台 目录 1.形成假设 2.设计研究方法 3.书籍介绍 AIPaperPass智能论文写作平台 近期小编按照学术论文的流程&#xff0c;精心准备一套学术研究各个流程的提示词集合。总共14个步骤&#…