Apache Doris

news2024/12/23 4:51:57

Apache Doris教程

1.Doris 简介

1.1 Doris 概述

Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后,

更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 1000 台,单一

业务最大可达到上百 TB。

Apache Doris 是一个现代化的 MPP(Massively Parallel Processing,即大规模并行处理)

分析型(OLAP)数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。

Apache Doris 的分布式架构非常简洁,易于运维,并且可以支持 10PB 以上的超大数据集。

Apache Doris 可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。

1.2OLAPOLTP

  • 联机事务处理OLTP(On-Line Transaction Processing)
  • 公司业务系统使用数据库的场景,针对业务系统数据库有大量随机的增删改查
  • 高并发
  • 速度要快
  • 支持事务

  • 联机分析处理OLAP(On-Line Analytical Processing)
  • 公司的数据分析使用数据库的场景,对已经生成好的数据进行统计分析
  • 一次操作都是针对的整个数据集
  • 只有查这个动作,不会去增删改
  • 查询的响应速度相对慢点也能接受
  • 并发量要求不是太高

OLAPOLTP比较

OLTP

OLAP

数据源

仅包含当前运行日常业务数据

整合来自多个来源的数据,包括OLTP和外部来源

目的

面向应用,面向业务,支撑事务

面向主题,面向分析,支持分析决策

焦点

当下

主要面向过去,面向历史(实时数仓除外)

任务

增删改查

主要是用于读,select查询,写操作很少

响应时间

毫秒

秒,分钟,小时,天,这些取决于数据量和查询的复杂程度

数据量

小数据,MB,GB

大数据,TP,PB

常见的开源OLAP引擎

开源OLAP引擎

优点

缺点

技术融合成本

易用性

使用场景

运维成本

引擎类型

ClickHouse

列式存储

单极性彪悍

保留明细数据

分布式集群在线扩展支持不佳

运维成本极高

非标协议接口

全面

纯列存OLAP

Druid

实时数据摄入

列式存储和位图索引

多租户和高并发

OLAP性能分场景表现差异大

使用门槛高

仅支持聚合查询

非标协议接口

局限

MOLAP

TiDB

HTAP混合数据库

同时支持明细和聚合查询

高度兼容mysql

非列式存储

OLAP能力不足

SQL标准

全面

纯列存OLAP

Kylin

与计算引擎,可以对数据一次聚合多次查询

支持数据规模超大

易用性强,支持标准sql

性能强,查询数据快

需要依赖hadoop生态

仅支持聚合查·询

不支持adhoc查询

不支持join和对数据的更新

SQL标准

局限

MOLAP

Doris

GooleMesa+Apache Impa+ORCFile/Parquet

主键更新

支持Rollup Table

高并发和高通图的Ad-hoc查询

支持聚合+明细数据查询

无外部系统依赖

成熟度不够

兼容mysql访问协议

全面

HOLAP

1.3使用场景

  • 报表分析
  • 实时看板 (Dashboards)
  • 面向企业内部分析师和管理者的报表
  • 面向用户或者客户的高并发报表分析(Customer Facing Analytics)。比如面向网站主的站点分析、面向广告主的广告报表,并发通常要求成千上万的 QPS ,查询延时要求毫秒级响应。著名的电商公司京东在广告报表中使用 Apache Doris ,每天写入 100 亿行数据,查询并发 QPS 上万,99 分位的查询延时 150ms。
  • 即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。小米公司基于 Doris 构建了增长分析平台(Growing Analytics,GA),利用用户行为数据对业务进行增长分析,平均查询延时 10s,95 分位的查询延时 30s 以内,每天的 SQL 查询量为数万条。
  • 统一数仓构建 :一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。海底捞基于 Doris 构建的统一数仓,替换了原来由 Spark、Hive、Hbase、Phoenix 组成的旧架构,架构大大简化。
  • 数据湖联邦查询:通过外表的方式联邦分析位于 Hive、Hudi 中的数据,在避免数据拷贝的前提下,查询性能大幅提升

1.5架构

Doris 的架构很简洁,只设 FE(Frontend)前端进程、BE(Backend)后端进程两种角色、两个后台的服务进程,不依赖于外部组件,方便部署和运维,FE、BE 都可在线性扩展。

  1. FE(Frontend):存储、维护集群元数据;负责接收、解析查询请求,规划查询计划,调度查询执行,返回查询结果。主要有三个角色:
  • Leader 和 Follower:主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。
  • Observer:用来扩展查询节点,同时起到元数据备份的作用。如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加 observer 的节点。observer 不参与任何的写入,只参与读取。
  1. BE(Backend):负责物理数据的存储和计算;依据 FE 生成的物理计划,分布式地执行查询。数据的可靠性由 BE 保证,BE 会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整。
  1. MySQL Client:Doris 借助 MySQL 协议,用户使用任意 MySQL 的 ODBC/JDBC 以及 MySQL 的客户端,都可以直接访问 Doris。
  1. Broker:一个独立的无状态进程。封装了文件系统接口,提供 Doris 读取远端存储系统中文件的能力,包括 HDFS,S3,BOS 等。

1.6默认端口

实例名称

端口名称

默认端口

通讯方向

说明

BE

be_port

9060

FE-->BE

BE 上 thrift server 的端口,用于接收来自 FE 的请求

BE

webserver_port

8040

BE<-->FE

BE 上的 http server 端口

BE

heartbeat_service_port

9050

FE-->BE

BE 上心跳服务端口,用于接收来自 FE 的心跳

BE

brpc_prot*

8060

FE<-->BE,BE<-->BE

BE 上的 brpc 端口,用于 BE 之间通信

FE

http_port

8030

FE<-->FE ,用户<--> FE

FE 上的 http_server 端口

FE

rpc_port

9020

BE-->FE ,FE<-->FE

FE 上 thirft server 端口

FE

query_port

9030

用户<--> FE

FE 上的 mysql server 端口

FE

edit_log_port

9010

FE<-->FE

FE 上 bdbje 之间通信用的端口

Broker

broker_ipc_port

8000

FE-->BROKER,BE-->BROKER

Broker 上的 thrift server,用于接收请求

2.安装

2.1安装前准备

  • Linux 操作系统版本需求

 

  • 软件需求

 

  • 测试环境硬件配置需求

 

  • 生产环境硬件配置需求

 

  • 操作系统环境要求

设置系统最大文件打开句柄数   ==>启动一个程序的时候,打开文件的数量就是句柄数

Plain Text
1.打开文件
security  /sɪˈkjʊərəti/
vi /etc/security/limits.conf
2.在文件最后添加下面几行信息(注意* 也要赋值进去)

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535


ulimit -n 65535 临时生效

修改完文件后需要重新启动虚拟机
重启永久生效,也可以用 。


如果不修改这个句柄数大于等于60000,回头启动doris的be节点的时候就会报如下的错
File descriptor number is less than 60000. Please use (ulimit -n) to set a value equal or greater than 60000
W1120 18:14:20.934705  3437 storage_engine.cpp:188] check fd number failed, error: Internal error: file descriptors limit is too small
W1120 18:14:20.934713  3437 storage_engine.cpp:102] open engine failed, error: Internal error: file descriptors limit is too small
F1120 18:14:20.935087  3437 doris_main.cpp:404] fail to open StorageEngine, res=file descriptors limit is too small

关闭交换分区(swap

交换分区是linux用来当做虚拟内存用的磁盘分区;

linux可以把一块磁盘分区当做内存来使用(虚拟内存、交换分区);

Linux使用交换分区会给Doris带来很严重的性能问题,建议在安装之前禁用交换分区;

Shell
1、查看 Linux 当前 Swap 分区
free -m
2、关闭 Swap 分区
swapoff -a

[root@linux01 apps]# free -m
              total        used        free      shared  buff/cache   available
Mem:           5840         997        4176           9         666        4604
Swap:          6015           0        6015
[root@linux01 apps]# swapoff -a

3.验证是否关闭成功
[root@linux01 apps]# free -m  
              total        used        free      shared  buff/cache   available
Mem:           5840         933        4235           9         671        4667
Swap:             0           0           0

注意事项:

  1. FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个GB 不等。
  1. BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量* 33 副本)计算,然后再预留额外 40%的空间用作后台 compaction 以及一些中间数据的存放。
  1. 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数 据,那么至少需要 3 台机器各部署一个 BE 实例(而不是 1 台机器部署 3 BE 实例)。多 FE 所在服务器的时钟必须保持一致(允许最多 5 秒的时钟偏差)
  1. 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
  1. 所有部署节点关闭 Swap
  1. FE 节点数据至少为 11 Follower)。当部署 1 Follower 1 Observer ,可以实现读高可用。当部署 3 Follower 时,可以实现读写高可用(HA)。
  1. Follower 的数量必须为奇数,Observer 数量随意。
  1. 根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 3 Follower 1-3 Observer。如果是离线业务,建议部署 1 Follower 1-3 Observer
  1. Broker 是用于访问外部数据源(如 HDFS)的进程。通常,在每台机器上部署一个 broker 实例即可。

2.2安装FE

  1. 去官网下载源码包,官网地址:https://doris.apache.org

根据自己的配置选择性点击下载

  1. 上传到linux
  1. 解压
  1. 修改配置文件

Shell
-- 去自己的路劲中找到fe.conf文件
vi /opt/apps/doris/fe/conf/fe.conf
#配置文件中指定元数据路径: 注意这个文件夹要自己创建
meta_dir = /opt/data/dorisdata/doris-meta
#修改绑定 ip(每台机器修改成自己的 ip)
priority_networks = 192.168.17.0/24

  1. 分发集群

Shell
[root@linux01 apps]# for i in 2 3
> do
> scp /et
c/profile linux0$i:/etc/profile
> scp -r /opt/apps/doris/ linux0$i:/opt/apps/
> done

  1. 启动

Shell
进入到fe的bin目录下执行
[root@linux01 bin]# ./start_fe.sh --daemon

生产环境强烈建议单独指定目录不要放在 Doris 安装目录下,最好是单独的磁盘(如果有 SSD 最好)。
如果机器有多个 ip, 比如内网外网, 虚拟机 docker , 需要进行 ip 绑定,才能正确识别。
JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。

2.3安装BE

进入到be的conf目录下修改配置文件

Shell
vi be.conf 

#
配置文件中指定数据存放路径:
storage_root_path = /opt/data/dorisdata/bedata

#修改绑定 ip(每台机器修改成自己的 ip)
priority_networks = 192.168.17.0/24

注意事项:

storage_root_path 默认在 be/storage 下,需要手动创建该目录。多个路径之间使用英文状

态的分号;分隔(最后一个目录后不要加)。

可以通过路径区别存储目录的介质,HDD SSD。可以添加容量限制在每个路径的末

尾,通过英文状态逗号,隔开,如:

storage_root_path=/home/disk1/doris.HDD,50;/home/disk2/doris.SSD,10;/home/disk2/doris

说明:

/home/disk1/doris.HDD,50,表示存储限制为 50GBHDD;

/home/disk2/doris.SSD,10,存储限制为 10GBSSD

/home/disk2/doris,存储限制为磁盘最大容量,默认为 HDD

关于Centos 添加新硬盘,分区格式化、挂载硬盘文档:

Centos 添加新硬盘,分区格式化、挂载硬盘

因为FE和BE两个都是单独的个体,所以他俩相互间还不认识,就需要我们通过mysql的客户端将他们建立起联系

如果没有装mysql的家伙,记得先装mysql

安装mysql

使用 MySQL Client 连接 FE

SQL
mysql -h linux01 -P 9030 -uroot

这个只是用了mysql的客户端去连接doris的fe,不是启动的mysql哦!!!并且第一次进去的话,是不需要密码的
解释:
-h  连接地址
-P  端口号
-u  账号
-p  密码


--这个可以设置可以不设置啦,正常生产过程中都会设置一个相对比较复杂的密码,学习的时候就无所谓了
--如果想设置,下面的命令就可以
SET PASSWORD FOR 'root' = PASSWORD('123456');

fe启动完成后可以查看fe的运行状态

SQL
SHOW PROC '/frontends'\G;

添加 BE 节点

SQL
ALTER SYSTEM ADD BACKEND "linux01:9050";
ALTER SYSTEM ADD BACKEND "linux02:9050";
ALTER SYSTEM ADD BACKEND "linux03:9050";

查看 BE 状态

SQL
SHOW PROC '/backends';

Alive
为 false 表示该 BE 节点还是死的

添加环境变量

Shell
#doris_fe
export DORIS_FE_HOME=/opt/apps/doris1.1.4/fe
export PATH=$PATH:$DORIS_FE_HOME/bin

#doris_be
export DORIS_BE_HOME=/opt/apps/doris1.1.4/be
export PATH=$PATH:$DORIS_BE_HOME/bin

启动BE

SQL
启动 BE(每个节点)
/opt/apps/doris/be/bin/start_be.sh --daemon

启动后再次查看BE的节点
mysql -h linux01 -P 9030 -uroot -p 123456
SHOW PROC '/backends';
Alive 为 true 表示该 BE 节点存活。

2.4部署 FS_Broker(可选)

Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS、百度云 BOS 及 Amazon S3 的 fs_broker。fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker。

启动 Broker

SQL
/opt/apps/doris/fe/apache_hdfs_broker/bin/start_broker.sh --daemon

使用 mysql-client 连接启动的 FE,执行以下命令:

SQL
mysql -h linux01 -P 9030 -uroot -p 123456
ALTER SYSTEM ADD BROKER broker_name "linux01:8000","linux02:8000","linux03:8000";


当然你也可以一个个的加,并且 broker_name 这只是一个名字,可以自己取

查看 Broker 状态

SQL
使用 mysql-client 连接任一已启动的 FE,执行以下命令查看 Broker 状态:
SHOW PROC "/brokers"; 

2.5扩容和缩容

2.5.1 FE 扩容和缩容

可以通过将 FE 扩容至 3 个以上节点来实现 FE 的高可用。

使用 MySQL 登录客户端后,可以使用 sql 命令查看 FE 状态,目前就一台 FE

SQL
mysql -h linux01 -P 9030 -uroot -p
mysql> SHOW PROC '/frontends'\G;


*************************** 1. row ***************************
             Name: 192.168.17.3_9010_1661510658077
               IP: 192.168.17.3
         HostName: linux01
      EditLogPort: 9010
         HttpPort: 8030
        QueryPort: 9030
          RpcPort: 9020
             Role: FOLLOWER
         IsMaster: true
        ClusterId: 1133836578
             Join: true
            Alive: true
ReplayedJournalId: 2472
    LastHeartbeat: 2022-08-26 13:07:47
         IsHelper: true
           ErrMsg:
          Version: 1.1.1-rc03-2dbd70bf9
 CurrentConnected: Yes
1 row in set (0.03 sec)

添加FE的新节点:

FE 分为 Leader,Follower 和 Observer 三种角色。 默认一个集群,只能有一个 Leader,可以有多个 Follower 和 Observer。其中 Leader 和 Follower 组成一个 Paxos 选择组,如果Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。

如果只部署一个 FE,则 FE 默认就是 Leader。在此基础上,可以添加若干 Follower 和 Observer。

SQL
ALTER SYSTEM ADD FOLLOWER "linux02:9010";
ALTER SYSTEM ADD OBSERVER "linux03:9010";

在linux02和linux03上分别启动FE节点

SQL
/opt/apps/doris/fe/bin/start_fe.sh --helper  linux01:9010 --daemon

记住哦,如果是第一次添加的话,一定要加这两个参数  --helper  linux01:9010 

此时你再去查看FE的状态就发现有3台啦

SQL
mysql> SHOW PROC '/frontends'\G;
*************************** 1. row ***************************
             Name: 192.168.17.4_9010_1661490723344
               IP: 192.168.17.4
         HostName: linux02
      EditLogPort: 9010
         HttpPort: 8030
        QueryPort: 0
          RpcPort: 0
             Role: FOLLOWER
         IsMaster: false
        ClusterId: 1133836578
             Join: false
            Alive: false
ReplayedJournalId: 0
    LastHeartbeat: NULL
         IsHelper: true
           ErrMsg: java.net.ConnectException: Connection refused (Connection refused)
          Version: NULL
 CurrentConnected: No
*************************** 2. row ***************************
             Name: 192.168.17.5_9010_1661490727316
               IP: 192.168.17.5
         HostName: linux03
      EditLogPort: 9010
         HttpPort: 8030
        QueryPort: 0
          RpcPort: 0
             Role: OBSERVER
         IsMaster: false
        ClusterId: 1133836578
             Join: false
            Alive: false
ReplayedJournalId: 0
    LastHeartbeat: NULL
         IsHelper: false
           ErrMsg: java.net.ConnectException: Connection refused (Connection refused)
          Version: NULL
 CurrentConnected: No
*************************** 3. row ***************************
             Name: 192.168.17.3_9010_1661510658077
               IP: 192.168.17.3
         HostName: linux01
      EditLogPort: 9010
         HttpPort: 8030
        QueryPort: 9030
          RpcPort: 9020
             Role: FOLLOWER
         IsMaster: true
        ClusterId: 1133836578
             Join: true
            Alive: true
ReplayedJournalId: 2577
    LastHeartbeat: 2022-08-26 13:13:33
         IsHelper: true
           ErrMsg:
          Version: 1.1.1-rc03-2dbd70bf9
 CurrentConnected: Yes
3 rows in set (0.04 sec)

删除FE节点命令

SQL
ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";

ALTER SYSTEM DROP FOLLOWER "linux01:9010";

注意:删除 Follower FE 时,确保最终剩余的 Follower(包括 Leader)节点最好为奇数。

2.5.2 BE 扩容和缩容

增加 BE 节点

SQL
在 MySQL 客户端,通过
ALTER SYSTEM ADD BACKEND 命令增加 BE 节点。
ALTER SYSTEM ADD BACKEND "linux01:9050";

DROP 方式删除 BE 节点(不推荐)

SQL
ALTER SYSTEM DROP BACKEND "be_host:be_heartbeat_service_port";
ALTER SYSTEM DROP BACKEND "linux01:9050";

注意:DROP BACKEND 会直接删除该 BE,并且其上的数据将不能再恢复!!!所以我们强烈不推荐使用 DROP BACKEND 这种方式删除 BE 节点。当你使用这个语句时,会有对应的防误操作提示。

DECOMMISSION 方式删除 BE 节点(推荐)

SQL
ALTER SYSTEM DECOMMISSION BACKEND  "be_host:be_heartbeat_service_port";
ALTER SYSTEM DECOMMISSION BACKEND "linux01:9050";

  1. 该命令用于安全删除 BE 节点。命令下发后,Doris 会尝试将该 BE 上的数据向其 BE 节点迁移,当所有数据都迁移完成后,Doris 会自动删除该节点。
  1. 该命令是一个异步操作。执行后,可以通过 SHOW PROC '/backends'; 看到该 BE节点的 isDecommission 状态为 true。表示该节点正在进行下线。
  1. 该命令不一定执行成功。比如剩余 BE 存储空间不足以容纳下线 BE 上的数据,或者剩余机器数量不满足最小副本数时,该命令都无法完成,并且 BE 会一直处于isDecommission true 的状态。
  1. DECOMMISSION 的进度,可以通过 SHOW PROC '/backends'; 中的 TabletNum 查看,如果正在进行,TabletNum 将不断减少。
  1. 该操作可以通过如下命令取消:CANCEL DECOMMISSION BACKEND "be_host:be_heartbeat_service_port"; 取消0后,该 BE 上的数据将维持当前剩余的数据量。后续 Doris 重新进行负载均衡。

2.5.3 Broker 扩容缩容

Broker 实例的数量没有硬性要求。通常每台物理机部署一个即可。Broker 的添加和删除可以通过以下命令完成:

SQL
ALTER SYSTEM ADD BROKER broker_name "broker_host:broker_ipc_port"; 
ALTER SYSTEM DROP BROKER broker_name "broker_host:broker_ipc_port"; 
ALTER SYSTEM DROP ALL BROKER broker_name;

Broker 是无状态的进程,可以随意启停。当然,停止后,正在其上运行的作业会失败,重试即可。

3 数据表设计

3.1字段类型

TINYINT

1 字节

范围:-2^7 + 1 ~ 2^7 - 1

SMALLINT

2 字节

范围:-2^15 + 1 ~ 2^15 - 1

INT

4 字节

范围:-2^31 + 1 ~ 2^31 - 1

BIGINT

8 字节

范围:-2^63 + 1 ~ 2^63 - 1

LARGEINT

16 字节

范围:-2^127 + 1 ~ 2^127 - 1

FLOAT

4 字节

支持科学计数法

DOUBLE

12 字节

支持科学计数法

DECIMAL[(precision, scale)]

16 字节

保证精度的小数类型。默认是DECIMAL(10, 0) ,precision: 1 ~ 27 ,scale: 0 ~ 9,其中整数部分为 1 ~ 18,不支持科学计数法

DATE

3 字节

范围:0000-01-01 ~ 9999-12-31

DATETIME

8 字节

范围:0000-01-01 00:00:00 ~ 9999-12-31 23:59:59

CHAR[(length)]

定长字符串。长度范围:1 ~ 255。默认为 1

VARCHAR[(length)]

变长字符串。长度范围:1 ~ 65533

BOOLEAN

与 TINYINT 一样,0 代表 false,1 代表 true

HLL

1~16385 个字节

hll 列类型,不需要指定长度和默认值,长度根据数据的聚合程度系统内控制,并且 HLL 列只能通过 配套的hll_union_agg、Hll_cardinality、hll_hash 进行查询或使用

BITMAP

bitmap 列类型,不需要指定长度和默认值。表示整型的集合,元素最大支持到 2^64 - 1

STRING

变长字符串,0.15 版本支持,最大支持 2147483643 字节(2GB-4),长度还受 be 配置`string_type_soft_limit`,  实际能存储的最大长度取两者最小值。只能用在 value 列,不能用在 key列和分区、分桶列

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次简单的问题排查背后蕴含的巨大的知识量

现象 所有的请求都卡住。堆dump正常。有一段时间内存占用高&#xff0c;GC频繁且耗时长&#xff0c;过了那段时间后监控上恢复正常。日志有OutOfMemory的异常 结论 在这段代码OOM之前&#xff0c;它会导致JVM不停 fullGC 与 stopWorld&#xff0c;从而导致了程序卡死。&#…

【Linux】线程同步/生产消费模型/线程池/读写锁

目录 1.Linux线程同步 1.1.条件变量 1.1.1.同步概念与竞态条件 1.1.2.条件变量函数 初始化和销毁 1.1.3.等待条件满足 1.1.5.为什么 pthread_cond_wait 需要互斥量? 1.1.6.条件变量使用规范 2.生产者消费者模型 2.1.模型概念 2.2.模型优点 2.3.基于Blocking Queue的…

[入门必看]数据结构6.1:图的基本概念

[入门必看]数据结构6.1&#xff1a;图的基本概念 第六章 图6.1 图的基本概念知识总览6.1.1 图的基本概念 6.1.1 图的基本概念图的定义图逻辑结构的应用无向图、有向图简单图、多重图顶点的度、入度、出度顶点-顶点的关系描述连通图、强连通图研究图的局部——子图连通分量强连通…

西门子物联网网关 IOT2050 杭州乐芯生态合作版 LX-IOT2050

西门子物联网网关 IOT2050 乐芯生态合作版 LX-IOT2050 •基于 IOT2050 硬件基础上安装了乐芯科技数据采集引擎&#xff0c; 提供开箱即用的物联网解决方案。 •硬件&#xff1a;基于西门子工业的高品质硬件&#xff0c;完善的国际认证资质 &#xff0c; 欧盟CE、UL、CCC认证。…

零基础小白怎么入门网络安全(黑客)?看这篇就够啦

前言 我刚入门网络安全&#xff0c;该怎么学&#xff1f;要学哪些东西&#xff1f;有哪些方向&#xff1f;怎么选&#xff1f; 不同于Java、C/C等后端开发岗位有非常明晰的学习路线&#xff0c;网路安全更多是靠自己摸索&#xff0c;要学的东西又杂又多&#xff0c;难成体系。…

会话跟踪cookie和session

什么是会话跟踪技术 会话&#xff1a;用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可能包含多次请求和响应。 会话跟踪&#xff1a;一种维护浏览器状态的方法&#xff0c;服务器需…

【无标题】 Vue 路由库Router 【重点】 - 安装 - 基本使用 - 路由配置 - 路由模式 - 路由传递参数 - 路由内置对象 - 路由守卫

0.0 课程介绍 Vue 路由库Router 【重点】 安装基本使用路由配置路由模式路由传递参数路由内置对象路由守卫 Vue的内置API 【掌握】 ref Vue.set Vue.nextTick Vue.filter Vue.component Vue.use Vue.directive 1.0 Vue的路由Router 【重点】 1.1 路由作用 进行页面…

Doris---数据表设计

表的基本概念 1 Row & Column 一张表包括行&#xff08;Row&#xff09;和列&#xff08;Column&#xff09;&#xff1b; Row 即用户的一行数据。Column 用于描述一行数据中不同的字段。 doris中的列分为两类&#xff1a;key列和value列 key列在doris中有两种作用&…

【Android】【Java】播放多段视频切换时出现的短暂黑屏现象处理

逻辑描述 当A视频正在播放中&#xff0c;点击A视频跳过A视频剩余内容并加载B视频 Bug描述 在切换视频时&#xff0c;显示短暂黑屏&#xff0c;如下图所示&#xff1a; 解决思路 当看到这个bug出现时&#xff0c;第一反应是第二段视频在初始化视频时有一定的延时&#xff…

关于C语言杂记7

文章目录 关于数组二级指针字符串字符串的输入与输出字符串函数1、字符数组的输入和输出&#xff1a;2、5种相关函数&#xff1a; 关于数组 char *fruits[LEN] { // 定义一个字符指针数组&#xff0c;包含LEN个元素"apple", // 初始化第1个元素为字符串"a…

【C++】unordered_map和unordered_set的使用

文章目录 前言一、unordered_map的使用及性能测试二、unordered_set的使用 1.习题练习总结 前言 unordered 系列关联式容器 &#xff1a; 在 C98 中&#xff0c; STL 提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到O&#xff08;logN&#xff09; &a…

SDN — Google B4 SDN WAN 网络架构

目录 文章目录 目录Google B4 SDN WAN 网络B4 网络架构物理设备层局部网络控制层全局控制层Hybrid SDN 模式Google B4 SDN WAN 网络 Google 的 WAN 有 2 张网络(Two Backbones): B2(I-Scale Network):数据中心互联 Internet(POP)的网络,用于面向 Internet 用户访问,…

大象转身只需点点鼠标,爆火 DragGAN 原理浅析

出品人&#xff1a;Towhee 技术团队 作者&#xff1a;张晨 DragGAN介绍 合成满足用户需求的视觉内容往往需要对生成对象的姿势、形状、表情和布局进行灵活和精确的控制。 现有方法通过手动注释的训练数据或先前的 3D 模型获得生成对抗网络 (GAN) 的可控性&#xff0c;这通常缺乏…

保姆级教程:手把手教你拿下雅思写作7分

在留学路上&#xff0c;雅思考试是绕不开的一道坎。然而&#xff0c;众所周知&#xff0c;雅思学习热度高&#xff0c;学习难度大&#xff0c;而且很多人找不到合适的学习方法。在这里&#xff0c;我们以雅思写作中的大作文为例&#xff0c;从大作文的结构拆解、学习的任务拆分…

SSM编程---Day 02

目录 一、核心配置文件 二、junit介绍 三、自定义java注解 四、自定义注解 五、添加log4j的支持 六、sql映射文件的介绍 一、核心配置文件 1、核心配置文件中需要注意顺序 2、根节点 <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN"…

数据结构-最小生成树Prim算法的实现

目录 一、前言 二、最小生成树 三、Prim算法 四、Prim算法的实现 一、前言 在计算机科学中&#xff0c;数据结构是一种组织和存储数据的方式&#xff0c;以便于访问和修改。数据结构是计算机科学的基础&#xff0c;它是算法的基础。在数据结构中&#xff0c;最小生成树是一…

Python调用腾讯云函数传递json数据

前言 有些时候有一些公共的方法&#xff0c;需要放在服务器上&#xff0c;在不同的电脑上使用。但是我们有没有自己的服务器&#xff0c;所以考虑将公共的方法放在腾讯云、华为云、阿里云、百度云等云平台上&#xff0c;方便在不同的电脑上复用。 我们这里使用的是腾讯云&#…

AMD Software Adrenalin Edition 23.5.1驱动发布,快速获取驱动

AMD新驱动赶在五月天发布&#xff01;AMD Software Adrenalin Edition 23.5.1驱动 &#xff0c;为部分游戏带来支持&#xff0c;以及为重要的软件带来修复。驱动人生带大家一览AMD WHQL 23.5.1驱动的优化内容。 游戏方面&#xff0c;AMD WHQL 23.5.1主要为游戏《指环王&#x…

详解MVCC相关知识点

前言&#xff1a;学习前&#xff0c;先叙述mysql相关基础知识&#xff0c;一步步了解mysql底层机制。 1.Mysql的隔离级别&#xff1a; 数据库事务的隔离级别有4个&#xff0c;由低到高依次为Read uncommitted 、Read committed、Repeatable read 、Serializable &#xff0c;这…

23种设计模式之观察者模式(Observer Pattern)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的观察者模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬…